Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into 5/10/2015_bay_merge_attempt_two

Conflicts:
	code/game/turfs/simulated/floor.dm
	icons/mob/back.dmi
	maps/exodus-3.dmm
	polaris.dme
This commit is contained in:
Neerti
2015-05-10 04:21:37 -04:00
233 changed files with 12838 additions and 11596 deletions
+36 -2
View File
@@ -277,6 +277,13 @@ var/global/floorIsLava = 0
var/dat = "<html><head><title>Info on [key]</title></head>"
dat += "<body>"
var/p_age = "unknown"
for(var/client/C in clients)
if(C.ckey == key)
p_age = C.player_age
break
dat +="<span style='color:#000000; font-weight: bold'>Player age: [p_age]</span><br>"
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
@@ -747,20 +754,43 @@ var/global/floorIsLava = 0
set category = "Server"
set desc="Globally Toggles OOC"
set name="Toggle OOC"
if(!check_rights(R_ADMIN))
return
config.ooc_allowed = !(config.ooc_allowed)
if (config.ooc_allowed)
world << "<B>The OOC channel has been globally enabled!</B>"
else
world << "<B>The OOC channel has been globally disabled!</B>"
log_admin("[key_name(usr)] toggled OOC.")
message_admins("[key_name_admin(usr)] toggled OOC.", 1)
log_and_message_admins("toggled OOC.")
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/togglelooc()
set category = "Server"
set desc="Globally Toggles LOOC"
set name="Toggle LOOC"
if(!check_rights(R_ADMIN))
return
config.looc_allowed = !(config.looc_allowed)
if (config.looc_allowed)
world << "<B>The LOOC channel has been globally enabled!</B>"
else
world << "<B>The LOOC channel has been globally disabled!</B>"
log_and_message_admins("toggled LOOC.")
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/toggledsay()
set category = "Server"
set desc="Globally Toggles DSAY"
set name="Toggle DSAY"
if(!check_rights(R_ADMIN))
return
config.dsay_allowed = !(config.dsay_allowed)
if (config.dsay_allowed)
world << "<B>Deadchat has been globally enabled!</B>"
@@ -774,6 +804,10 @@ var/global/floorIsLava = 0
set category = "Server"
set desc="Toggle Dead OOC."
set name="Toggle Dead OOC"
if(!check_rights(R_ADMIN))
return
config.dooc_allowed = !( config.dooc_allowed )
log_admin("[key_name(usr)] toggled Dead OOC.")
message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1)
+4 -1
View File
@@ -58,6 +58,7 @@ var/list/admin_verbs_admin = list(
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
/client/proc/secrets,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/togglelooc, /*toggles looc on/off for everyone*/
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
@@ -109,7 +110,8 @@ var/list/admin_verbs_fun = list(
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/make_sound,
/client/proc/toggle_random_events,
/client/proc/editappear
/client/proc/editappear,
/client/proc/roll_dices
)
var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_fruit,
@@ -254,6 +256,7 @@ var/list/admin_verbs_hideable = list(
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
/client/proc/enable_debug_verbs,
/client/proc/roll_dices,
/proc/possess,
/proc/release
)
+6 -7
View File
@@ -1369,8 +1369,8 @@
var/data = ""
var/obj/item/weapon/paper_bundle/B = fax
for (var/page = 1, page <= B.amount, page++)
var/obj/pageobj = B.contents[page]
for (var/page = 1, page <= B.pages.len, page++)
var/obj/pageobj = B.pages[page]
data += "<A href='?src=\ref[src];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
usr << browse(data, "window=[B.name]")
@@ -1383,11 +1383,11 @@
if (!bundle) return
if (istype(bundle.contents[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = bundle.contents[page]
if (istype(bundle.pages[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = bundle.pages[page]
P.show_content(src.owner, 1)
else if (istype(bundle.contents[page], /obj/item/weapon/photo))
var/obj/item/weapon/photo/H = bundle.contents[page]
else if (istype(bundle.pages[page], /obj/item/weapon/photo))
var/obj/item/weapon/photo/H = bundle.pages[page]
H.show(src.owner)
return
@@ -2216,7 +2216,6 @@
for(var/obj/item/clothing/under/W in world)
W.icon_state = "schoolgirl"
W.item_state = "w_suit"
W.item_color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('sound/AI/animes.ogg')
if("paintball")
+1 -1
View File
@@ -13,7 +13,7 @@
display_name = holder.fakekey
for(var/mob/M in mob_list)
if((M.mind && M.mind.special_role && M.client) || (M.client && M.client.holder))
if((M.mind && M.mind.special_role && M.client) || check_rights(R_ADMIN, 0, M))
M << "<font color='#960018'><span class='ooc'>" + create_text_tag("aooc", "Antag-OOC:", M.client) + " <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>"
log_ooc("(ANTAG) [key] : [msg]")
+11 -2
View File
@@ -1,12 +1,17 @@
/client/proc/cinematic(var/cinematic as anything in list("explosion",null))
set name = "cinematic"
set name = "Cinematic"
set category = "Fun"
set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted.
set hidden = 1
if(!check_rights(R_FUN))
return
if(alert("Are you sure you want to run [cinematic]?","Confirmation","Yes","No")=="No") return
if(!ticker) return
switch(cinematic)
if("explosion")
if(alert("The game will be over. Are you really sure?", "Confirmation" ,"Continue", "Cancel") == "Cancel")
return
var/parameter = input(src,"station_missed = ?","Enter Parameter",0) as num
var/override
switch(parameter)
@@ -15,4 +20,8 @@
if(0)
override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","mercenary","AI malfunction","no override")
ticker.station_explosion_cinematic(parameter,override)
log_admin("[key_name(src)] launched cinematic \"[cinematic]\"")
message_admins("[key_name_admin(src)] launched cinematic \"[cinematic]\"", 1)
return
+17 -1
View File
@@ -525,6 +525,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
//log_admin("[key_name(src)] has alienized [M.key].")
var/list/dresspacks = list(
"strip",
"job",
"standard space gear",
"tournament standard red",
"tournament standard green",
@@ -555,10 +556,25 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
for (var/obj/item/I in M)
if (istype(I, /obj/item/weapon/implant))
continue
qdel(I)
M.drop_from_inventory(I)
if(I.loc != M)
qdel(I)
switch(dresscode)
if ("strip")
//do nothing
if ("job")
var/selected_job = input("Select job", "Robust quick dress shop") as null|anything in joblist
if (isnull(selected_job))
return
var/datum/job/job = job_master.GetJob(selected_job)
if(!job)
return
job.equip(M)
job.apply_fingerprints(M)
job_master.spawnId(M, selected_job)
if ("standard space gear")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
+24
View File
@@ -0,0 +1,24 @@
/client/proc/roll_dices()
set category = "Fun"
set name = "Roll Dice"
if(!check_rights(R_FUN))
return
var/sum = input("How many times should we throw?") as num
var/side = input("Select the number of sides.") as num
if(!side)
side = 6
if(!sum)
sum = 2
var/dice = num2text(sum) + "d" + num2text(side)
if(alert("Do you want to inform the world about your game?",,"Yes", "No") == "Yes")
world << "<h2 style=\"color:#A50400\">The dice have been rolled by Gods!</h2>"
var/result = roll(dice)
if(alert("Do you want to inform the world about the result?",,"Yes", "No") == "Yes")
world << "<h2 style=\"color:#A50400\">Gods rolled [dice], result is [result]</h2>"
message_admins("[key_name_admin(src)] rolled dice [dice], result is [result]", 1)
+1 -1
View File
@@ -1447,7 +1447,7 @@ datum/preferences
rlimb_data[limb] = choice
organ_data[limb] = "cyborg"
if(second_limb)
organ_data[second_limb] = choice
rlimb_data[second_limb] = choice
organ_data[second_limb] = "cyborg"
if(third_limb && organ_data[third_limb] == "amputated")
organ_data[third_limb] = null
+287 -17
View File
@@ -163,6 +163,12 @@ var/global/list/gear_datums = list()
cost = 1
slot = slot_head
/datum/gear/wcap
display_name = "cap, white"
path = /obj/item/clothing/head/soft/mime
cost = 1
slot = slot_head
/datum/gear/hairflower
display_name = "hair flower pin"
path = /obj/item/clothing/head/hairflower
@@ -181,6 +187,12 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_head
/datum/gear/rhardhat
display_name = "hardhat, red"
path = /obj/item/clothing/head/hardhat/red
cost = 2
slot = slot_head
/datum/gear/yhardhat
display_name = "hardhat, yellow"
path = /obj/item/clothing/head/hardhat
@@ -205,6 +217,12 @@ var/global/list/gear_datums = list()
cost = 1
slot = slot_head
/datum/gear/tophat
display_name = "hat, tophat"
path = /obj/item/clothing/head/that
cost = 1
slot = slot_head
// Wig by Earthcrusher, blame him.
/datum/gear/philosopher_wig
display_name = "natural philosopher's wig"
@@ -239,12 +257,37 @@ var/global/list/gear_datums = list()
display_name = "Glasses, green"
path = /obj/item/clothing/glasses/gglasses
cost = 1
slot = slot_glasses
/datum/gear/prescriptionhipster
display_name = "Glasses, hipster"
path = /obj/item/clothing/glasses/regular/hipster
cost = 1
slot = slot_glasses
/datum/gear/prescription
display_name = "Glasses, prescription"
path = /obj/item/clothing/glasses/regular
cost = 1
slot = slot_glasses
/datum/gear/monocle
display_name = "Monocle"
path = /obj/item/clothing/glasses/monocle
cost = 1
slot = slot_glasses
/datum/gear/scanning_goggles
display_name = "scanning goggles"
path = /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
cost = 1
// allowed_roles = list("Roboticist", "Scientist", "Research Director")
slot = slot_glasses
/datum/gear/sciencegoggles
display_name = "Science Goggles"
path = /obj/item/clothing/glasses/science
cost = 1
slot = slot_glasses
/datum/gear/security
display_name = "Security HUD"
@@ -260,7 +303,7 @@ var/global/list/gear_datums = list()
slot = slot_glasses
allowed_roles = list("Security Officer","Head of Security","Warden")
/datum/gear/prescription
/datum/gear/prescriptionsun
display_name = "sunglasses, presciption"
path = /obj/item/clothing/glasses/sunglasses/prescription
cost = 2
@@ -276,18 +319,18 @@ var/global/list/gear_datums = list()
// Uniform slot
/datum/gear/exec_suit
display_name = "executive suit"
path = /obj/item/clothing/under/suit_jacket/really_black
slot = slot_w_uniform
cost = 1
/datum/gear/blazer_blue
display_name = "blazer, blue"
path = /obj/item/clothing/under/blazer
slot = slot_w_uniform
cost = 1
/datum/gear/cheongsam
display_name = "cheongsam, white"
path = /obj/item/clothing/under/cheongsam
slot = slot_w_uniform
cost = 1
/datum/gear/kilt
display_name = "kilt"
path = /obj/item/clothing/under/kilt
@@ -300,6 +343,17 @@ var/global/list/gear_datums = list()
slot = slot_w_uniform
cost = 1
/datum/gear/blackfjumpsuit
display_name = "jumpsuit, female-black"
path = /obj/item/clothing/under/color/blackf
slot = slot_w_uniform
cost = 1
/datum/gear/blackfjumpsuit
display_name = "jumpsuit, rainbow"
path = /obj/item/clothing/under/rainbow
slot = slot_w_uniform
cost = 1
/datum/gear/skirt_blue
display_name = "plaid skirt, blue"
path = /obj/item/clothing/under/dress/plaid_blue
@@ -324,6 +378,114 @@ var/global/list/gear_datums = list()
slot = slot_w_uniform
cost = 1
/datum/gear/amishsuit
display_name = "suit, amish"
path = /obj/item/clothing/under/sl_suit
slot = slot_w_uniform
cost = 1
/datum/gear/blacksuit
display_name = "suit, black"
path = /obj/item/clothing/under/suit_jacket
slot = slot_w_uniform
cost = 1
/datum/gear/shinyblacksuit
display_name = "suit, shiny-black"
path = /obj/item/clothing/under/lawyer/black
slot = slot_w_uniform
cost = 1
/datum/gear/bluesuit
display_name = "suit, blue"
path = /obj/item/clothing/under/lawyer/blue
slot = slot_w_uniform
cost = 1
/datum/gear/burgundysuit
display_name = "suit, burgundy"
path = /obj/item/clothing/under/suit_jacket/burgundy
slot = slot_w_uniform
cost = 1
/datum/gear/checkeredsuit
display_name = "suit, checkered"
path = /obj/item/clothing/under/suit_jacket/checkered
slot = slot_w_uniform
cost = 1
/datum/gear/charcoalsuit
display_name = "suit, charcoal"
path = /obj/item/clothing/under/suit_jacket/charcoal
slot = slot_w_uniform
cost = 1
/datum/gear/execsuit
display_name = "suit, executive"
path = /obj/item/clothing/under/suit_jacket/really_black
slot = slot_w_uniform
cost = 1
/datum/gear/femaleexecsuit
display_name = "suit, female-executive"
path = /obj/item/clothing/under/suit_jacket/female
slot = slot_w_uniform
cost = 1
/datum/gear/gentlesuit
display_name = "suit, gentlemen"
path = /obj/item/clothing/under/gentlesuit
slot = slot_w_uniform
cost = 1
/datum/gear/navysuit
display_name = "suit, navy"
path = /obj/item/clothing/under/suit_jacket/navy
slot = slot_w_uniform
cost = 1
/datum/gear/redsuit
display_name = "suit, red"
path = /obj/item/clothing/under/suit_jacket/red
slot = slot_w_uniform
cost = 1
/datum/gear/redlawyer
display_name = "suit, lawyer-red"
path = /obj/item/clothing/under/lawyer/red
slot = slot_w_uniform
cost = 1
/datum/gear/oldmansuit
display_name = "suit, old-man"
path = /obj/item/clothing/under/lawyer/oldman
slot = slot_w_uniform
cost = 1
/datum/gear/purplesuit
display_name = "suit, purple"
path = /obj/item/clothing/under/lawyer/purpsuit
slot = slot_w_uniform
cost = 1
/datum/gear/tansuit
display_name = "suit, tan"
path = /obj/item/clothing/under/suit_jacket/tan
slot = slot_w_uniform
cost = 1
/datum/gear/whitesuit
display_name = "suit, white"
path = /obj/item/clothing/under/scratch
slot = slot_w_uniform
cost = 1
/datum/gear/whitebluesuit
display_name = "suit, white-blue"
path = /obj/item/clothing/under/lawyer/bluesuit
slot = slot_w_uniform
cost = 1
/datum/gear/sundress
display_name = "sundress"
path = /obj/item/clothing/under/sundress
@@ -336,12 +498,6 @@ var/global/list/gear_datums = list()
slot = slot_w_uniform
cost = 1
/datum/gear/cheongsam
display_name = "cheongsam, white"
path = /obj/item/clothing/under/cheongsam
slot = slot_w_uniform
cost = 1
/datum/gear/uniform_captain
display_name = "uniform, captain's dress"
path = /obj/item/clothing/under/dress/dress_cap
@@ -518,9 +674,9 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_wear_suit
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
/datum/gear/hazard_vest
display_name = "hazard vest"
path = /obj/item/clothing/suit/storage/hazardvest
cost = 2
slot = slot_wear_suit
@@ -548,6 +704,36 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_wear_suit
/datum/gear/bluelabcoat
display_name = "labcoat, blue"
path = /obj/item/clothing/suit/storage/toggle/labcoat/blue
cost = 2
slot = slot_wear_suit
/datum/gear/greenlabcoat
display_name = "labcoat, green"
path = /obj/item/clothing/suit/storage/toggle/labcoat/green
cost = 2
slot = slot_wear_suit
/datum/gear/orangelabcoat
display_name = "labcoat, orange"
path = /obj/item/clothing/suit/storage/toggle/labcoat/orange
cost = 2
slot = slot_wear_suit
/datum/gear/purplelabcoat
display_name = "labcoat, purple"
path = /obj/item/clothing/suit/storage/toggle/labcoat/purple
cost = 2
slot = slot_wear_suit
/datum/gear/redlabcoat
display_name = "labcoat, red"
path = /obj/item/clothing/suit/storage/toggle/labcoat/red
cost = 2
slot = slot_wear_suit
/datum/gear/overalls
display_name = "overalls"
path = /obj/item/clothing/suit/apron/overalls
@@ -591,6 +777,18 @@ var/global/list/gear_datums = list()
slot = slot_wear_suit
// whitelisted = "Unathi" // You don't have a monopoly on a robe!
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
cost = 2
slot = slot_wear_suit
/datum/gear/purple_lawyer_jacket
display_name = "suit jacket, purple"
path = /obj/item/clothing/suit/storage/lawyer/purpjacket
cost = 2
slot = slot_wear_suit
/datum/gear/suspenders
display_name = "suspenders"
path = /obj/item/clothing/suit/suspenders
@@ -630,18 +828,49 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_gloves
/datum/gear/light_brown_gloves
display_name = "gloves, light-brown"
path = /obj/item/clothing/gloves/light_brown
cost = 2
slot = slot_gloves
/datum/gear/green_gloves
display_name = "gloves, green"
path = /obj/item/clothing/gloves/green
cost = 2
slot = slot_gloves
/datum/gear/grey_gloves
display_name = "gloves, grey"
path = /obj/item/clothing/gloves/grey
cost = 2
slot = slot_gloves
/datum/gear/latex_gloves
display_name = "gloves, latex"
path = /obj/item/clothing/gloves/latex
cost = 2
slot = slot_gloves
/datum/gear/orange_gloves
display_name = "gloves, orange"
path = /obj/item/clothing/gloves/orange
cost = 2
slot = slot_gloves
/datum/gear/purple_gloves
display_name = "gloves, purple"
path = /obj/item/clothing/gloves/purple
cost = 2
slot = slot_gloves
/datum/gear/rainbow_gloves
display_name = "gloves, rainbow"
path = /obj/item/clothing/gloves/rainbow
cost = 2
slot = slot_gloves
/datum/gear/red_gloves
display_name = "gloves, red"
path = /obj/item/clothing/gloves/red
@@ -728,6 +957,12 @@ var/global/list/gear_datums = list()
cost = 1
slot = slot_shoes
/datum/gear/rainbow_shoes
display_name = "shoes, rainbow"
path = /obj/item/clothing/shoes/rainbow
cost = 1
slot = slot_shoes
/datum/gear/red_shoes
display_name = "shoes, red"
path = /obj/item/clothing/shoes/red
@@ -822,6 +1057,17 @@ var/global/list/gear_datums = list()
sort_category = "misc"
cost = 1
/datum/gear/flask
display_name = "flask"
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
sort_category = "misc"
cost = 1
/datum/gear/vacflask
display_name = "vacuum-flask"
path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask
sort_category = "misc"
cost = 1
/datum/gear/blipstick
display_name = "lipstick, black"
path = /obj/item/weapon/lipstick/black
@@ -846,6 +1092,18 @@ var/global/list/gear_datums = list()
sort_category = "misc"
cost = 1
/datum/gear/smokingpipe
display_name = "pipe, smoking"
path = /obj/item/clothing/mask/smokable/pipe
sort_category = "misc"
cost = 1
/datum/gear/cornpipe
display_name = "pipe, corn"
path = /obj/item/clothing/mask/smokable/pipe/cobpipe
sort_category = "misc"
cost = 1
/datum/gear/matchbook
display_name = "matchbook"
path = /obj/item/weapon/storage/box/matches
@@ -858,6 +1116,12 @@ var/global/list/gear_datums = list()
sort_category = "misc"
cost = 1
/datum/gear/zippo
display_name = "zippo"
path = /obj/item/weapon/flame/lighter/zippo
sort_category = "misc"
cost = 1
/*/datum/gear/combitool
display_name = "combi-tool"
path = /obj/item/weapon/combitool
@@ -865,6 +1129,12 @@ var/global/list/gear_datums = list()
// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use
// the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset.
/datum/gear/earmuffs
display_name = "earmuffs"
path = /obj/item/clothing/ears/earmuffs
cost = 1
sort_category = "ears"
/datum/gear/skrell_chain
display_name = "skrell headtail-wear, female, chain"
path = /obj/item/clothing/ears/skrell/chain
+35 -12
View File
@@ -191,7 +191,7 @@ BLIND // can't see anything
gender = PLURAL //Carn: for grammarically correct text-parsing
w_class = 2.0
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.50
siemens_coefficient = 0.75
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/clipped = 0
@@ -391,13 +391,17 @@ BLIND // can't see anything
//Under clothing
/obj/item/clothing/under
icon = 'icons/obj/clothing/uniforms.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_uniforms.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_uniforms.dmi',
)
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = 3
var/has_sensor = 1//For the crew computer 2 = unable to change mode
var/has_sensor = 1 //For the crew computer 2 = unable to change mode
var/sensor_mode = 0
/*
1 = Report living/dead
@@ -406,7 +410,25 @@ BLIND // can't see anything
*/
var/list/accessories = list()
var/displays_id = 1
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
sprite_sheets = list("Vox" = 'icons/mob/species/vox/uniform.dmi')
//convenience var for defining the icon state for the overlay used when the clothing is worn.
//Also used by rolling/unrolling.
var/worn_state = null
/obj/item/clothing/under/New()
if(worn_state)
if(!item_state_slots)
item_state_slots = list()
item_state_slots[slot_w_uniform_str] = worn_state
else
worn_state = icon_state
//autodetect rollability
if(rolled_down < 0)
if((worn_state + "_d_s") in icon_states('icons/mob/uniform.dmi'))
rolled_down = 0
/obj/item/clothing/under/update_clothing_icon()
if (ismob(src.loc))
@@ -549,17 +571,18 @@ BLIND // can't see anything
if(!istype(usr, /mob/living)) return
if(usr.stat) return
if(initial(item_color) + "_d_s" in icon_states('icons/mob/uniform.dmi'))
if (item_color == initial(item_color))
body_parts_covered &= LOWER_TORSO|LEGS|FEET
item_color = "[initial(item_color)]_d"
else
body_parts_covered = initial(body_parts_covered)
item_color = initial(item_color)
update_clothing_icon()
if(rolled_down < 0)
usr << "<span class='notice'>You cannot roll down [src]!</span>"
return
rolled_down = !rolled_down
if(rolled_down)
body_parts_covered &= LOWER_TORSO|LEGS|FEET
item_state_slots[slot_w_uniform_str] = "[worn_state]_d"
else
usr << "<span class='notice'>You cannot roll down the uniform!</span>"
body_parts_covered = initial(body_parts_covered)
item_state_slots[slot_w_uniform_str] = "[worn_state]"
update_clothing_icon()
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
if(!(A in accessories))
-4
View File
@@ -27,7 +27,3 @@
desc = "These look pretty fancy."
icon_state = "latex"
item_state = "lgloves"
item_color="mime"
redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
+5 -34
View File
@@ -5,7 +5,6 @@
item_state = "ygloves"
siemens_coefficient = 0
permeability_coefficient = 0.05
item_color="yellow"
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
@@ -15,101 +14,73 @@
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
permeability_coefficient = 0.05
item_color="yellow"
New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
//average of 0.5, somewhat better than regular gloves' 0.75
siemens_coefficient = pick(0,0.1,0.3,0.5,0.5,0.75,1.35)
/obj/item/clothing/gloves/black
desc = "These gloves are fire-resistant."
desc = "These work gloves are thick and fire-resistant."
name = "black gloves"
icon_state = "black"
item_state = "bgloves"
item_color="brown"
siemens_coefficient = 0.50
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
ce
item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
/obj/item/clothing/gloves/orange
name = "orange gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "orange"
item_state = "orangegloves"
item_color="orange"
/obj/item/clothing/gloves/red
name = "red gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "red"
item_state = "redgloves"
item_color = "red"
/obj/item/clothing/gloves/rainbow
name = "rainbow gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "rainbow"
item_state = "rainbowgloves"
item_color = "rainbow"
clown
item_color = "clown"
/obj/item/clothing/gloves/blue
name = "blue gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "blue"
item_state = "bluegloves"
item_color="blue"
/obj/item/clothing/gloves/purple
name = "purple gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "purple"
item_state = "purplegloves"
item_color="purple"
/obj/item/clothing/gloves/green
name = "green gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "green"
item_state = "greengloves"
item_color="green"
/obj/item/clothing/gloves/grey
name = "grey gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "gray"
item_state = "graygloves"
item_color="grey"
rd
item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
hop
item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
/obj/item/clothing/gloves/light_brown
name = "light brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "lightbrown"
item_state = "lightbrowngloves"
item_color="light brown"
/obj/item/clothing/gloves/brown
name = "brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "brown"
item_state = "browngloves"
item_color="brown"
cargo
item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
+5 -14
View File
@@ -3,11 +3,6 @@
name = "captain's gloves"
icon_state = "captain"
item_state = "egloves"
item_color = "captain"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/gloves/cyborg
desc = "beep boop borp"
@@ -21,7 +16,7 @@
name = "\improper SWAT Gloves"
icon_state = "black"
item_state = "swat_gl"
siemens_coefficient = 0.6
siemens_coefficient = 0.50
permeability_coefficient = 0.05
cold_protection = HANDS
@@ -46,17 +41,13 @@
desc = "Sterile latex gloves."
icon_state = "latex"
item_state = "lgloves"
siemens_coefficient = 0.30
siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC)
permeability_coefficient = 0.01
item_color="white"
cmo
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 work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
name = "botanist's leather gloves"
icon_state = "leather"
item_state = "ggloves"
permeability_coefficient = 0.9
siemens_coefficient = 0.9
permeability_coefficient = 0.05
siemens_coefficient = 0.50 //thick work gloves
-5
View File
@@ -5,7 +5,6 @@
item_state = "hardhat0_yellow"
brightness_on = 4 //luminosity when on
light_overlay = "hardhat_light"
item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
siemens_coefficient = 0.9
@@ -13,12 +12,10 @@
/obj/item/clothing/head/hardhat/orange
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
item_color = "orange"
/obj/item/clothing/head/hardhat/red
icon_state = "hardhat0_red"
item_state = "hardhat0_red"
item_color = "red"
name = "firefighter helmet"
flags = STOPPRESSUREDAMAGE
heat_protection = HEAD
@@ -27,7 +24,6 @@
/obj/item/clothing/head/hardhat/white
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
item_color = "white"
flags = STOPPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -35,4 +31,3 @@
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
item_color = "dblue"
@@ -122,7 +122,6 @@
desc = "A jack o' lantern! Believed to ward off evil spirits."
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
item_state = "hardhat0_pumpkin"
item_color = "pumpkin"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|EYES
+14 -26
View File
@@ -1,16 +1,15 @@
/obj/item/clothing/head/soft
name = "cargo cap"
desc = "It's a baseball hat in a tasteless yellow color."
desc = "It's a peaked cap in a tasteless yellow color."
icon_state = "cargosoft"
flags = HEADCOVERSEYES
item_state = "helmet"
item_color = "cargo"
var/flipped = 0
siemens_coefficient = 0.9
body_parts_covered = 0
dropped()
src.icon_state = "[item_color]soft"
src.icon_state = initial(icon_state)
src.flipped=0
..()
@@ -21,10 +20,10 @@
if(usr.canmove && !usr.stat && !usr.restrained())
src.flipped = !src.flipped
if(src.flipped)
icon_state = "[item_color]soft_flipped"
icon_state = "[icon_state]_flipped"
usr << "You flip the hat backwards."
else
icon_state = "[item_color]soft"
src.icon_state = initial(icon_state)
usr << "You flip the hat back in normal position."
update_clothing_icon() //so our mob-overlays update
@@ -32,64 +31,53 @@
name = "red cap"
desc = "It's a baseball hat in a tasteless red color."
icon_state = "redsoft"
item_color = "red"
/obj/item/clothing/head/soft/blue
name = "blue cap"
desc = "It's a baseball hat in a tasteless blue color."
desc = "It's a peaked cap in a tasteless blue color."
icon_state = "bluesoft"
item_color = "blue"
/obj/item/clothing/head/soft/green
name = "green cap"
desc = "It's a baseball hat in a tasteless green color."
desc = "It's a peaked cap in a tasteless green color."
icon_state = "greensoft"
item_color = "green"
/obj/item/clothing/head/soft/yellow
name = "yellow cap"
desc = "It's a baseball hat in a tasteless yellow color."
desc = "It's a peaked cap in a tasteless yellow color."
icon_state = "yellowsoft"
item_color = "yellow"
/obj/item/clothing/head/soft/grey
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey color."
desc = "It's a peaked cap in a tasteful grey color."
icon_state = "greysoft"
item_color = "grey"
/obj/item/clothing/head/soft/orange
name = "orange cap"
desc = "It's a baseball hat in a tasteless orange color."
desc = "It's a peaked cap in a tasteless orange color."
icon_state = "orangesoft"
item_color = "orange"
/obj/item/clothing/head/soft/mime
name = "white cap"
desc = "It's a baseball hat in a tasteless white color."
desc = "It's a peaked cap in a tasteless white color."
icon_state = "mimesoft"
item_color = "mime"
/obj/item/clothing/head/soft/purple
name = "purple cap"
desc = "It's a baseball hat in a tasteless purple color."
desc = "It's a peaked cap in a tasteless purple color."
icon_state = "purplesoft"
item_color = "purple"
/obj/item/clothing/head/soft/rainbow
name = "rainbow cap"
desc = "It's a baseball hat in a bright rainbow of colors."
desc = "It's a peaked cap in a bright rainbow of colors."
icon_state = "rainbowsoft"
item_color = "rainbow"
/obj/item/clothing/head/soft/sec
name = "security cap"
desc = "It's baseball hat in tasteful red color."
desc = "It's a field cap in tasteful red color."
icon_state = "secsoft"
item_color = "sec"
/obj/item/clothing/head/soft/sec/corp
name = "corporate security cap"
desc = "It's baseball hat in corporate colors."
desc = "It's field cap in corporate colors."
icon_state = "corpsoft"
item_color = "corp"
-28
View File
@@ -1,7 +1,6 @@
/obj/item/clothing/shoes/black
name = "black shoes"
icon_state = "black"
item_color = "black"
desc = "A pair of black shoes."
cold_protection = FEET
@@ -9,81 +8,54 @@
heat_protection = FEET
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
/obj/item/clothing/shoes/brown
name = "brown shoes"
desc = "A pair of brown shoes."
icon_state = "brown"
item_color = "brown"
captain
item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
hop
item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
ce
item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
rd
item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
cmo
item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
cmo
item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/blue
name = "blue shoes"
icon_state = "blue"
item_color = "blue"
/obj/item/clothing/shoes/green
name = "green shoes"
icon_state = "green"
item_color = "green"
/obj/item/clothing/shoes/yellow
name = "yellow shoes"
icon_state = "yellow"
item_color = "yellow"
/obj/item/clothing/shoes/purple
name = "purple shoes"
icon_state = "purple"
item_color = "purple"
/obj/item/clothing/shoes/brown
name = "brown shoes"
icon_state = "brown"
item_color = "brown"
/obj/item/clothing/shoes/red
name = "red shoes"
desc = "Stylish red shoes."
icon_state = "red"
item_color = "red"
/obj/item/clothing/shoes/white
name = "white shoes"
icon_state = "white"
permeability_coefficient = 0.01
item_color = "white"
/obj/item/clothing/shoes/leather
name = "leather shoes"
desc = "A sturdy pair of leather shoes."
icon_state = "leather"
item_color = "leather"
/obj/item/clothing/shoes/rainbow
name = "rainbow shoes"
desc = "Very gay shoes."
icon_state = "rain_bow"
item_color = "rainbow"
/obj/item/clothing/shoes/orange
name = "orange shoes"
icon_state = "orange"
item_color = "orange"
var/obj/item/weapon/handcuffs/chained = null
/obj/item/clothing/shoes/orange/proc/attach_cuffs(var/obj/item/weapon/handcuffs/cuffs, mob/user as mob)
@@ -13,7 +13,6 @@
/obj/item/clothing/shoes/mime
name = "mime shoes"
icon_state = "mime"
item_color = "mime"
/obj/item/clothing/shoes/swat
name = "\improper SWAT shoes"
@@ -68,7 +67,6 @@
icon_state = "clown"
item_state = "clown_shoes"
slowdown = SHOES_SLOWDOWN+1
item_color = "clown"
force = 0
var/footstep = 1 //used for squeeks whilst walking
species_restricted = null
@@ -88,7 +86,6 @@
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
icon_state = "jackboots"
item_state = "jackboots"
item_color = "hosred"
force = 3
siemens_coefficient = 0.7
@@ -97,7 +94,6 @@
desc = "A pair of boots worn by the followers of Nar-Sie."
icon_state = "cult"
item_state = "cult"
item_color = "cult"
force = 2
siemens_coefficient = 0.7
@@ -9,12 +9,10 @@
/obj/item/clothing/head/helmet/space/skrell/white
icon_state = "skrell_helmet_white"
item_state = "skrell_helmet_white"
item_color = "skrell_helmet_white"
/obj/item/clothing/head/helmet/space/skrell/black
icon_state = "skrell_helmet_black"
item_state = "skrell_helmet_black"
item_color = "skrell_helmet_black"
/obj/item/clothing/suit/space/skrell
name = "Skrellian voidsuit"
@@ -28,12 +26,10 @@
/obj/item/clothing/suit/space/skrell/white
icon_state = "skrell_suit_white"
item_state = "skrell_suit_white"
item_color = "skrell_suit_white"
/obj/item/clothing/suit/space/skrell/black
icon_state = "skrell_suit_black"
item_state = "skrell_suit_black"
item_color = "skrell_suit_black"
// Vox space gear (vaccuum suit, low pressure armour)
// Can't be equipped by any other species due to bone structure and vox cybernetics.
@@ -112,7 +108,6 @@
name = "alien clothing"
desc = "This doesn't look very comfortable."
icon_state = "vox-casual-1"
item_color = "vox-casual-1"
item_state = "vox-casual-1"
body_parts_covered = LEGS
@@ -120,7 +115,6 @@
name = "alien robes"
desc = "Weird and flowing!"
icon_state = "vox-casual-2"
item_color = "vox-casual-2"
item_state = "vox-casual-2"
/obj/item/clothing/gloves/yellow/vox
@@ -130,7 +124,6 @@
item_state = "gloves-vox"
siemens_coefficient = 0
permeability_coefficient = 0.05
item_color = "gloves-vox"
species_restricted = list("Vox")
sprite_sheets = list("Vox" = 'icons/mob/species/vox/gloves.dmi')
/obj/item/clothing/shoes/magboots/vox
@@ -4,7 +4,6 @@
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
icon_state = "rig0-syndie"
item_state = "syndie_helm"
item_color = "syndie"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.6
species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen")
@@ -22,7 +22,6 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating."
icon_state = "rig0-mining"
item_state = "mining_helm"
item_color = "mining"
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
light_overlay = "helmet_light_dual"
@@ -39,7 +38,6 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
icon_state = "rig0-medical"
item_state = "medical_helm"
item_color = "medical"
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50)
/obj/item/clothing/suit/space/void/medical
@@ -56,7 +54,6 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "rig0-sec"
item_state = "sec_helm"
item_color = "sec"
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
siemens_coefficient = 0.7
light_overlay = "helmet_light_dual"
@@ -76,7 +73,6 @@
name = "atmospherics voidsuit helmet"
icon_state = "rig0-atmos"
item_state = "atmos_helm"
item_color = "atmos"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
light_overlay = "helmet_light_dual"
@@ -4,7 +4,6 @@
desc = "A bizarre gem-encrusted helmet that radiates magical energies."
icon_state = "rig0-wiz"
item_state = "wiz_helm"
item_color = "wiz"
unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles!
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.7
@@ -237,21 +237,18 @@
name = "pink swimsuit"
desc = "A rather skimpy pink swimsuit."
icon_state = "stripper_p_under"
item_color = "stripper_p"
siemens_coefficient = 1
/obj/item/clothing/under/stripper/stripper_green
name = "green swimsuit"
desc = "A rather skimpy green swimsuit."
icon_state = "stripper_g_under"
item_color = "stripper_g"
siemens_coefficient = 1
/obj/item/clothing/suit/stripper/stripper_pink
name = "pink skimpy dress"
desc = "A rather skimpy pink dress."
icon_state = "stripper_p_over"
item_state = "stripper_p"
siemens_coefficient = 1
/obj/item/clothing/suit/stripper/stripper_green
@@ -265,7 +262,6 @@
name = "the mankini"
desc = "No honest man would wear this abomination"
icon_state = "mankini"
item_color = "mankini"
siemens_coefficient = 1
/obj/item/clothing/suit/xenos
@@ -285,35 +281,30 @@
name = "black swimsuit"
desc = "An oldfashioned black swimsuit."
icon_state = "swim_black"
item_color = "swim_black"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/blue
name = "blue swimsuit"
desc = "An oldfashioned blue swimsuit."
icon_state = "swim_blue"
item_color = "swim_blue"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/purple
name = "purple swimsuit"
desc = "An oldfashioned purple swimsuit."
icon_state = "swim_purp"
item_color = "swim_purp"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/green
name = "green swimsuit"
desc = "An oldfashioned green swimsuit."
icon_state = "swim_green"
item_color = "swim_green"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/red
name = "red swimsuit"
desc = "An oldfashioned red swimsuit."
icon_state = "swim_red"
item_color = "swim_red"
siemens_coefficient = 1
/obj/item/clothing/suit/poncho
@@ -4,16 +4,16 @@
icon = 'icons/obj/clothing/ties.dmi'
icon_state = "bluetie"
item_state = "" //no inhands
item_color = "bluetie"
slot_flags = SLOT_TIE
w_class = 2.0
var/slot = "decor"
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
var/image/inv_overlay = null //overlay used when attached to clothing.
var/overlay_state = null
/obj/item/clothing/accessory/New()
..()
inv_overlay = image("icon" = 'icons/obj/clothing/ties_overlay.dmi', "icon_state" = "[item_color? "[item_color]" : "[icon_state]"]")
inv_overlay = image("icon" = 'icons/obj/clothing/ties_overlay.dmi', "icon_state" = "[overlay_state? "[overlay_state]" : "[icon_state]"]")
//when user attached an accessory to S
/obj/item/clothing/accessory/proc/on_attached(obj/item/clothing/under/S, mob/user as mob)
@@ -47,24 +47,20 @@
/obj/item/clothing/accessory/blue
name = "blue tie"
icon_state = "bluetie"
item_color = "bluetie"
/obj/item/clothing/accessory/red
name = "red tie"
icon_state = "redtie"
item_color = "redtie"
/obj/item/clothing/accessory/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
item_color = "horribletie"
/obj/item/clothing/accessory/stethoscope
name = "stethoscope"
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
item_color = "stethoscope"
/obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user)
if(ishuman(M) && isliving(user))
@@ -105,7 +101,6 @@
name = "bronze medal"
desc = "A bronze medal."
icon_state = "bronze"
item_color = "bronze"
/obj/item/clothing/accessory/medal/conduct
name = "distinguished conduct medal"
@@ -124,7 +119,6 @@
name = "silver medal"
desc = "A silver medal."
icon_state = "silver"
item_color = "silver"
/obj/item/clothing/accessory/medal/silver/valor
name = "medal of valor"
@@ -138,7 +132,6 @@
name = "gold medal"
desc = "A prestigious golden medal."
icon_state = "gold"
item_color = "gold"
/obj/item/clothing/accessory/medal/gold/captain
name = "medal of captaincy"
@@ -158,7 +151,6 @@
name = "holobadge"
desc = "This glowing blue badge marks the holder as THE LAW."
icon_state = "holobadge"
item_color = "holobadge"
slot_flags = SLOT_BELT | SLOT_TIE
var/emagged = 0 //Emagging removes Sec check.
@@ -166,7 +158,6 @@
/obj/item/clothing/accessory/holobadge/cord
icon_state = "holobadge-cord"
item_color = "holobadge-cord"
slot_flags = SLOT_MASK | SLOT_TIE
/obj/item/clothing/accessory/holobadge/attack_self(mob/user as mob)
@@ -2,41 +2,34 @@
name = "red armband"
desc = "A fancy red armband!"
icon_state = "red"
item_color = "red"
slot = "armband"
/obj/item/clothing/accessory/armband/cargo
name = "cargo armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is brown."
icon_state = "cargo"
item_color = "cargo"
/obj/item/clothing/accessory/armband/engine
name = "engineering armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is orange with a reflective strip!"
icon_state = "engie"
item_color = "engie"
/obj/item/clothing/accessory/armband/science
name = "science armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is purple."
icon_state = "rnd"
item_color = "rnd"
/obj/item/clothing/accessory/armband/hydro
name = "hydroponics armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and blue."
icon_state = "hydro"
item_color = "hydro"
/obj/item/clothing/accessory/armband/med
name = "medical armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white."
icon_state = "med"
item_color = "med"
/obj/item/clothing/accessory/armband/medgreen
name = "EMT armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green."
icon_state = "medgreen"
item_color = "medgreen"
@@ -2,7 +2,6 @@
name = "shoulder holster"
desc = "A handgun holster."
icon_state = "holster"
item_color = "holster"
slot = "utility"
var/obj/item/holstered = null
@@ -108,16 +107,14 @@
name = "armpit holster"
desc = "A worn-out handgun holster. Perfect for concealed carry"
icon_state = "holster"
item_color = "holster"
/obj/item/clothing/accessory/holster/waist
name = "waist holster"
desc = "A handgun holster. Made of expensive leather."
icon_state = "holster"
item_color = "holster_low"
overlay_state = "holster_low"
/obj/item/clothing/accessory/holster/hip
name = "hip holster"
desc = "A handgun holster slung low on the hip, draw pardner!"
icon_state = "holster_hip"
item_color = "holster_hip"
@@ -2,7 +2,6 @@
name = "load bearing equipment"
desc = "Used to hold things when you don't have enough hands."
icon_state = "webbing"
item_color = "webbing"
slot = "utility"
var/slots = 3
var/obj/item/weapon/storage/internal/hold
@@ -51,27 +50,23 @@
name = "webbing"
desc = "Sturdy mess of synthcotton belts and buckles, ready to share your burden."
icon_state = "webbing"
item_color = "webbing"
/obj/item/clothing/accessory/storage/black_vest
name = "black webbing vest"
desc = "Robust black synthcotton vest with lots of pockets to hold whatever you need, but cannot hold in hands."
icon_state = "vest_black"
item_color = "vest_black"
slots = 5
/obj/item/clothing/accessory/storage/brown_vest
name = "brown webbing vest"
desc = "Worn brownish synthcotton vest with lots of pockets to unload your hands."
icon_state = "vest_brown"
item_color = "vest_brown"
slots = 5
/obj/item/clothing/accessory/storage/knifeharness
name = "decorated harness"
desc = "A heavily decorated harness of sinew and leather with two knife-loops."
icon_state = "unathiharness2"
item_color = "unathiharness2"
slots = 2
/obj/item/clothing/accessory/storage/knifeharness/New()
+5 -16
View File
@@ -7,7 +7,7 @@
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
worn_state = "black"
desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
@@ -24,7 +24,7 @@
name = "psychedelic"
desc = "Groovy!"
icon_state = "psyche"
item_color = "psyche"
item_state_slots[slot_w_uniform_str] = "psyche"
update_icon()
update_clothing_icon()
@@ -37,7 +37,7 @@
if(!picked || !clothing_choices[picked])
return
var/newtype = clothing_choices[picked]
var/obj/item/clothing/A = new newtype
var/obj/item/clothing/under/A = new newtype
desc = null
permeability_coefficient = 0.90
@@ -46,7 +46,8 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
item_state_slots = A.item_state_slots
worn_state = A.worn_state
body_parts_covered = A.body_parts_covered
update_clothing_icon() //so our overlays update.
@@ -58,7 +59,6 @@
name = "grey cap"
icon_state = "greysoft"
item_state = "greysoft"
item_color = "grey"
desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside."
origin_tech = "syndicate=3"
body_parts_covered = 0
@@ -76,7 +76,6 @@
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
item_color = "grey"
update_icon()
update_clothing_icon()
@@ -98,7 +97,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
flags_inv = A.flags_inv
body_parts_covered = A.body_parts_covered
update_clothing_icon() //so our overlays update.
@@ -128,7 +126,6 @@
name = "armor"
desc = "An armored vest that protects against some damage."
icon_state = "armor"
item_color = "armor"
update_icon()
update_clothing_icon()
@@ -150,7 +147,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
flags_inv = A.flags_inv
body_parts_covered = A.body_parts_covered
update_clothing_icon() //so our overlays update.
@@ -162,7 +158,6 @@
name = "black shoes"
icon_state = "black"
item_state = "black"
item_color = "black"
desc = "They're comfy black shoes, with clever cloaking technology built in. It seems to have a small dial on the back of each shoe."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
@@ -180,7 +175,6 @@
desc = "A pair of black shoes."
icon_state = "black"
item_state = "black"
item_color = "black"
update_icon()
update_clothing_icon()
@@ -202,7 +196,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
update_clothing_icon() //so our overlays update.
//**********************
@@ -252,7 +245,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
//so our overlays update.
if (ismob(src.loc))
@@ -267,7 +259,6 @@
name = "black gloves"
icon_state = "black"
item_state = "bgloves"
item_color = "brown"
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
@@ -284,7 +275,6 @@
name = "black gloves"
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
icon_state = "black"
item_color = "brown"
update_icon()
update_clothing_icon()
@@ -306,7 +296,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
flags_inv = A.flags_inv
update_clothing_icon() //so our overlays update.
+33 -28
View File
@@ -2,39 +2,39 @@
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
worn_state = "black"
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
desc = "It's very smart and in a ladies-size!"
icon_state = "black"
item_state = "bl_suit"
item_color = "blackf"
worn_state = "blackf"
/obj/item/clothing/under/color/blue
name = "blue jumpsuit"
icon_state = "blue"
item_state = "b_suit"
item_color = "blue"
worn_state = "blue"
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
item_color = "green"
worn_state = "green"
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
icon_state = "grey"
item_state = "gy_suit"
item_color = "grey"
worn_state = "grey"
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
icon_state = "orange"
item_state = "o_suit"
item_color = "orange"
worn_state = "orange"
has_sensor = 2
sensor_mode = 3
@@ -42,101 +42,106 @@
name = "pink jumpsuit"
icon_state = "pink"
item_state = "p_suit"
item_color = "pink"
worn_state = "pink"
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
item_color = "red"
worn_state = "red"
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
item_color = "white"
worn_state = "white"
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
item_color = "yellow"
worn_state = "yellow"
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
desc = "Groovy!"
icon_state = "psyche"
item_color = "psyche"
item_state = "psyche"
worn_state = "psyche"
/obj/item/clothing/under/lightblue
name = "lightblue jumpsuit"
desc = "lightblue"
icon_state = "lightblue"
item_color = "lightblue"
item_state = "b_suit"
worn_state = "lightblue"
/obj/item/clothing/under/aqua
name = "aqua jumpsuit"
desc = "aqua"
icon_state = "aqua"
item_color = "aqua"
item_state = "b_suit"
worn_state = "aqua"
/obj/item/clothing/under/purple
name = "purple jumpsuit"
desc = "purple"
icon_state = "purple"
item_state = "p_suit"
item_color = "purple"
worn_state = "purple"
/obj/item/clothing/under/lightpurple
name = "lightpurple jumpsuit"
desc = "lightpurple"
icon_state = "lightpurple"
item_color = "lightpurple"
item_state = "p_suit"
worn_state = "lightpurple"
/obj/item/clothing/under/lightgreen
name = "lightgreen jumpsuit"
desc = "lightgreen"
icon_state = "lightgreen"
item_color = "lightgreen"
/obj/item/clothing/under/lightblue
name = "lightblue jumpsuit"
desc = "lightblue"
icon_state = "lightblue"
item_color = "lightblue"
item_state = "g_suit"
worn_state = "lightgreen"
/obj/item/clothing/under/lightbrown
name = "lightbrown jumpsuit"
desc = "lightbrown"
icon_state = "lightbrown"
item_color = "lightbrown"
item_state = "lb_suit"
worn_state = "lightbrown"
/obj/item/clothing/under/brown
name = "brown jumpsuit"
desc = "brown"
icon_state = "brown"
item_color = "brown"
item_state = "lb_suit"
worn_state = "brown"
/obj/item/clothing/under/yellowgreen
name = "yellowgreen jumpsuit"
desc = "yellowgreen"
icon_state = "yellowgreen"
item_color = "yellowgreen"
item_state = "y_suit"
worn_state = "yellowgreen"
/obj/item/clothing/under/darkblue
name = "darkblue jumpsuit"
desc = "darkblue"
icon_state = "darkblue"
item_color = "darkblue"
item_state = "b_suit"
worn_state = "darkblue"
/obj/item/clothing/under/lightred
name = "lightred jumpsuit"
desc = "lightred"
icon_state = "lightred"
item_color = "lightred"
item_state = "r_suit"
worn_state = "lightred"
/obj/item/clothing/under/darkred
name = "darkred jumpsuit"
desc = "darkred"
icon_state = "darkred"
item_color = "darkred"
item_state = "r_suit"
worn_state = "darkred"
+34 -32
View File
@@ -5,15 +5,15 @@
name = "bartender's uniform"
icon_state = "ba_suit"
item_state = "ba_suit"
item_color = "ba_suit"
worn_state = "ba_suit"
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"."
name = "captain's jumpsuit"
icon_state = "captain"
item_state = "caparmor"
item_color = "captain"
item_state = "b_suit"
worn_state = "captain"
/obj/item/clothing/under/rank/cargo
@@ -21,7 +21,7 @@
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
icon_state = "qm"
item_state = "lb_suit"
item_color = "qm"
worn_state = "qm"
/obj/item/clothing/under/rank/cargotech
@@ -29,7 +29,7 @@
desc = "Shooooorts! They're comfy and easy to wear!"
icon_state = "cargotech"
item_state = "lb_suit"
item_color = "cargo"
worn_state = "cargo"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -38,14 +38,15 @@
name = "chaplain's jumpsuit"
icon_state = "chaplain"
item_state = "bl_suit"
item_color = "chapblack"
worn_state = "chapblack"
/obj/item/clothing/under/rank/chef
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
name = "chef's uniform"
icon_state = "chef"
item_color = "chef"
item_state = "w_suit"
worn_state = "chef"
/obj/item/clothing/under/rank/clown
@@ -53,7 +54,7 @@
desc = "<i>'HONK!'</i>"
icon_state = "clown"
item_state = "clown"
item_color = "clown"
worn_state = "clown"
/obj/item/clothing/under/rank/head_of_personnel
@@ -61,14 +62,14 @@
name = "head of personnel's jumpsuit"
icon_state = "hop"
item_state = "b_suit"
item_color = "hop"
worn_state = "hop"
/obj/item/clothing/under/rank/head_of_personnel_whimsy
desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does."
name = "head of personnel's suit"
icon_state = "hopwhimsy"
item_state = "hopwhimsy"
item_color = "hopwhimsy"
item_state = "b_suit"
worn_state = "hopwhimsy"
/obj/item/clothing/under/rank/hydroponics
@@ -76,7 +77,7 @@
name = "botanist's jumpsuit"
icon_state = "hydroponics"
item_state = "g_suit"
item_color = "hydroponics"
worn_state = "hydroponics"
permeability_coefficient = 0.50
@@ -84,15 +85,16 @@
desc = "The plain, professional attire of an Internal Affairs Agent. The collar is <i>immaculately</i> starched."
name = "Internal Affairs uniform"
icon_state = "internalaffairs"
item_state = "internalaffairs"
item_color = "internalaffairs"
item_state = "ba_suit"
worn_state = "internalaffairs"
/obj/item/clothing/under/rank/janitor
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
name = "janitor's jumpsuit"
icon_state = "janitor"
item_color = "janitor"
worn_state = "janitor"
item_state = "janitor"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -105,69 +107,69 @@
name = "black Lawyer suit"
icon_state = "lawyer_black"
item_state = "lawyer_black"
item_color = "lawyer_black"
worn_state = "lawyer_black"
/obj/item/clothing/under/lawyer/female
name = "black Lawyer suit"
icon_state = "black_suit_fem"
item_state = "black_suit_fem"
item_color = "black_suit_fem"
item_state = "lawyer_black"
worn_state = "black_suit_fem"
/obj/item/clothing/under/lawyer/red
name = "red Lawyer suit"
icon_state = "lawyer_red"
item_state = "lawyer_red"
item_color = "lawyer_red"
worn_state = "lawyer_red"
/obj/item/clothing/under/lawyer/blue
name = "blue Lawyer suit"
icon_state = "lawyer_blue"
item_state = "lawyer_blue"
item_color = "lawyer_blue"
worn_state = "lawyer_blue"
/obj/item/clothing/under/lawyer/bluesuit
name = "Blue Suit"
desc = "A classy suit and tie"
icon_state = "bluesuit"
item_state = "bluesuit"
item_color = "bluesuit"
item_state = "ba_suit"
worn_state = "bluesuit"
/obj/item/clothing/under/lawyer/purpsuit
name = "Purple Suit"
icon_state = "lawyer_purp"
item_state = "lawyer_purp"
item_color = "lawyer_purp"
item_state = "ba_suit"
worn_state = "lawyer_purp"
/obj/item/clothing/under/lawyer/oldman
name = "Old Man's Suit"
desc = "A classic suit for the older gentleman with built in back support."
icon_state = "oldman"
item_state = "oldman"
item_color = "oldman"
item_state = "johnny"
worn_state = "oldman"
/obj/item/clothing/under/librarian
name = "sensible suit"
desc = "It's very... sensible."
icon_state = "red_suit"
item_state = "red_suit"
item_color = "red_suit"
item_state = "lawyer_red"
worn_state = "red_suit"
/obj/item/clothing/under/mime
name = "mime's outfit"
desc = "It's not very colourful."
icon_state = "mime"
item_state = "mime"
item_color = "mime"
item_state = "ba_suit"
worn_state = "mime"
/obj/item/clothing/under/rank/miner
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
name = "shaft miner's jumpsuit"
icon_state = "miner"
item_state = "miner"
item_color = "miner"
item_state = "lb_suit"
worn_state = "miner"
@@ -4,7 +4,7 @@
name = "chief engineer's jumpsuit"
icon_state = "chiefengineer"
item_state = "g_suit"
item_color = "chief"
worn_state = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
/obj/item/clothing/under/rank/atmospheric_technician
@@ -12,19 +12,19 @@
name = "atmospheric technician's jumpsuit"
icon_state = "atmos"
item_state = "atmos_suit"
item_color = "atmos"
worn_state = "atmos"
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
name = "engineer's jumpsuit"
icon_state = "engine"
item_state = "engi_suit"
item_color = "engine"
worn_state = "engine"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
/obj/item/clothing/under/rank/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
name = "roboticist's jumpsuit"
icon_state = "robotics"
item_state = "robotics"
item_color = "robotics"
item_state = "bl_suit"
worn_state = "robotics"
+32 -27
View File
@@ -5,23 +5,24 @@
desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
name = "research director's jumpsuit"
icon_state = "director"
item_state = "g_suit"
item_color = "director"
item_state = "lb_suit"
worn_state = "director"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/research_director/rdalt
desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication."
name = "head researcher uniform"
icon_state = "rdalt"
item_state = "rdalt"
item_color = "rdalt"
item_state = "lb_suit"
worn_state = "rdalt"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/research_director/dress_rd
name = "research director dress uniform"
desc = "Feminine fashion for the style concious RD. Its fabric provides minor protection from biological contaminants."
icon_state = "dress_rd"
item_color = "dress_rd"
item_state = "lb_suit"
worn_state = "dress_rd"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -30,7 +31,7 @@
name = "scientist's jumpsuit"
icon_state = "science"
item_state = "w_suit"
item_color = "sciencewhite"
worn_state = "sciencewhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
@@ -40,7 +41,7 @@
name = "chemist's jumpsuit"
icon_state = "chemistry"
item_state = "w_suit"
item_color = "chemistrywhite"
worn_state = "chemistrywhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -52,7 +53,7 @@
name = "chief medical officer's jumpsuit"
icon_state = "cmo"
item_state = "w_suit"
item_color = "cmo"
worn_state = "cmo"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -61,7 +62,7 @@
name = "geneticist's jumpsuit"
icon_state = "genetics"
item_state = "w_suit"
item_color = "geneticswhite"
worn_state = "geneticswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -70,7 +71,7 @@
name = "virologist's jumpsuit"
icon_state = "virology"
item_state = "w_suit"
item_color = "virologywhite"
worn_state = "virologywhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -79,7 +80,7 @@
name = "nurse's suit"
icon_state = "nursesuit"
item_state = "nursesuit"
item_color = "nursesuit"
worn_state = "nursesuit"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
@@ -88,18 +89,18 @@
desc = "A dress commonly worn by the nursing staff in the medical department."
name = "nurse's dress"
icon_state = "nurse"
item_state = "nurse"
item_color = "nurse"
item_state = "nursesuit"
worn_state = "nurse"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/rank/orderly
desc = "A white suit to be worn by orderly people who love orderly things."
desc = "A white suit to be worn by medical attendants."
name = "orderly's uniform"
icon_state = "orderly"
item_state = "orderly"
item_color = "orderly"
item_state = "nursesuit"
worn_state = "orderly"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -108,7 +109,7 @@
name = "medical doctor's jumpsuit"
icon_state = "medical"
item_state = "w_suit"
item_color = "medical"
worn_state = "medical"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -116,39 +117,43 @@
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_color = "scrubsblue"
item_state = "b_suit"
worn_state = "scrubsblue"
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_color = "scrubsgreen"
item_state = "g_suit"
worn_state = "scrubsgreen"
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_color = "scrubspurple"
item_state = "p_suit"
worn_state = "scrubspurple"
/obj/item/clothing/under/rank/medical/black
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in black."
icon_state = "scrubsblack"
item_color = "scrubsblack"
item_state = "bl_suit"
worn_state = "scrubsblack"
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
name = "psychiatrist's jumpsuit"
icon_state = "psych"
item_state = "w_suit"
item_color = "psych"
worn_state = "psych"
/obj/item/clothing/under/rank/psych/turtleneck
desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist."
name = "psychologist's turtleneck"
icon_state = "psychturtle"
item_state = "b_suit"
item_color = "psychturtle"
worn_state = "psychturtle"
/*
@@ -159,7 +164,7 @@
name = "geneticist's jumpsuit"
icon_state = "genetics_new"
item_state = "w_suit"
item_color = "genetics_new"
worn_state = "genetics_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -168,7 +173,7 @@
name = "chemist's jumpsuit"
icon_state = "chemist_new"
item_state = "w_suit"
item_color = "chemist_new"
worn_state = "chemist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -177,7 +182,7 @@
name = "scientist's jumpsuit"
icon_state = "scientist_new"
item_state = "w_suit"
item_color = "scientist_new"
worn_state = "scientist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
@@ -186,6 +191,6 @@
name = "virologist's jumpsuit"
icon_state = "virologist_new"
item_state = "w_suit"
item_color = "virologist_new"
worn_state = "virologist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
+26 -25
View File
@@ -13,7 +13,7 @@
name = "warden's jumpsuit"
icon_state = "warden"
item_state = "r_suit"
item_color = "warden"
worn_state = "warden"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -22,7 +22,7 @@
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection."
icon_state = "security"
item_state = "r_suit"
item_color = "secred"
worn_state = "secred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -30,8 +30,8 @@
name = "dispatcher's uniform"
desc = "A dress shirt and khakis with a security patch sewn on."
icon_state = "dispatch"
item_state = "dispatch"
item_color = "dispatch"
//item_state = "dispatch"
worn_state = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
siemens_coefficient = 0.9
@@ -41,26 +41,26 @@
desc = "It's made of a slightly sturdier material, to allow for robust protection."
icon_state = "redshirt2"
item_state = "r_suit"
item_color = "redshirt2"
worn_state = "redshirt2"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security/corp
icon_state = "sec_corporate"
item_state = "sec_corporate"
item_color = "sec_corporate"
//item_state = "sec_corporate"
worn_state = "sec_corporate"
/obj/item/clothing/under/rank/warden/corp
icon_state = "warden_corporate"
item_state = "warden_corporate"
item_color = "warden_corporate"
//item_state = "warden_corporate"
worn_state = "warden_corporate"
/obj/item/clothing/under/tactical
name = "tactical jumpsuit"
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection."
icon_state = "swatunder"
item_state = "swatunder"
item_color = "swatunder"
//item_state = "swatunder"
worn_state = "swatunder"
armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -72,23 +72,24 @@
desc = "Someone who wears this means business."
icon_state = "detective"
item_state = "det"
item_color = "detective"
worn_state = "detective"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
/obj/item/clothing/under/det/black
icon_state = "detective2"
item_color = "detective2"
worn_state = "detective2"
item_state = "sl_suit"
/obj/item/clothing/under/det/slob
icon_state = "polsuit"
item_color = "polsuit"
worn_state = "polsuit"
/obj/item/clothing/under/det/slob/verb/rollup()
set name = "Roll suit sleeves"
set category = "Object"
set src in usr
item_color = item_color == "polsuit" ? "polsuit_rolled" : "polsuit"
worn_state = worn_state == "polsuit" ? "polsuit_rolled" : "polsuit"
if (ishuman(loc))
var/mob/living/carbon/human/H = loc
H.update_inv_w_uniform(1)
@@ -114,14 +115,14 @@
name = "head of security's jumpsuit"
icon_state = "hos"
item_state = "r_suit"
item_color = "hosred"
worn_state = "hosred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.8
/obj/item/clothing/under/rank/head_of_security/corp
icon_state = "hos_corporate"
item_state = "hos_corporate"
item_color = "hos_corporate"
//item_state = "hos_corporate"
worn_state = "hos_corporate"
/obj/item/clothing/head/helmet/HoS
name = "Head of Security Hat"
@@ -157,7 +158,7 @@
name = "head of security's jumpsuit"
icon_state = "jensen"
item_state = "jensen"
item_color = "jensen"
worn_state = "jensen"
siemens_coefficient = 0.6
/obj/item/clothing/suit/armor/hos/jensen
@@ -177,19 +178,19 @@
name = "security officer's uniform"
desc = "The latest in fashionable security outfits."
icon_state = "officerblueclothes"
item_state = "officerblueclothes"
item_color = "officerblueclothes"
item_state = "ba_suit"
worn_state = "officerblueclothes"
/obj/item/clothing/under/rank/head_of_security/navyblue
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
name = "head of security's uniform"
icon_state = "hosblueclothes"
item_state = "hosblueclothes"
item_color = "hosblueclothes"
item_state = "ba_suit"
worn_state = "hosblueclothes"
/obj/item/clothing/under/rank/warden/navyblue
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
name = "warden's uniform"
icon_state = "wardenblueclothes"
item_state = "wardenblueclothes"
item_color = "wardenblueclothes"
item_state = "ba_suit"
worn_state = "wardenblueclothes"
+120 -100
View File
@@ -2,56 +2,57 @@
name = "red pj's"
desc = "Sleepwear."
icon_state = "red_pyjamas"
item_color = "red_pyjamas"
worn_state = "red_pyjamas"
item_state = "w_suit"
/obj/item/clothing/under/pj/blue
name = "blue pj's"
desc = "Sleepwear."
icon_state = "blue_pyjamas"
item_color = "blue_pyjamas"
worn_state = "blue_pyjamas"
item_state = "w_suit"
/obj/item/clothing/under/captain_fly
name = "rogue's uniform"
desc = "For the man who doesn't care because he's still free."
icon_state = "captain_fly"
item_state = "captain_fly"
item_color = "captain_fly"
item_state = "r_suit"
worn_state = "captain_fly"
/obj/item/clothing/under/scratch
name = "white suit"
desc = "A white suit, suitable for an excellent host"
icon_state = "scratch"
item_state = "scratch"
item_color = "scratch"
worn_state = "scratch"
/obj/item/clothing/under/sl_suit
desc = "It's a very amish looking suit."
name = "amish suit"
icon_state = "sl_suit"
item_color = "sl_suit"
worn_state = "sl_suit"
item_state = "sl_suit"
/obj/item/clothing/under/waiter
name = "waiter's outfit"
desc = "It's a very smart uniform with a special pocket for tip."
icon_state = "waiter"
item_state = "waiter"
item_color = "waiter"
worn_state = "waiter"
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
desc = "<i>'Special delivery!'</i>"
icon_state = "mailman"
item_state = "b_suit"
item_color = "mailman"
worn_state = "mailman"
/obj/item/clothing/under/sexyclown
name = "sexy-clown suit"
desc = "It makes you look HONKable!"
icon_state = "sexyclown"
item_state = "sexyclown"
item_color = "sexyclown"
item_state = "clown"
worn_state = "sexyclown"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/rank/vice
@@ -59,31 +60,31 @@
desc = "It's the standard issue pretty-boy outfit, as seen on Holo-Vision."
icon_state = "vice"
item_state = "gy_suit"
item_color = "vice"
worn_state = "vice"
//This set of uniforms looks fairly fancy and is generally used for high-ranking NT personnel from what I've seen, so lets give them appropriate ranks.
/obj/item/clothing/under/rank/centcom
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign.\""
name = "\improper NanoTrasen Navy Uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
name = "\improper NanoTrasen Officer's Dress Uniform"
icon_state = "officer"
item_state = "g_suit"
item_color = "officer"
item_state = "lawyer_black"
worn_state = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_officer
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant Commander.\""
name = "\improper NanoTrasen Officers Uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral.\""
name = "\improper NanoTrasen Officer's Dress Uniform"
icon_state = "officer"
item_state = "g_suit"
item_color = "officer"
item_state = "lawyer_black"
worn_state = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
name = "\improper NanoTrasen Captains Uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral-Executive.\""
name = "\improper NanoTrasen Officer's Dress Uniform"
icon_state = "centcom"
item_state = "dg_suit"
item_color = "centcom"
item_state = "lawyer_black"
worn_state = "centcom"
displays_id = 0
/obj/item/clothing/under/ert
@@ -91,14 +92,14 @@
desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. It looks very tactical."
icon_state = "ert_uniform"
item_state = "bl_suit"
item_color = "ert_uniform"
worn_state = "ert_uniform"
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
worn_state = "black"
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
@@ -110,7 +111,7 @@
name = "administrative cybernetic jumpsuit"
icon_state = "syndicate"
item_state = "bl_suit"
item_color = "syndicate"
worn_state = "syndicate"
desc = "it's a cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
@@ -124,97 +125,100 @@
name = "owl uniform"
desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
icon_state = "owl"
item_color = "owl"
worn_state = "owl"
item_state = "owl"
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
desc = "Johnny~~"
icon_state = "johnny"
item_color = "johnny"
worn_state = "johnny"
item_state = "johnny"
/obj/item/clothing/under/rainbow
name = "rainbow"
desc = "rainbow"
icon_state = "rainbow"
item_state = "rainbow"
item_color = "rainbow"
worn_state = "rainbow"
/obj/item/clothing/under/cloud
name = "cloud"
desc = "cloud"
icon_state = "cloud"
item_color = "cloud"
worn_state = "cloud"
/obj/item/clothing/under/psysuit
name = "dark undersuit"
desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm."
icon_state = "psysuit"
item_state = "psysuit"
item_color = "psysuit"
item_state = "bl_suit"
worn_state = "psysuit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
/obj/item/clothing/under/gentlesuit
name = "gentlemans suit"
desc = "A silk black shirt with a white tie and a matching gray vest and slacks. Feels proper."
icon_state = "gentlesuit"
item_state = "gentlesuit"
item_color = "gentlesuit"
item_state = "gy_suit"
worn_state = "gentlesuit"
/obj/item/clothing/under/gimmick/rank/captain/suit
name = "captain's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
icon_state = "green_suit"
item_state = "dg_suit"
item_color = "green_suit"
worn_state = "green_suit"
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit
name = "head of personnel's suit"
desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
icon_state = "teal_suit"
item_state = "g_suit"
item_color = "teal_suit"
worn_state = "teal_suit"
/obj/item/clothing/under/suit_jacket
name = "black suit"
desc = "A black suit and red tie. Very formal."
icon_state = "black_suit"
item_state = "bl_suit"
item_color = "black_suit"
worn_state = "black_suit"
/obj/item/clothing/under/suit_jacket/really_black
name = "executive suit"
desc = "A formal black suit and red tie, intended for the station's finest."
icon_state = "really_black_suit"
item_state = "bl_suit"
item_color = "black_suit"
item_state = "jensensuit"
worn_state = "black_suit"
/obj/item/clothing/under/suit_jacket/female
name = "executive suit"
desc = "A formal trouser suit for women, intended for the station's finest."
icon_state = "black_suit_fem"
item_state = "black_suit_fem"
item_color = "black_suit_fem"
item_state = "lawyer_black"
worn_state = "black_suit_fem"
/obj/item/clothing/under/suit_jacket/red
name = "red suit"
desc = "A red suit and blue tie. Somewhat formal."
icon_state = "red_suit"
item_state = "r_suit"
item_color = "red_suit"
worn_state = "red_suit"
/obj/item/clothing/under/blackskirt
name = "black skirt"
desc = "A black skirt, very fancy!"
icon_state = "blackskirt"
item_color = "blackskirt"
item_state = "bl_suit"
worn_state = "blackskirt"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/schoolgirl
name = "schoolgirl uniform"
desc = "It's just like one of my Japanese animes!"
icon_state = "schoolgirl"
item_state = "schoolgirl"
item_color = "schoolgirl"
item_state = "b_suit"
worn_state = "schoolgirl"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/overalls
@@ -222,133 +226,144 @@
desc = "A set of durable overalls for getting the job done."
icon_state = "overalls"
item_state = "lb_suit"
item_color = "overalls"
worn_state = "overalls"
/obj/item/clothing/under/pirate
name = "pirate outfit"
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
item_color = "pirate"
item_state = "sl_suit"
worn_state = "pirate"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/soviet
name = "soviet uniform"
desc = "For the Motherland!"
icon_state = "soviet"
item_state = "soviet"
item_color = "soviet"
item_state = "gy_suit"
worn_state = "soviet"
/obj/item/clothing/under/redcoat
name = "redcoat uniform"
desc = "Looks old."
icon_state = "redcoat"
item_state = "redcoat"
item_color = "redcoat"
item_state = "r_suit"
worn_state = "redcoat"
/obj/item/clothing/under/kilt
name = "kilt"
desc = "Includes shoes and plaid"
icon_state = "kilt"
item_state = "kilt"
item_color = "kilt"
worn_state = "kilt"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET
/obj/item/clothing/under/sexymime
name = "sexy mime outfit"
desc = "The only time when you DON'T enjoy looking at someone's rack."
icon_state = "sexymime"
item_state = "sexymime"
item_color = "sexymime"
item_state = "w_suit"
worn_state = "sexymime"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/gladiator
name = "gladiator uniform"
desc = "Are you not entertained? Is that not why you are here?"
icon_state = "gladiator"
item_state = "gladiator"
item_color = "gladiator"
item_state = "o_suit"
worn_state = "gladiator"
body_parts_covered = LOWER_TORSO
//dress
/obj/item/clothing/under/dress/
/obj/item/clothing/under/dress
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/dress/dress_fire
name = "flame dress"
desc = "A small black dress with blue flames print on it."
icon_state = "dress_fire"
item_color = "dress_fire"
item_state = "bl_suit"
worn_state = "dress_fire"
/obj/item/clothing/under/dress/dress_green
name = "green dress"
desc = "A simple, tight fitting green dress."
icon_state = "dress_green"
item_color = "dress_green"
item_state = "g_suit"
worn_state = "dress_green"
/obj/item/clothing/under/dress/dress_orange
name = "orange dress"
desc = "A fancy orange gown for those who like to show leg."
icon_state = "dress_orange"
item_color = "dress_orange"
item_state = "y_suit"
worn_state = "dress_orange"
/obj/item/clothing/under/dress/dress_pink
name = "pink dress"
desc = "A simple, tight fitting pink dress."
icon_state = "dress_pink"
item_color = "dress_pink"
item_state = "p_suit"
worn_state = "dress_pink"
/obj/item/clothing/under/dress/dress_yellow
name = "yellow dress"
desc = "A flirty, little yellow dress."
icon_state = "dress_yellow"
item_color = "dress_yellow"
item_state = "y_suit"
worn_state = "dress_yellow"
/obj/item/clothing/under/dress/dress_saloon
name = "saloon girl dress"
desc = "A old western inspired gown for the girl who likes to drink."
icon_state = "dress_saloon"
item_color = "dress_saloon"
item_state = "p_suit"
worn_state = "dress_saloon"
/obj/item/clothing/under/dress/dress_cap
name = "captain's dress uniform"
desc = "Feminine fashion for the style concious captain."
icon_state = "dress_cap"
item_color = "dress_cap"
item_state = "b_suit"
worn_state = "dress_cap"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/dress_hop
name = "head of personnel dress uniform"
desc = "Feminine fashion for the style concious HoP."
icon_state = "dress_hop"
item_color = "dress_hop"
item_state = "b_suit"
worn_state = "dress_hop"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/dress_hr
name = "human resources director uniform"
desc = "Superior class for the nosy H.R. Director."
icon_state = "huresource"
item_color = "huresource"
item_state = "y_suit"
worn_state = "huresource"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/plaid_blue
name = "blue plaid skirt"
desc = "A preppy blue skirt with a white blouse."
icon_state = "plaid_blue"
item_color = "plaid_blue"
worn_state = "plaid_blue"
/obj/item/clothing/under/dress/plaid_red
name = "red plaid skirt"
desc = "A preppy red skirt with a white blouse."
icon_state = "plaid_red"
item_color = "plaid_red"
item_state = "kilt"
worn_state = "plaid_red"
/obj/item/clothing/under/dress/plaid_purple
name = "blue purple skirt"
desc = "A preppy purple skirt with a white blouse."
icon_state = "plaid_purple"
item_color = "plaid_purple"
item_state = "kilt"
worn_state = "plaid_purple"
//wedding stuff
/obj/item/clothing/under/wedding/
@@ -358,35 +373,40 @@
name = "orange wedding dress"
desc = "A big and puffy orange dress."
icon_state = "bride_orange"
item_color = "bride_orange"
item_state = "y_suit"
worn_state = "bride_orange"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_purple
name = "purple wedding dress"
desc = "A big and puffy purple dress."
icon_state = "bride_purple"
item_color = "bride_purple"
item_state = "p_suit"
worn_state = "bride_purple"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_blue
name = "blue wedding dress"
desc = "A big and puffy blue dress."
icon_state = "bride_blue"
item_color = "bride_blue"
item_state = "b_suit"
worn_state = "bride_blue"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_red
name = "red wedding dress"
desc = "A big and puffy red dress."
icon_state = "bride_red"
item_color = "bride_red"
item_state = "r_suit"
worn_state = "bride_red"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_white
name = "silky wedding dress"
desc = "A white wedding gown made from the finest silk."
icon_state = "bride_white"
item_color = "bride_white"
item_state = "nursesuit"
worn_state = "bride_white"
flags_inv = HIDESHOES
body_parts_covered = UPPER_TORSO|LOWER_TORSO
@@ -394,8 +414,8 @@
name = "sundress"
desc = "Makes you want to frolic in a field of daisies."
icon_state = "sundress"
item_state = "sundress"
item_color = "sundress"
item_state = "bl_suit"
worn_state = "sundress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/sundress_white
@@ -403,92 +423,92 @@
desc = "A white sundress decorated with purple lilies."
icon_state = "sundress_white"
item_state = "sundress_white"
item_color = "sundress_white"
worn_state = "sundress_white"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/blackjumpskirt
name = "black jumpskirt"
desc = "A black jumpskirt, Sol size 0."
icon_state = "blackjumpskirt"
item_state = "blackjumpskirt"
item_color = "blackjumpskirt"
item_state = "bl_suit"
worn_state = "blackjumpskirt"
/obj/item/clothing/under/captainformal
name = "captain's formal uniform"
desc = "A captain's formal-wear, for special occasions."
icon_state = "captain_formal"
item_state = "by_suit"
item_color = "captain_formal"
item_state = "b_suit"
worn_state = "captain_formal"
/obj/item/clothing/under/hosformalmale
name = "head of security's formal uniform"
desc = "A male head of security's formal-wear, for special occasions."
icon_state = "hos_formal_male"
item_state = "r_suit"
item_color = "hos_formal_male"
worn_state = "hos_formal_male"
/obj/item/clothing/under/hosformalfem
name = "head of security's formal uniform"
desc = "A female head of security's formal-wear, for special occasions."
icon_state = "hos_formal_fem"
item_state = "r_suit"
item_color = "hos_formal_fem"
worn_state = "hos_formal_fem"
/obj/item/clothing/under/assistantformal
name = "assistant's formal uniform"
desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
icon_state = "assistant_formal"
item_state = "gy_suit"
item_color = "assistant_formal"
worn_state = "assistant_formal"
/obj/item/clothing/under/suit_jacket/charcoal
name = "charcoal suit"
desc = "A charcoal suit and red tie. Very professional."
icon_state = "charcoal_suit"
item_state = "charcoal_suit"
item_color = "charcoal_suit"
item_state = "bl_suit"
worn_state = "charcoal_suit"
/obj/item/clothing/under/suit_jacket/navy
name = "navy suit"
desc = "A navy suit and red tie, intended for the station's finest."
icon_state = "navy_suit"
item_state = "navy_suit"
item_color = "navy_suit"
item_state = "bl_suit"
worn_state = "navy_suit"
/obj/item/clothing/under/suit_jacket/burgundy
name = "burgundy suit"
desc = "A burgundy suit and black tie. Somewhat formal."
icon_state = "burgundy_suit"
item_state = "burgundy_suit"
item_color = "burgundy_suit"
item_state = "r_suit"
worn_state = "burgundy_suit"
/obj/item/clothing/under/suit_jacket/checkered
name = "checkered suit"
desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
icon_state = "checkered_suit"
item_state = "checkered_suit"
item_color = "checkered_suit"
item_state = "gy_suit"
worn_state = "checkered_suit"
/obj/item/clothing/under/suit_jacket/tan
name = "tan suit"
desc = "A tan suit with a yellow tie. Smart, but casual."
icon_state = "tan_suit"
item_state = "tan_suit"
item_color = "tan_suit"
item_state = "lb_suit"
worn_state = "tan_suit"
/obj/item/clothing/under/serviceoveralls
name = "workman outfit"
desc = "The very image of a working man. Not that you're probably doing work."
icon_state = "mechanic"
item_state = "mechanic"
item_color = "mechanic"
item_state = "lb_suit"
worn_state = "mechanic"
/obj/item/clothing/under/cheongsam
name = "white cheongsam"
desc = "It is a white cheongsam dress."
icon_state = "mai_yang"
item_state = "mai_yang"
item_color = "mai_yang"
worn_state = "mai_yang"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/blazer
@@ -496,4 +516,4 @@
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
icon_state = "blue_blazer"
item_state = "blue_blazer"
item_color = "blue_blazer"
worn_state = "blue_blazer"
+5 -5
View File
@@ -7,24 +7,24 @@
/obj/item/clothing/under/shorts/red
name = "red athletic shorts"
icon_state = "redshorts"
item_color = "redshorts"
worn_state = "redshorts"
/obj/item/clothing/under/shorts/green
name = "green athletic shorts"
icon_state = "greenshorts"
item_color = "greenshorts"
worn_state = "greenshorts"
/obj/item/clothing/under/shorts/blue
name = "blue athletic shorts"
icon_state = "blueshorts"
item_color = "blueshorts"
worn_state = "blueshorts"
/obj/item/clothing/under/shorts/black
name = "black athletic shorts"
icon_state = "blackshorts"
item_color = "blackshorts"
worn_state = "blackshorts"
/obj/item/clothing/under/shorts/grey
name = "grey athletic shorts"
icon_state = "greyshorts"
item_color = "greyshorts"
worn_state = "greyshorts"
+2 -2
View File
@@ -3,7 +3,7 @@
desc = "It's some non-descript, slightly suspicious looking, civilian clothing."
icon_state = "syndicate"
item_state = "bl_suit"
item_color = "syndicate"
worn_state = "syndicate"
has_sensor = 0
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -16,7 +16,7 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
item_color = "tactifool"
worn_state = "tactifool"
siemens_coefficient = 1
+70 -55
View File
@@ -119,7 +119,6 @@
desc = "A medical apparatus intended to ease in listening to the sounds of the human body. This one looks cleaner and sparklier than the rest. There is a small silver plaque attached to the tubing, with the words 'Lucy Kemmerer' engraved on it."
icon_state = "lucystethos"
item_state = "lucystethos"
item_color ="lucystethos"
icon = 'icons/obj/custom_items.dmi'
/obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber
@@ -167,7 +166,6 @@
desc = "A faded badge, backed with leather, that reads 'NT Security Force' across the front. It bears the emblem of the Forensic division."
icon_state = "ana_badge"
item_state = "ana_badge"
item_color = "ana_badge"
/obj/item/fluff/ana_issek_2/attack_self(mob/user as mob)
if(isliving(user))
@@ -530,7 +528,7 @@
var/new_suit_desc // Sets suit desc.
var/helmet_icon // Sets helmet icon_state and item_state.
var/suit_icon // Sets suit icon_state and item_state.
var/helmet_color // Sets item_color.
var/helmet_color // Sets worn_state.
var/uses = 2 // Uses before the kit deletes itself.
var/new_light_overlay
@@ -544,7 +542,6 @@
desc = kit.new_helmet_desc
icon_state = kit.helmet_icon
item_state = kit.helmet_icon
item_color = kit.helmet_color
if(kit.new_light_overlay)
light_overlay = kit.new_light_overlay
@@ -652,9 +649,8 @@
desc = "Reinforced sterile gloves custom tailored to comfortably accommodate Tajaran claws."
icon_state = "latex"
item_state = "lgloves"
siemens_coefficient = 0.30
siemens_coefficient = 1.00
permeability_coefficient = 0.01
item_color="white"
species_restricted = list("exclude","Unathi")
/obj/item/clothing/gloves/fluff/walter_brooks_1 //botanistpower: Walter Brooks
@@ -663,7 +659,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "walter_brooks_1"
item_state = "bluegloves"
item_color="blue"
/obj/item/clothing/gloves/fluff/chal_appara_1 //furlucis: Chal Appara
name = "Left Black Glove"
@@ -886,7 +881,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "leatherjack"
item_state = "leatherjack"
item_color = "leatherjack"
/obj/item/clothing/suit/armor/vest/fluff/deus_blueshield //deusdactyl
name = "blue shield security armor"
@@ -947,33 +941,40 @@
desc = "A uniform jacket, its buttons polished to a shine, coupled with a dark pair of trousers. 'Hachert' is embroidered upon the jackets shoulder bar."
icon = 'icons/obj/custom_items.dmi'
icon_state = "milohachert"
item_state = "milohachert"
item_color = "milohachert"
item_state = "gy_suit"
worn_state = "milohachert"
/obj/item/clothing/under/fluff/john_saaland //GA Jumpsuit-John Saaland-Foxeye
name = "GA jumpsuit"
desc = "A tan jumpsuit, robustly constructed, with various velcro strips for name and ranking patches distributed over the torso and shoulders. Only one of these strips is in use, holding a patch with 'J. SAALAND' written on it in block lettering over the right breast pocket."
icon = 'icons/obj/custom_items.dmi'
icon_state = "saaland"
item_state = "saaland_suit"
worn_state = "saaland"
/obj/item/clothing/under/fluff/kaine_kalim_2
name = "Formal Medical Uniform"
desc = "An unusually sterile and pressed uniform. It seems to have a string of vials crossing the chest."
icon = 'icons/obj/custom_items.dmi'
icon_state = "kaineuniform"
item_state = "kaineuniform"
item_color = "kaineuniform"
item_state = "w_suit"
worn_state = "kaineuniform"
/obj/item/clothing/under/fluff/jumpsuitdown //searif: Yuki Matsuda
name = "rolled down jumpsuit"
desc = "A rolled down jumpsuit. Great for mechanics."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jumpsuitdown"
item_state = "jumpsuitdown"
item_color = "jumpsuitdown"
item_state = "gy_suit"
worn_state = "jumpsuitdown"
/obj/item/clothing/under/fluff/lilith_vinous_1 //slyhidden: Lilith Vinous
name = "casual security uniform"
desc = "A less formal version of the traditional dark red Security uniform. It has the top button undone, rolled up sleeves and different belt."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lilith_uniform"
item_state = "lilith_uniform"
item_color = "lilith_uniform"
item_state = "r_suit"
worn_state = "lilith_uniform"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/fluff/ana_issek_1 //suethecake: Ana Issek
@@ -981,8 +982,8 @@
desc = "A silken blouse paired with dark-colored slacks. It has the words 'Chief Investigator' embroidered into the shoulder bar."
icon = 'icons/obj/custom_items.dmi'
icon_state = "ana_uniform"
item_state = "ana_uniform"
item_color = "ana_uniform"
item_state = "r_suit"
worn_state = "ana_uniform"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/fluff/olddressuniform //desiderium: Momiji Inubashiri
@@ -990,15 +991,16 @@
desc = "A retired Station Head of Staff uniform, phased out twenty years ago for the newer jumpsuit design, but still acceptable dress. Lovingly maintained."
icon = 'icons/obj/custom_items.dmi'
icon_state = "olddressuniform"
item_state = "olddressuniform"
item_color = "olddressuniform"
item_state = "b_suit"
worn_state = "olddressuniform"
/obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1 //whitewolf41: Jeremy Wolf
name = "worn officer's uniform"
desc = "An old red security jumpsuit. Seems to have some slight modifications."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jeremy_wolf_1"
item_color = "jeremy_wolf_1"
item_state = "r_suit"
worn_state = "jeremy_wolf_1"
//////////////////// PRC Uniform - Ronan Harper - Raptor1628 ///////////////////
@@ -1008,7 +1010,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "harper_uniform"
item_state = "jensensuit"
item_color = "harper_uniform"
worn_state = "harper_uniform"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
//////////////////// Corporate Cap - Robert Mason - Masterrbc ////////////////////
@@ -1022,8 +1024,8 @@
desc = "A nicely tailored purple dress made for the taller woman."
icon = 'icons/obj/custom_items.dmi'
icon_state = "tian_dress"
item_state = "tian_dress"
item_color = "tian_dress"
item_state = "r_suit"
worn_state = "tian_dress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/rank/bartender/fluff/classy //searif: Ara Al-Jazari
@@ -1031,32 +1033,32 @@
desc = "A prim and proper uniform that looks very similar to a bartender's, the only differences being a red tie, waistcoat and a rag hanging out of the back pocket."
icon = 'icons/obj/custom_items.dmi'
icon_state = "ara_bar_uniform"
item_state = "ara_bar_uniform"
item_color = "ara_bar_uniform"
item_state = "ba_suit"
worn_state = "ara_bar_uniform"
/obj/item/clothing/under/fluff/callum_suit //roaper: Callum Leamus
name = "knockoff suit"
desc = "A knockoff of a suit commonly worn by the upper class."
icon = 'icons/obj/custom_items.dmi'
icon_state = "callum_suit"
item_state = "callum_suit"
item_color = "callum_suit"
item_state = "ba_suit"
worn_state = "callum_suit"
/obj/item/clothing/under/fluff/solara_light_1 //bluefishie: Solara Born-In-Light
name = "Elaborate Purple Dress"
desc = "An expertly tailored dress, made out of fine fabrics. The interwoven necklace appears to be made out of gold, with three complicated symbols engraved in the front."
icon = 'icons/obj/custom_items.dmi'
icon_state = "solara_dress"
item_state = "solara_dress"
item_color = "solara_dress"
item_state = "p_suit"
worn_state = "solara_dress"
/obj/item/clothing/under/rank/nursesuit/fluff/sasha
name = "RN Uniform"
desc = "A nurse's uniform that is dark blue and gold. It looks like it's been tailored for a short person."
icon = 'icons/obj/custom_items.dmi'
icon_state = "sasha"
item_state = "sasha"
item_color = "sasha"
item_state = "b_suit"
worn_state = "sasha"
/////// NT-SID Suit //Zuhayr: Jane Doe
@@ -1066,8 +1068,8 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "jane_sid_suit"
item_state = "jane_sid_suit"
item_color = "jane_sid_suit"
item_state = "o_suit"
worn_state = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
@@ -1081,14 +1083,13 @@
return 0
if(src.icon_state == "jane_sid_suit_down")
src.item_color = "jane_sid_suit"
src.icon_state = "jane_sid_suit"
usr << "You zip up the [src]."
else
src.item_color = "jane_sid_suit_down"
src.icon_state = "jane_sid_suit_down"
usr << "You unzip and roll down the [src]."
src.icon_state = "[item_color]"
src.item_state = "[item_color]"
src.item_state_slots[slot_w_uniform_str] = "[src.icon_state]"
update_clothing_icon()
////// Wyatt's Ex-Commander Jumpsuit - RawrTaicho
@@ -1098,8 +1099,8 @@
desc = "A standard Central Command Engineering Commander jumpsuit tailored to fight the wearer tightly. It has a Medal of Service pinned onto the left side of it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "wyatt_uniform"
item_state = "wyatt_uniform"
item_color = "wyatt_uniform"
//item_state = "wyatt_uniform"
worn_state = "wyatt_uniform"
////// Black Dress - Lillian Amsel - PapaDrow
/obj/item/clothing/under/fluff/lillian_amsel_1
@@ -1107,8 +1108,8 @@
desc = "A knee-length, dark gray and black dress made of a soft, velvety material."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lillian_dress"
item_state = "lillian_dress"
item_color = "lillian_dress"
//item_state = "lillian_dress"
worn_state = "lillian_dress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
////// Tailored Security Uniform - Parker Eliza - MrSnapwalk
@@ -1118,8 +1119,8 @@
desc = "A red uniform shirt (tailored for easy access to the shoulder joint) and black cargo pants, paired with a set of somewhat bulky white casings for robotic limbs. The arms have a small label on the inner elbow, which reads \"Bishop Corporation Cybernetic Solutions\"."
icon = 'icons/obj/custom_items.dmi'
icon_state = "parker_eliza"
item_state = "parker_eliza"
item_color = "parker_eliza"
//item_state = "parker_eliza"
worn_state = "parker_eliza"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
////// Bishop "GOLEM" V2200 Industrial Limb Augments - Parker Eliza - MrSnapwalk
@@ -1130,11 +1131,9 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "parker_eliza_arms"
item_state = "parker_eliza_arms"
item_color = "parker_eliza_arms"
body_parts_covered = 0 //technicially it's underneath everything
body_parts_covered = 0 //technicially it's underneath everything, being part of the body
canremove = 0
////////////// Accessories /////
//////////////////// Blood Red Pendant - Mewth - Mu'taz Radi ////////////////
@@ -1145,7 +1144,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "radi_pendant"
item_state = "radi_pendant"
item_color = "radi_pendant"
w_class = 2.0
//////////// Masks ////////////
@@ -1185,7 +1183,7 @@
name = "painted mask"
desc = "A ghoulish mask with a stylized painting of a flame over the left eye, and a painted tear stream coming from the right eye."
icon = 'icons/obj/custom_items.dmi'
item_state = "cicero"
//item_state = "cicero"
icon_state = "cicero"
body_parts_covered = FACE|EYES
@@ -1197,7 +1195,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "altair_locket"
item_state = "altair_locket"
item_color = "altair_locket"
slot_flags = 0
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1210,7 +1207,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "konaahirano"
item_state = "konaahirano"
item_color = "konaahirano"
slot_flags = 0
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1311,7 +1307,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "medical_short"
item_state = "medical_short"
item_color = "medical_short"
worn_state = "medical_short"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/suit/storage/labcoat/fluff/red
@@ -1328,7 +1324,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "retpolcoat"
item_state = "retpolcoat"
item_color = "retpolcoat"
/obj/item/clothing/head/det_hat/fluff/retpolcap
name = "retired colony patrolman's cap"
@@ -1341,7 +1336,7 @@
desc = "A meticulously clean police uniform belonging to Precinct 31, Outer Light Colony. The word \"RETIRED\" is engraved tastefully and professionally in the badge below the number, 501."
icon = 'icons/obj/custom_items.dmi'
icon_state = "retpoluniform"
item_color = "retpoluniform"
worn_state = "retpoluniform"
//////////// Weapons ////////////
@@ -1387,7 +1382,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "sakura_hokkaido_kimono"
item_state = "sakura_hokkaido_kimono"
item_color = "sakura_hokkaido_kimono"
worn_state = "sakura_hokkaido_kimono"
///////////////////////////// Astronovus - Harold's Cane ////////////////////////////
@@ -1455,3 +1450,23 @@
friend = M
break
..()
///////////////////////////// Sabess - Maria's Heart-Shaped Locket ///////////////////////////////////
/obj/item/weapon/fluff/mariafontaine
name = "Heart-Shaped Locket"
desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
icon = 'icons/obj/custom_items.dmi'
icon_state = "mariaclosed"
item_state = "mariaclosed"
obj/item/weapon/fluff/mariafontaine/attack_self(mob/user as mob)
if(src.icon_state == "mariaclosed")
src.icon_state = "mariaopen"
src.item_state = "mariaopen"
user << "You flip the locket open."
else
src.icon_state = "mariaclosed"
src.item_state = "mariaclosed"
user << "You flip the locket closed."
+3 -2
View File
@@ -141,10 +141,11 @@
if("finalise_create_account")
var/account_name = href_list["holder_name"]
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
create_account(account_name, starting_funds, src)
starting_funds = Clamp(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
starting_funds = min(starting_funds, fund_cap) // Not authrorized to give more than the fund cap.
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
create_account(account_name, starting_funds, src)
if(starting_funds > 0)
//subtract the money
station_account.money -= starting_funds
+54
View File
@@ -0,0 +1,54 @@
/datum/event/apc_damage
var/apcSelectionRange = 25
/datum/event/apc_damage/start()
var/obj/machinery/power/apc/A = acquire_random_apc()
var/severity_range = 0
switch(severity)
if(EVENT_LEVEL_MUNDANE)
severity_range = 0
if(EVENT_LEVEL_MODERATE)
severity_range = 7
if(EVENT_LEVEL_MAJOR)
severity_range = 15
for(var/obj/machinery/power/apc/apc in range(severity_range,A))
if(is_valid_apc(apc))
apc.emagged = 1
apc.update_icon()
/datum/event/apc_damage/proc/acquire_random_apc()
var/list/possibleEpicentres = list()
var/list/apcs = list()
for(var/obj/effect/landmark/newEpicentre in landmarks_list)
if(newEpicentre.name == "lightsout")
possibleEpicentres += newEpicentre
if(!possibleEpicentres.len)
return
var/epicentre = pick(possibleEpicentres)
for(var/obj/machinery/power/apc/apc in range(epicentre,apcSelectionRange))
if(is_valid_apc(apc))
apcs += apc
// Greatly increase the chance for APCs in maintenance areas to be selected
var/area/A = get_area(apc)
if(istype(A,/area/maintenance))
apcs += apc
apcs += apc
if(!apcs.len)
return
return pick(apcs)
/datum/event/apc_damage/proc/is_valid_apc(var/obj/machinery/power/apc/apc)
// Type must be exactly a basic APC.
// This generally prevents affecting APCs in critical areas (AI core, engine room, etc.) as they often use higher capacity subtypes.
if(apc.type != /obj/machinery/power/apc)
return 0
var/turf/T = get_turf(apc)
return !apc.emagged && T && (T.z in config.player_levels)
+38
View File
@@ -0,0 +1,38 @@
/datum/event/camera_damage/start()
var/obj/machinery/camera/C = acquire_random_camera()
if(!C)
return
var/severity_range = 0
switch(severity)
if(EVENT_LEVEL_MUNDANE)
severity_range = 0
if(EVENT_LEVEL_MODERATE)
severity_range = 7
if(EVENT_LEVEL_MAJOR)
severity_range = 15
for(var/obj/machinery/camera/cam in range(severity_range,C))
if(is_valid_camera(cam))
if(prob(2*severity))
cam.destroy()
else
cam.wires.UpdateCut(CAMERA_WIRE_POWER, 0)
if(prob(5*severity))
cam.wires.UpdateCut(CAMERA_WIRE_ALARM, 0)
/datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5)
if(!cameranet.cameras.len)
return
if(!remaining_attempts)
return
var/obj/machinery/camera/C = pick(cameranet.cameras)
if(is_valid_camera(C))
return C
return acquire_random_camera(remaining_attempts--)
/datum/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C)
// Only return a functional camera, not installed in a silicon, and that exists somewhere players have access
var/turf/T = get_turf(C)
return T && C.can_use() && !istype(C.loc, /mob/living/silicon) && (T.z in config.player_levels)
@@ -12,9 +12,9 @@
A << "<br>"
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=50))
command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=25))
/datum/event/communications_blackout/start()
for(var/obj/machinery/telecomms/T in telecomms_list)
T.emp_act(1)
T.emp_act(1)
+1 -1
View File
@@ -25,4 +25,4 @@
for(var/obj/effect/landmark/epicentre in epicentreList)
for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange))
apc.overload_lighting()
apc.overload_lighting()
+3 -1
View File
@@ -127,11 +127,13 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
available_events = list(
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 100),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence,20, list(ASSIGNMENT_JANITOR = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 30, list(ASSIGNMENT_ENGINEER = 5), 0, 0, 50),
+4 -5
View File
@@ -1,14 +1,13 @@
/var/global/sent_spiders_to_station = 0
/datum/event/spider_infestation
announceWhen = 400
announceWhen = 90
var/spawncount = 1
/datum/event/spider_infestation/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(8, 12) //spiderlings only have a 50% chance to grow big and strong
announceWhen = rand(announceWhen, announceWhen + 60)
spawncount = rand(4 * severity, 6 * severity) //spiderlings only have a 50% chance to grow big and strong
sent_spiders_to_station = 0
/datum/event/spider_infestation/announce()
@@ -26,4 +25,4 @@
var/obj/vent = pick(vents)
new /obj/effect/spider/spiderling(vent.loc)
vents -= vent
spawncount--
spawncount--
@@ -0,0 +1,21 @@
/obj/item/weapon/pen
description_info = {"This is an item for writing down your thoughts, on paper or elsewhere. The following special commands are available:
Pen and crayon commands
\[br\] : Creates a linebreak.
\[center\] - \[/center\] : Centers the text.
\[h1\] - \[/h1\] : Makes the text a first level heading.
\[h2\] - \[/h2\] : Makes the text a second level headin.
\[h3\] - \[/h3\] : Makes the text a third level heading.
\[b\] - \[/b\] : Makes the text bold.
\[i\] - \[/i\] : Makes the text italic.
\[u\] - \[/u\] : Makes the text underlined.
\[large\] - \[/large\] : Increases the size of the text.
\[sign\] : Inserts a signature of your name in a foolproof way.
\[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.
\[date\] : Inserts today's station date.
\[time\] : Inserts the current station time.
Pen exclusive commands
\[small\] - \[/small\] : Decreases the size of the text.
\[list\] - \[/list\] : A list.
\[*\] : A dot used for lists.
\[hr\] : Adds a horizontal rule."}
+1
View File
@@ -203,6 +203,7 @@
w_class = 2.0
flags = NOSHIELD | NOBLOODY
var/active = 0
var/item_color
/obj/item/weapon/holo/esword/green
New()
+4 -1
View File
@@ -231,12 +231,15 @@
S.remove_from_storage(O, src)
O.loc = src
var/newID = 0
for (var/datum/seed_pile/N in piles)
if (N.matches(O))
++N.amount
N.seeds += (O)
return
else if(N.ID >= newID)
newID = N.ID + 1
piles += new /datum/seed_pile(O, piles.len)
piles += new /datum/seed_pile(O, newID)
return
+2 -2
View File
@@ -120,7 +120,7 @@
new/obj/item/clothing/mask/gas/clown_hat(src)
new/obj/item/weapon/bikehorn(src)
//new/obj/item/weapon/stamp/clown(src) I'd add it, but only clowns can use it
new/obj/item/toy/crayon/rainbow(src)
new/obj/item/weapon/pen/crayon/rainbow(src)
new/obj/item/toy/waterflower(src)
if(95)
new/obj/item/clothing/under/mime(src)
@@ -130,7 +130,7 @@
new/obj/item/clothing/mask/gas/mime(src)
new/obj/item/clothing/head/beret(src)
new/obj/item/clothing/suit/suspenders(src)
new/obj/item/toy/crayon/mime(src)
new/obj/item/weapon/pen/crayon/mime(src)
new/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(src)
if(96)
new/obj/item/weapon/vampiric(src)
+1 -1
View File
@@ -217,7 +217,7 @@
if(building == 1)
I = new /obj/item/stack/tile/plasteel(src)
else
I = new /obj/item/stack/rods(src)
I = PoolOrNew(/obj/item/stack/rods, src)
A.attackby(I, src)
target = null
repairing = 0
+3 -43
View File
@@ -334,53 +334,13 @@
path = list()
/mob/living/bot/secbot/proc/check_threat(var/mob/living/M)
if(M.stat == DEAD)
if(!M || !istype(M) || M.stat)
return 0
if(emagged)
return 10
var/threatcount = 0
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.handcuffed)
return 0
var/obj/item/weapon/card/id/id = GetIdCard(H) //Agent cards lower threatlevel.
if(id && istype(id, /obj/item/weapon/card/id/syndicate))
threatcount -= 2
if(idcheck && !access_scanner.allowed(H))
if(istype(H.l_hand, /obj/item/weapon/gun) || istype(H.l_hand, /obj/item/weapon/melee))
threatcount += 4
if(istype(H.r_hand, /obj/item/weapon/gun) || istype(H.r_hand, /obj/item/weapon/melee))
threatcount += 4
if(istype(H.belt, /obj/item/weapon/gun) || istype(H.belt, /obj/item/weapon/melee))
threatcount += 2
if(H.species.name != "Human") //beepsky so racist.
threatcount += 2
if(check_records || check_arrest)
var/perpname = H.name
if(id)
perpname = id.registered_name
var/datum/data/record/R = find_security_record("name", perpname)
if(check_records && !R)
threatcount += 4
if(check_arrest && R && (R.fields["criminal"] == "*Arrest*"))
threatcount += 4
else if(isanimal(M))
if(istype(M, /mob/living/simple_animal/hostile) && !istype(M, /mob/living/simple_animal/hostile/retaliate/goat))
threatcount += 4
return threatcount
return M.assess_perp(access_scanner, idcheck, check_records, check_arrest)
/mob/living/bot/secbot/proc/patrol_step()
if(loc == patrol_target)
+1 -1
View File
@@ -1,7 +1,7 @@
mob/living/carbon/verb/give(var/mob/living/carbon/target in view(1)-usr)
set category = "IC"
set name = "Give"
if(target.stat == 2 || usr.stat == 2|| target.client == null)
if(!istype(target) || target.stat == 2 || usr.stat == 2|| target.client == null)
return
var/obj/item/I
if(!usr.hand && usr.r_hand == null)
@@ -10,6 +10,10 @@
sleep(1)
for(var/obj/item/I in src)
drop_from_inventory(I)
I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(1,3), round(30/I.w_class))
..(species.gibbed_anim)
gibs(loc, viruses, dna, null, species.flesh_color, species.blood_color)
@@ -395,14 +395,14 @@
else if(is_bleeding["right foot"])
display_shoes = 1
if(display_chest)
msg += "<span class='warning'><b>[src] has blood soaking through from under [t_his] clothing!</b></span>\n"
msg += "<span class='danger'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(display_shoes)
msg += "<span class='warning'><b>[src] has blood running from [t_his] shoes!</b></span>\n"
msg += "<span class='danger'>[src] has blood running from [t_his] shoes!</span>\n"
if(display_gloves)
msg += "<span class='warning'><b>[src] has blood running from under [t_his] gloves!</b></span>\n"
msg += "<span class='danger'>[src] has blood running from under [t_his] gloves!</span>\n"
for(var/implant in get_visible_implants(0))
msg += "<span class='warning'><b>[src] has \a [implant] sticking out of [t_his] flesh!</span>\n"
msg += "<span class='danger'>[src] has \a [implant] sticking out of [t_his] flesh!</span>\n"
if(digitalcamo)
msg += "[t_He] [t_is] repulsively uncanny!\n"
+52 -24
View File
@@ -32,6 +32,7 @@
var/temperature_alert = 0
var/in_stasis = 0
var/heartbeat = 0
var/global/list/overlays_cache = null
/mob/living/carbon/human/Life()
@@ -1082,6 +1083,33 @@
return 1
proc/handle_regular_hud_updates()
if(!overlays_cache)
overlays_cache = list()
overlays_cache.len = 23
overlays_cache[1] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage1")
overlays_cache[2] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage2")
overlays_cache[3] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage3")
overlays_cache[4] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage4")
overlays_cache[5] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage5")
overlays_cache[6] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage6")
overlays_cache[7] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage7")
overlays_cache[8] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage8")
overlays_cache[9] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage9")
overlays_cache[10] = image('icons/mob/screen1_full.dmi', "icon_state" = "passage10")
overlays_cache[11] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay1")
overlays_cache[12] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay2")
overlays_cache[13] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay3")
overlays_cache[14] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay4")
overlays_cache[15] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay5")
overlays_cache[16] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay6")
overlays_cache[17] = image('icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay7")
overlays_cache[18] = image('icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay1")
overlays_cache[19] = image('icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay2")
overlays_cache[20] = image('icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay3")
overlays_cache[21] = image('icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay4")
overlays_cache[22] = image('icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay5")
overlays_cache[23] = image('icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay6")
if(hud_updateflag) // update our mob's hud overlays, AKA what others see flaoting above our head
handle_hud_list()
@@ -1100,32 +1128,32 @@
if(damageoverlay.overlays)
damageoverlay.overlays = list()
if(stat == UNCONSCIOUS)
//Critical damage passage overlay
if(health <= 0)
var/image/I
switch(health)
if(-20 to -10)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage1")
I = overlays_cache[1]
if(-30 to -20)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage2")
I = overlays_cache[2]
if(-40 to -30)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage3")
I = overlays_cache[3]
if(-50 to -40)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage4")
I = overlays_cache[4]
if(-60 to -50)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage5")
I = overlays_cache[5]
if(-70 to -60)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage6")
I = overlays_cache[6]
if(-80 to -70)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage7")
I = overlays_cache[7]
if(-90 to -80)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage8")
I = overlays_cache[8]
if(-95 to -90)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage9")
I = overlays_cache[9]
if(-INFINITY to -95)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage10")
I = overlays_cache[10]
damageoverlay.overlays += I
else
//Oxygen damage overlay
@@ -1133,19 +1161,19 @@
var/image/I
switch(oxyloss)
if(10 to 20)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay1")
I = overlays_cache[11]
if(20 to 25)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay2")
I = overlays_cache[12]
if(25 to 30)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay3")
I = overlays_cache[13]
if(30 to 35)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay4")
I = overlays_cache[14]
if(35 to 40)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay5")
I = overlays_cache[15]
if(40 to 45)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay6")
I = overlays_cache[16]
if(45 to INFINITY)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay7")
I = overlays_cache[17]
damageoverlay.overlays += I
//Fire and Brute damage overlay (BSSR)
@@ -1155,17 +1183,17 @@
var/image/I
switch(hurtdamage)
if(10 to 25)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay1")
I = overlays_cache[18]
if(25 to 40)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay2")
I = overlays_cache[19]
if(40 to 55)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay3")
I = overlays_cache[20]
if(55 to 70)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay4")
I = overlays_cache[21]
if(70 to 85)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay5")
I = overlays_cache[22]
if(85 to INFINITY)
I = image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay6")
I = overlays_cache[23]
damageoverlay.overlays += I
if( stat == DEAD )
+1 -1
View File
@@ -2,7 +2,7 @@
name = "fancy uniform"
desc = "It looks like it was tailored for a monkey."
icon_state = "punpun"
item_color = "punpun"
worn_state = "punpun"
species_restricted = list("Monkey")
/mob/living/carbon/human/monkey/punpun/New()
@@ -457,33 +457,49 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1)
if(w_uniform && istype(w_uniform, /obj/item/clothing/under) )
w_uniform.screen_loc = ui_iclothing
var/t_color = w_uniform.item_color
if(!t_color) t_color = icon_state
var/image/standing = image("icon_state" = "[t_color]_s")
//determine the icon to use
var/icon/under_icon
if(w_uniform.icon_override)
standing.icon = w_uniform.icon_override
under_icon = w_uniform.icon_override
else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name])
standing.icon = w_uniform.sprite_sheets[species.name]
under_icon = w_uniform.sprite_sheets[species.name]
else if(w_uniform.item_icons && w_uniform.item_icons[slot_w_uniform_str])
under_icon = w_uniform.item_icons[slot_w_uniform_str]
else
standing.icon = 'icons/mob/uniform.dmi'
under_icon = INV_W_UNIFORM_DEF_ICON
//determine state to use
var/under_state
if(w_uniform.item_state_slots && w_uniform.item_state_slots[slot_w_uniform_str])
under_state = w_uniform.item_state_slots[slot_w_uniform_str]
else if(w_uniform.item_state)
under_state = w_uniform.item_state
else
under_state = w_uniform.icon_state
//need to append _s to the icon state for legacy compatibility
var/image/standing = image(icon = under_icon, icon_state = "[under_state]_s")
//apply blood overlay
if(w_uniform.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood")
var/image/bloodsies = image(icon = species.blood_mask, icon_state = "uniformblood")
bloodsies.color = w_uniform.blood_color
standing.overlays += bloodsies
if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE.
for(var/obj/item/clothing/accessory/A in w_uniform:accessories)
var/tie_color = A.item_color
if(!tie_color) tie_color = A.icon_state
standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]")
//accessories
var/obj/item/clothing/under/under = w_uniform
if(under.accessories.len)
for(var/obj/item/clothing/accessory/A in under.accessories)
var/accessory_state = A.overlay_state? A.overlay_state : A.icon_state
standing.overlays += image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = accessory_state)
overlays_standing[UNIFORM_LAYER] = standing
else
overlays_standing[UNIFORM_LAYER] = null
if(update_icons) update_icons()
if(update_icons)
update_icons()
/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1)
if(wear_id)
@@ -738,19 +754,38 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
if(back)
back.screen_loc = ui_back //TODO
var/obj/item/weapon/rig/rig = back
//determine the icon to use
var/icon/overlay_icon
if(back.icon_override)
overlays_standing[BACK_LAYER] = image("icon" = back.icon_override, "icon_state" = "[back.icon_state]")
//If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc.
else if(istype(rig) && rig.mob_icon)
overlays_standing[BACK_LAYER] = rig.mob_icon
overlay_icon = back.icon_override
else if(istype(back, /obj/item/weapon/rig))
//If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc.
var/obj/item/weapon/rig/rig = back
overlay_icon = rig.mob_icon
else if(back.sprite_sheets && back.sprite_sheets[species.name])
overlays_standing[BACK_LAYER] = image("icon" = back.sprite_sheets[species.name], "icon_state" = "[back.icon_state]")
overlay_icon = back.sprite_sheets[species.name]
else if(back.item_icons && (slot_back_str in back.item_icons))
overlay_icon = back.item_icons[slot_back_str]
else
overlays_standing[BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]")
overlay_icon = INV_BACK_DEF_ICON
//determine state to use
var/overlay_state
if(back.item_state_slots && back.item_state_slots[slot_back_str])
overlay_state = back.item_state_slots[slot_back_str]
else if(back.item_state)
overlay_state = back.item_state
else
overlay_state = back.icon_state
//create the image
overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state)
else
overlays_standing[BACK_LAYER] = null
if(update_icons) update_icons()
overlays_standing[BACK_LAYER] = null
if(update_icons)
update_icons()
/mob/living/carbon/human/update_hud() //TODO: do away with this if possible
@@ -787,19 +822,27 @@ var/global/list/damage_icon_parts = list()
if(r_hand)
r_hand.screen_loc = ui_rhand //TODO
var/t_icon = INV_R_HAND_DEF_ICON
if(r_hand.item_icons && (icon_r_hand in r_hand.item_icons))
t_icon = r_hand.item_icons[icon_r_hand]
var/t_state = r_hand.item_state //useful for clothing that changes icon_state but retains the same sprite on the mob when held in hand
if(!t_state) t_state = r_hand.icon_state
//determine icon to use
var/icon/t_icon
if(r_hand.icon_override)
t_state = "[t_state]_r"
overlays_standing[R_HAND_LAYER] = image("icon" = r_hand.icon_override, "icon_state" = "[t_state]")
t_icon = r_hand.icon_override
else if(r_hand.item_icons && (slot_r_hand_str in r_hand.item_icons))
t_icon = r_hand.item_icons[slot_r_hand_str]
else
overlays_standing[R_HAND_LAYER] = image("icon" = t_icon, "icon_state" = "[t_state]")
t_icon = INV_R_HAND_DEF_ICON
if (handcuffed) drop_r_hand()
//determine icon state to use
var/t_state
if(r_hand.item_state_slots && r_hand.item_state_slots[slot_r_hand_str])
t_state = r_hand.item_state_slots[slot_r_hand_str]
else if(r_hand.item_state)
t_state = r_hand.item_state
else
t_state = r_hand.icon_state
overlays_standing[R_HAND_LAYER] = image(icon = t_icon, icon_state = t_state)
if (handcuffed) drop_r_hand() //this should be moved out of icon code
else
overlays_standing[R_HAND_LAYER] = null
@@ -810,19 +853,27 @@ var/global/list/damage_icon_parts = list()
if(l_hand)
l_hand.screen_loc = ui_lhand //TODO
var/t_icon = INV_L_HAND_DEF_ICON
if(l_hand.item_icons && (icon_l_hand in l_hand.item_icons))
t_icon = l_hand.item_icons[icon_l_hand]
var/t_state = l_hand.item_state //useful for clothing that changes icon_state but retains the same sprite on the mob when held in hand
if(!t_state) t_state = l_hand.icon_state
//determine icon to use
var/icon/t_icon
if(l_hand.icon_override)
t_state = "[t_state]_l"
overlays_standing[L_HAND_LAYER] = image("icon" = l_hand.icon_override, "icon_state" = "[t_state]")
t_icon = l_hand.icon_override
else if(l_hand.item_icons && (slot_l_hand_str in l_hand.item_icons))
t_icon = l_hand.item_icons[slot_l_hand_str]
else
overlays_standing[L_HAND_LAYER] = image("icon" = t_icon, "icon_state" = "[t_state]")
t_icon = INV_L_HAND_DEF_ICON
if (handcuffed) drop_l_hand()
//determine icon state to use
var/t_state
if(l_hand.item_state_slots && l_hand.item_state_slots[slot_l_hand_str])
t_state = l_hand.item_state_slots[slot_l_hand_str]
else if(l_hand.item_state)
t_state = l_hand.item_state
else
t_state = l_hand.icon_state
overlays_standing[L_HAND_LAYER] = image(icon = t_icon, icon_state = t_state)
if (handcuffed) drop_l_hand() //This probably should not be here
else
overlays_standing[L_HAND_LAYER] = null
@@ -360,7 +360,7 @@
src.Hatch()
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype( W, /obj/item/toy/crayon ))
if(istype( W, /obj/item/weapon/pen/crayon ))
return
else
..()
+170
View File
@@ -0,0 +1,170 @@
/mob/living/carbon/process_resist()
//drop && roll
if(on_fire)
fire_stacks -= 2 //reduced
Weaken(3)
spin(32,2)
visible_message(
"<span class='danger'>[src] rolls on the floor, trying to put themselves out!</span>",
"<span class='notice'>You stop, drop, and roll!</span>"
)
sleep(30)
if(fire_stacks <= 0)
visible_message(
"<span class='danger'>[src] has successfully extinguished themselves!</span>",
"<span class='notice'>You extinguish yourself.</span>"
)
ExtinguishMob()
return
if(handcuffed)
spawn() escape_handcuffs()
else if(legcuffed)
spawn() escape_legcuffs()
..()
/mob/living/carbon/proc/escape_handcuffs()
if(!(last_special <= world.time)) return
next_move = world.time + 100
last_special = world.time + 100
if(can_break_cuffs()) //Don't want to do a lot of logic gating here.
break_handcuffs()
return
var/obj/item/weapon/handcuffs/HC = handcuffed
//A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type
var/breakouttime = 1200
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
//If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
if(istype(HC))
breakouttime = HC.breakouttime
displaytime = breakouttime / 600 //Minutes
visible_message(
"<span class='danger'>[src] attempts to remove \the [HC]!</span>",
"<span class='warning'>You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)</span>"
)
if(do_after(src, breakouttime))
if(!handcuffed || buckled)
return
visible_message(
"<span class='danger'>[src] manages to remove \the [handcuffed]!</span>",
"<span class='notice'>You successfully remove \the [handcuffed].</span>"
)
drop_from_inventory(handcuffed)
/mob/living/carbon/proc/escape_legcuffs()
if(!(last_special <= world.time)) return
next_move = world.time + 100
last_special = world.time + 100
if(can_break_cuffs()) //Don't want to do a lot of logic gating here.
break_legcuffs()
return
var/obj/item/weapon/legcuffs/HC = legcuffed
//A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
var/breakouttime = 1200
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
//If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
if(istype(HC))
breakouttime = HC.breakouttime
displaytime = breakouttime / 600 //Minutes
visible_message(
"<span class='danger'>[usr] attempts to remove \the [HC]!</span>",
"<span class='warning'>You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)</span>"
)
if(do_after(src, breakouttime))
if(!legcuffed || buckled)
return
visible_message(
"<span class='danger'>[src] manages to remove \the [legcuffed]!</span>",
"<span class='notice'>You successfully remove \the [legcuffed].</span>"
)
drop_from_inventory(legcuffed)
legcuffed = null
update_inv_legcuffed()
/mob/living/carbon/proc/can_break_cuffs()
if(HULK in mutations)
return 1
/mob/living/carbon/proc/break_handcuffs()
visible_message(
"<span class='danger'>[src] is trying to break \the [handcuffed]!</span>",
"<span class='warning'>You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)</span>"
)
if(do_after(src, 50))
if(!handcuffed || buckled)
return
visible_message(
"<span class='danger'>[src] manages to break \the [handcuffed]!</span>",
"<span class='warning'>You successfully break your [handcuffed.name].</span>"
)
say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
del(handcuffed)
handcuffed = null
if(buckled && buckled.buckle_require_restraints)
buckled.unbuckle_mob()
update_inv_handcuffed()
/mob/living/carbon/proc/break_legcuffs()
src << "<span class='warning'>You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)</span>"
visible_message("<span class='danger'>[src] is trying to break the legcuffs!</span>")
if(do_after(src, 50))
if(!legcuffed || buckled)
return
visible_message(
"<span class='danger'>[src] manages to break the legcuffs!</span>",
"<span class='warning'>You successfully break your legcuffs.</span>"
)
say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
del(legcuffed)
legcuffed = null
update_inv_legcuffed()
/mob/living/carbon/human/can_break_cuffs()
if(species.can_shred(src,1))
return 1
return ..()
/mob/living/carbon/escape_buckle()
if(!buckled) return
if(!(last_special <= world.time)) return
if(!restrained())
..()
else
next_move = world.time + 100
last_special = world.time + 100
visible_message(
"<span class='danger'>[usr] attempts to unbuckle themself!</span>",
"<span class='warning'>You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)</span>"
)
if(do_after(usr, 1200))
if(!buckled)
return
visible_message("<span class='danger'>[usr] manages to unbuckle themself!</span>",
"<span class='notice'>You successfully unbuckle yourself.</span>")
buckled.user_unbuckle_mob(src)
+62 -262
View File
@@ -571,284 +571,84 @@ default behaviour is:
set name = "Resist"
set category = "IC"
if(usr.stat || !isliving(usr) || usr.next_move > world.time)
return
if(can_resist())
next_move = world.time + 20
process_resist()
usr.next_move = world.time + 20
var/mob/living/L = usr
/mob/living/proc/can_resist()
//need to allow !canmove, or otherwise neck grabs can't be resisted
//so just check weakened instead.
if(stat || weakened)
return 0
if(next_move > world.time)
return 0
return 1
/mob/living/proc/process_resist()
//Getting out of someone's inventory.
if(istype(src.loc,/obj/item/weapon/holder))
var/obj/item/weapon/holder/H = src.loc //Get our item holder.
var/mob/M = H.loc //Get our mob holder (if any).
if(istype(M))
M.drop_from_inventory(H)
M << "[H] wriggles out of your grip!"
src << "You wriggle out of [M]'s grip!"
else if(istype(H.loc,/obj/item))
src << "You struggle free of [H.loc]."
H.loc = get_turf(H)
if(istype(M))
for(var/atom/A in M.contents)
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
return
M.status_flags &= ~PASSEMOTES
if(istype(src.loc, /obj/item/weapon/holder))
escape_inventory(src.loc)
return
//Resisting control by an alien mind.
if(istype(src.loc,/mob/living/simple_animal/borer))
var/mob/living/simple_animal/borer/B = src.loc
var/mob/living/captive_brain/H = src
H << "<span class='danger'>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</span>"
B.host << "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>"
spawn(rand(200,250)+B.host.brainloss)
if(!B || !B.controlling)
return
B.host.adjustBrainLoss(rand(5,10))
H << "<span class='danger'>With an immense exertion of will, you regain control of your body!</span>"
B.host << "<span class='danger'>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</span>"
B.detatch()
verbs -= /mob/living/carbon/proc/release_control
verbs -= /mob/living/carbon/proc/punish_host
verbs -= /mob/living/carbon/proc/spawn_larvae
return
//resisting grabs (as if it helps anyone...)
if ((!( L.stat ) && !( L.restrained() )))
var/resisting = 0
for(var/obj/O in L.requests)
L.requests.Remove(O)
qdel(O)
resisting++
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
resisting++
switch(G.state)
if(GRAB_PASSIVE)
qdel(G)
if(GRAB_AGGRESSIVE)
if(prob(60)) //same chance of breaking the grab as disarm
L.visible_message("<span class='warning'>[L] has broken free of [G.assailant]'s grip!</span>")
qdel(G)
if(GRAB_NECK)
//If the you move when grabbing someone then it's easier for them to break free. Same if the affected mob is immune to stun.
if (((world.time - G.assailant.l_move_time < 30 || !L.stunned) && prob(15)) || prob(3))
L.visible_message("<span class='warning'>[L] has broken free of [G.assailant]'s headlock!</span>")
qdel(G)
if(resisting)
L.visible_message("<span class='danger'>[L] resists!</span>")
if (!restrained())
resist_grab()
//unbuckling yourself
if(L.buckled && (L.last_special <= world.time) )
if(iscarbon(L))
var/mob/living/carbon/C = L
if( C.handcuffed )
C.next_move = world.time + 100
C.last_special = world.time + 100
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"
for(var/mob/O in viewers(L))
O.show_message("\red <B>[usr] attempts to unbuckle themself!</B>", 1)
spawn(0)
if(do_after(usr, 1200))
if(!C.buckled)
return
for(var/mob/O in viewers(C))
O.show_message("\red <B>[usr] manages to unbuckle themself!</B>", 1)
C << "\blue You successfully unbuckle yourself."
C.buckled.user_unbuckle_mob(C)
else
L.buckled.user_unbuckle_mob(L)
if(buckled)
spawn() escape_buckle()
//Breaking out of a locker?
else if( src.loc && (istype(src.loc, /obj/structure/closet)) )
var/breakout_time = 2 //2 minutes by default
if( src.loc && (istype(src.loc, /obj/structure/closet)) )
var/obj/structure/closet/C = loc
spawn() C.mob_breakout(src)
var/obj/structure/closet/C = L.loc
if(C.opened)
return //Door's open... wait, why are you in it's contents then?
if(istype(L.loc, /obj/structure/closet/secure_closet))
var/obj/structure/closet/secure_closet/SC = L.loc
if(!SC.locked && !SC.welded)
return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist'
else
if(!C.welded)
return //closed but not welded...
// else Meh, lets just keep it at 2 minutes for now
// breakout_time++ //Harder to get out of welded lockers than locked lockers
/mob/living/proc/escape_inventory(obj/item/weapon/holder/H)
if(H != src.loc) return
var/mob/M = H.loc //Get our mob holder (if any).
//okay, so the closet is either welded or locked... resist!!!
usr.next_move = world.time + 100
L.last_special = world.time + 100
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
for(var/mob/O in viewers(usr.loc))
O.show_message("\red <B>The [L.loc] begins to shake violently!</B>", 1)
if(istype(M))
M.drop_from_inventory(H)
M << "<span class='warning'>[H] wriggles out of your grip!</span>"
src << "<span class='warning'>You wriggle out of [M]'s grip!</span>"
else if(istype(H.loc,/obj/item))
src << "<span class='warning'>You struggle free of [H.loc].</span>"
H.loc = get_turf(H)
if(istype(M))
for(var/atom/A in M.contents)
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
return
spawn(0)
if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
return
M.status_flags &= ~PASSEMOTES
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
if(istype(L.loc, /obj/structure/closet/secure_closet))
var/obj/structure/closet/secure_closet/SC = L.loc
if(!SC.locked && !SC.welded)
return
else
if(!C.welded)
return
/mob/living/proc/escape_buckle()
if(buckled)
buckled.user_unbuckle_mob(src)
//Well then break it!
if(istype(usr.loc, /obj/structure/closet/secure_closet))
var/obj/structure/closet/secure_closet/SC = L.loc
SC.desc = "It appears to be broken."
SC.icon_state = SC.icon_off
flick(SC.icon_broken, SC)
sleep(10)
flick(SC.icon_broken, SC)
sleep(10)
SC.broken = 1
SC.locked = 0
SC.update_icon()
usr << "\red You successfully break out!"
for(var/mob/O in viewers(L.loc))
O.show_message("\red <B>\the [usr] successfully broke out of \the [SC]!</B>", 1)
if(istype(SC.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
var/obj/structure/bigDelivery/BD = SC.loc
BD.attack_hand(usr)
SC.open()
else
C.welded = 0
C.update_icon()
usr << "\red You successfully break out!"
for(var/mob/O in viewers(L.loc))
O.show_message("\red <B>\the [usr] successfully broke out of \the [C]!</B>", 1)
if(istype(C.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
var/obj/structure/bigDelivery/BD = C.loc
BD.attack_hand(usr)
C.open()
//drop && roll or breaking out of handcuffs
else if(iscarbon(L))
var/mob/living/carbon/CM = L
if(CM.on_fire && CM.canmove)
CM.fire_stacks -= 5
CM.Weaken(3)
CM.spin(32,2)
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
"<span class='notice'>You stop, drop, and roll!</span>")
sleep(30)
if(fire_stacks <= 0)
CM.visible_message("<span class='danger'>[CM] has successfully extinguished themselves!</span>", \
"<span class='notice'>You extinguish yourself.</span>")
ExtinguishMob()
return
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))
CM.next_move = world.time + 100
CM.last_special = world.time + 100
var/can_break_cuffs
if(HULK in usr.mutations)
can_break_cuffs = 1
else if(istype(CM,/mob/living/carbon/human))
var/mob/living/carbon/human/H = CM
if(H.species.can_shred(H,1))
can_break_cuffs = 1
if(can_break_cuffs) //Don't want to do a lot of logic gating here.
usr << "\red You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)"
for(var/mob/O in viewers(CM))
O.show_message(text("\red <B>[] is trying to break the handcuffs!</B>", CM), 1)
spawn(0)
if(do_after(CM, 50))
if(!CM.handcuffed || CM.buckled)
return
for(var/mob/O in viewers(CM))
O.show_message(text("\red <B>[] manages to break the handcuffs!</B>", CM), 1)
CM << "\red You successfully break your handcuffs."
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
qdel(CM.handcuffed)
CM.handcuffed = null
if(buckled && buckled.buckle_require_restraints)
buckled.unbuckle_mob()
CM.update_inv_handcuffed()
else
var/obj/item/weapon/handcuffs/HC = CM.handcuffed
var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
breakouttime = HC.breakouttime
displaytime = breakouttime / 600 //Minutes
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
for(var/mob/O in viewers(CM))
O.show_message( "\red <B>[usr] attempts to remove \the [HC]!</B>", 1)
spawn(0)
if(do_after(CM, breakouttime))
if(!CM.handcuffed || CM.buckled)
return // time leniency for lag which also might make this whole thing pointless but the server
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
O.show_message("\red <B>[CM] manages to remove the handcuffs!</B>", 1)
CM << "\blue You successfully remove \the [CM.handcuffed]."
CM.drop_from_inventory(CM.handcuffed)
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time))
CM.next_move = world.time + 100
CM.last_special = world.time + 100
var/can_break_cuffs
if(HULK in usr.mutations)
can_break_cuffs = 1
else if(istype(CM,/mob/living/carbon/human))
var/mob/living/carbon/human/H = CM
if(H.species.can_shred(H,1))
can_break_cuffs = 1
if(can_break_cuffs) //Don't want to do a lot of logic gating here.
usr << "\red You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)"
for(var/mob/O in viewers(CM))
O.show_message(text("\red <B>[] is trying to break the legcuffs!</B>", CM), 1)
spawn(0)
if(do_after(CM, 50))
if(!CM.legcuffed || CM.buckled)
return
for(var/mob/O in viewers(CM))
O.show_message(text("\red <B>[] manages to break the legcuffs!</B>", CM), 1)
CM << "\red You successfully break your legcuffs."
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
qdel(CM.legcuffed)
CM.legcuffed = null
CM.update_inv_legcuffed()
else
var/obj/item/weapon/legcuffs/HC = CM.legcuffed
var/breakouttime = 1200 //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
if(istype(HC)) //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to legcuff you with toilet paper in the future...
breakouttime = HC.breakouttime
displaytime = breakouttime / 600 //Minutes
CM << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
for(var/mob/O in viewers(CM))
O.show_message( "\red <B>[usr] attempts to remove \the [HC]!</B>", 1)
spawn(0)
if(do_after(CM, breakouttime))
if(!CM.legcuffed || CM.buckled)
return // time leniency for lag which also might make this whole thing pointless but the server
for(var/mob/O in viewers(CM))// lags so hard that 40s isn't lenient enough - Quarxink
O.show_message("\red <B>[CM] manages to remove the legcuffs!</B>", 1)
CM << "\blue You successfully remove \the [CM.legcuffed]."
CM.drop_from_inventory(CM.legcuffed)
CM.legcuffed = null
CM.update_inv_legcuffed()
/mob/living/proc/resist_grab()
var/resisting = 0
for(var/obj/O in requests)
requests.Remove(O)
qdel(O)
resisting++
for(var/obj/item/weapon/grab/G in grabbed_by)
resisting++
switch(G.state)
if(GRAB_PASSIVE)
qdel(G)
if(GRAB_AGGRESSIVE)
if(prob(60)) //same chance of breaking the grab as disarm
visible_message("<span class='warning'>[src] has broken free of [G.assailant]'s grip!</span>")
qdel(G)
if(GRAB_NECK)
//If the you move when grabbing someone then it's easier for them to break free. Same if the affected mob is immune to stun.
if (((world.time - G.assailant.l_move_time < 30 || !stunned) && prob(15)) || prob(3))
visible_message("<span class='warning'>[src] has broken free of [G.assailant]'s headlock!</span>")
qdel(G)
if(resisting)
visible_message("<span class='danger'>[src] resists!</span>")
/mob/living/verb/lay_down()
set name = "Rest"
@@ -36,27 +36,31 @@ var/global/list/robot_modules = list(
// Bookkeeping
var/list/added_languages = list()
var/list/added_networks = list()
var/obj/item/device/radio/borg/modified_radio = null
var/list/modified_key = null
var/list/original_radio_channels = list()
/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R)
..()
add_camera_networks(R)
add_languages(R)
add_radio_channels(R)
add_subsystems(R)
apply_status_flags(R)
if(R.radio)
R.radio.recalculateChannels()
/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R)
..()
R.module = null
remove_camera_networks(R)
remove_languages(R)
remove_radio_channels(R)
remove_subsystems(R)
remove_status_flags(R)
/obj/item/weapon/robot_module/Destroy()
if(R.radio)
R.radio.recalculateChannels()
qdel(src)
/obj/item/weapon/robot_module/Destroy()
qdel(modules)
qdel(synths)
qdel(emag)
@@ -115,23 +119,6 @@ var/global/list/robot_modules = list(
R.camera.remove_networks(added_networks)
added_networks.Cut()
/obj/item/weapon/robot_module/proc/add_radio_channels(var/mob/living/silicon/robot/R)
if(!R.radio)
return
modified_radio = R.radio
modified_key = R.radio.keyslot
original_radio_channels = modified_radio.channels.Copy()
modified_radio.config(channels)
/obj/item/weapon/robot_module/proc/remove_radio_channels(var/mob/living/silicon/robot/R)
// Only reset if the original radio component hasn't been altered/replaced
if(!(R.radio && R.radio == modified_radio && R.radio.keyslot == modified_key))
return
modified_radio.config(original_radio_channels)
original_radio_channels.Cut()
/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R)
R.verbs |= subsystems
+2 -6
View File
@@ -1,23 +1,19 @@
/mob/living/silicon
var/register_alarms = 1
var/obj/nano_module/alarm_monitor/alarm_monitor
var/obj/nano_module/alarm_monitor/all/alarm_monitor
var/obj/nano_module/atmos_control/atmos_control
var/obj/nano_module/crew_monitor/crew_monitor
var/obj/nano_module/law_manager/law_manager
var/obj/nano_module/power_monitor/power_monitor
var/obj/nano_module/rcon/rcon
var/alarm_monitor_type = /obj/nano_module/alarm_monitor/borg
/mob/living/silicon
alarm_monitor_type = /obj/nano_module/alarm_monitor/borg
var/list/silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_law_manager
)
/mob/living/silicon/ai
alarm_monitor_type = /obj/nano_module/alarm_monitor/ai
silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_atmos_control,
@@ -32,7 +28,7 @@
silicon_subsystems = list(/mob/living/silicon/proc/subsystem_law_manager)
/mob/living/silicon/proc/init_subsystems()
alarm_monitor = new alarm_monitor_type(src)
alarm_monitor = new(src)
atmos_control = new(src)
crew_monitor = new(src)
law_manager = new(src)
@@ -32,4 +32,31 @@
M << "The captive mind of [src] whispers, \"[message]\""
/mob/living/captive_brain/emote(var/message)
return
return
/mob/living/captive_brain/can_resist()
return !(stat || next_move > world.time)
/mob/living/captive_brain/process_resist()
//Resisting control by an alien mind.
if(istype(src.loc,/mob/living/simple_animal/borer))
var/mob/living/simple_animal/borer/B = src.loc
var/mob/living/captive_brain/H = src
H << "<span class='danger'>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</span>"
B.host << "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>"
spawn(rand(200,250)+B.host.brainloss)
if(!B || !B.controlling) return
B.host.adjustBrainLoss(rand(5,10))
H << "<span class='danger'>With an immense exertion of will, you regain control of your body!</span>"
B.host << "<span class='danger'>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</span>"
B.detatch()
verbs -= /mob/living/carbon/proc/release_control
verbs -= /mob/living/carbon/proc/punish_host
verbs -= /mob/living/carbon/proc/spawn_larvae
return
..()
@@ -56,7 +56,10 @@
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
name = "[name] ([rand(1, 1000)])"
if(name == initial(name))
name = "[name] ([rand(1, 1000)])"
real_name = name
if(!body_color)
body_color = pick( list("brown","gray","white") )
icon_state = "mouse_[body_color]"
@@ -112,5 +115,10 @@
name = "Tom"
desc = "Jerry the cat is not amused."
/mob/living/simple_animal/mouse/brown/Tom/New()
..()
// Change my name back, don't want to be named Tom (666)
name = initial(name)
/mob/living/simple_animal/mouse/can_use_vents()
return
return
@@ -183,16 +183,16 @@
step_to(O, get_turf(pick(view(7, src))))
//rods
O = new /obj/item/stack/rods(src.loc)
O = PoolOrNew(/obj/item/stack/rods, src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
O = new /obj/item/stack/rods(src.loc)
O = PoolOrNew(/obj/item/stack/rods, src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
O = new /obj/item/stack/rods(src.loc)
O = PoolOrNew(/obj/item/stack/rods, src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
O = new /obj/item/stack/rods(src.loc)
O = PoolOrNew(/obj/item/stack/rods, src.loc)
step_to(O, get_turf(pick(view(7, src))))
//plasteel
+1 -1
View File
@@ -103,7 +103,7 @@
affecting.loc = assailant.loc
if(state >= GRAB_NECK)
affecting.Stun(1)
affecting.Stun(3)
if(isliving(affecting))
var/mob/living/L = affecting
L.adjustOxyLoss(1)
+61 -2
View File
@@ -82,6 +82,7 @@
/mob/living/silicon/isSilicon()
return 1
/proc/isAI(A)
if(istype(A, /mob/living/silicon/ai))
return 1
@@ -93,10 +94,10 @@
/mob/living/silicon/ai/isAI()
return 1
/mob/proc/isRobot()
/mob/proc/isMobAI()
return 0
/mob/living/silicon/robot/isRobot()
/mob/living/silicon/ai/isMobAI()
return 1
/mob/proc/isSynthetic()
@@ -619,3 +620,61 @@ proc/is_blind(A)
// Returns true if the mob has a client which has been active in the last given X minutes.
/mob/proc/is_client_active(var/active = 1)
return client && client.inactivity < active MINUTES
#define SAFE_PERP -50
/mob/living/proc/assess_perp(var/auth_weapons, var/check_records, var/check_arrest)
if(stat == DEAD)
return SAFE_PERP
return 0
/mob/living/carbon/human/assess_perp(var/obj/access_obj, var/auth_weapons, var/check_records, var/check_arrest)
var/threatcount = ..()
if(. == SAFE_PERP)
return SAFE_PERP
//Agent cards lower threatlevel.
var/obj/item/weapon/card/id/id = GetIdCard(src)
if(id && istype(id, /obj/item/weapon/card/id/syndicate))
threatcount -= 2
// A proper CentCom id is hard currency.
else if(id && istype(id, /obj/item/weapon/card/id/centcom))
return SAFE_PERP
if(auth_weapons && !access_obj.allowed(src))
if(istype(l_hand, /obj/item/weapon/gun) || istype(l_hand, /obj/item/weapon/melee))
threatcount += 4
if(istype(r_hand, /obj/item/weapon/gun) || istype(r_hand, /obj/item/weapon/melee))
threatcount += 4
if(istype(belt, /obj/item/weapon/gun) || istype(belt, /obj/item/weapon/melee))
threatcount += 2
if(species.name != "Human")
threatcount += 2
if(check_records || check_arrest)
var/perpname = name
if(id)
perpname = id.registered_name
var/datum/data/record/R = find_security_record("name", perpname)
if(check_records && !R)
threatcount += 4
if(check_arrest && R && (R.fields["criminal"] == "*Arrest*"))
threatcount += 4
return threatcount
/mob/living/simple_animal/hostile/assess_perp(var/obj/access_obj, var/auth_weapons, var/check_records, var/check_arrest)
var/threatcount = ..()
if(. == SAFE_PERP)
return SAFE_PERP
if(!istype(src, /mob/living/simple_animal/hostile/retaliate/goat))
threatcount += 4
return threatcount
#undef SAFE_PERP
+3
View File
@@ -2,8 +2,11 @@
//Having them here also makes for a nice reference list of the various overlay-updating procs available
//default item on-mob icons
#define INV_BACK_DEF_ICON 'icons/mob/back.dmi'
#define INV_L_HAND_DEF_ICON 'icons/mob/items/lefthand.dmi'
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
#define INV_W_UNIFORM_DEF_ICON 'icons/mob/uniform.dmi'
#define INV_ACCESSORIES_DEF_ICON 'icons/mob/ties.dmi'
/mob/proc/regenerate_icons() //TODO: phase this out completely if possible
+4 -4
View File
@@ -90,15 +90,15 @@
/mob/living/default_can_use_topic(var/src_object)
. = shared_nano_interaction(src_object)
if(. == STATUS_INTERACTIVE)
if(. != STATUS_CLOSE)
if(loc)
. = loc.contents_nano_distance(src_object, src)
. = min(., loc.contents_nano_distance(src_object, src))
if(STATUS_INTERACTIVE)
return STATUS_UPDATE
/mob/living/carbon/human/default_can_use_topic(var/src_object)
. = shared_nano_interaction(src_object)
if(. == STATUS_INTERACTIVE)
. = shared_living_nano_distance(src_object)
if(. != STATUS_CLOSE)
. = min(., shared_living_nano_distance(src_object))
if(. == STATUS_UPDATE && (TK in mutations)) // If we have telekinesis and remain close enough, allow interaction.
return STATUS_INTERACTIVE
+18
View File
@@ -0,0 +1,18 @@
/var/global/datum/topic_state/physical/physical_state = new()
/datum/topic_state/physical/can_use_topic(var/src_object, var/mob/user)
. = user.shared_nano_interaction(src_object)
if(. > STATUS_CLOSE)
return min(., user.check_physical_distance(src_object))
/mob/proc/check_physical_distance(var/src_object)
return STATUS_CLOSE
/mob/dead/observer/check_physical_distance(var/src_object)
return default_can_use_topic(src_object)
/mob/living/check_physical_distance(var/src_object)
return shared_living_nano_distance(src_object)
/mob/living/silicon/check_physical_distance(var/src_object)
return max(STATUS_UPDATE, shared_living_nano_distance(src_object))
+2 -9
View File
@@ -3,14 +3,7 @@
var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. Currently really only for AI-use.
var/list/datum/alarm_handler/alarm_handlers // The particular list of alarm handlers this alarm monitor should present to the user.
/obj/nano_module/alarm_monitor/ai
list_cameras = 1
/obj/nano_module/alarm_monitor/ai/New()
..()
alarm_handlers = alarm_manager.all_handlers
/obj/nano_module/alarm_monitor/borg/New()
/obj/nano_module/alarm_monitor/all/New()
..()
alarm_handlers = alarm_manager.all_handlers
@@ -73,7 +66,7 @@
var/cameras[0]
var/lost_sources[0]
if(list_cameras)
if(user.isMobAI())
for(var/obj/machinery/camera/C in A.cameras())
cameras[++cameras.len] = C.nano_structure()
for(var/datum/alarm_source/AS in A.sources)
+2 -6
View File
@@ -33,9 +33,7 @@
ui.open()
ui.set_auto_update(1)
// Proc: refresh_sensors()
// Parameters: None
// Description: Refreshes list of active sensors kept on this computer.
// Refreshes list of active sensors kept on this computer.
/obj/nano_module/power_monitor/proc/refresh_sensors()
grid_sensors = list()
var/turf/T = get_turf(src)
@@ -46,9 +44,7 @@
else
grid_sensors += S
// Proc: Topic()
// Parameters: 2 (href, href_list - allows us to process UI clicks)
// Description: Allows us to process UI clicks, which are relayed in form of hrefs.
// Allows us to process UI clicks, which are relayed in form of hrefs.
/obj/nano_module/power_monitor/Topic(href, href_list)
if(..())
return
+3 -4
View File
@@ -210,6 +210,7 @@
// sync the organ's damage with its wounds
src.update_damages()
owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called
//If limb took enough damage, try to cut or tear it off
if(owner && loc == owner)
@@ -232,7 +233,6 @@
else
droplimb(0,DROPLIMB_BLUNT)
owner.updatehealth()
return update_icon()
/obj/item/organ/external/proc/heal_damage(brute, burn, internal = 0, robo_repair = 0)
@@ -689,9 +689,9 @@ Note that amputating the affected organ does in fact remove the infection from t
if(src && istype(loc,/turf))
throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
dir = 2
return
if(DROPLIMB_BURN)
new /obj/effect/decal/cleanable/ash(get_turf(victim))
qdel(src)
if(DROPLIMB_BLUNT)
var/obj/effect/decal/cleanable/blood/gibs/gore = new owner.species.single_gib_type(get_turf(victim))
if(victim.species.flesh_color)
@@ -705,8 +705,7 @@ Note that amputating the affected organ does in fact remove the infection from t
I.removed()
if(istype(loc,/turf))
I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
qdel(src)
qdel(src)
/****************************************************
HELPERS
+15 -3
View File
@@ -68,14 +68,14 @@
//The topmost paper. I don't think there's any way to organise contents in byond, so this is what we're stuck with. -Pete
if(toppaper)
var/obj/item/weapon/paper/P = toppaper
dat += "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR><HR>"
dat += "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];rename=\ref[P]'>Rename</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR><HR>"
for(var/obj/item/weapon/paper/P in src)
if(P==toppaper)
continue
dat += "<A href='?src=\ref[src];remove=\ref[P]'>Remove</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
dat += "<A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];rename=\ref[P]'>Rename</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
for(var/obj/item/weapon/photo/Ph in src)
dat += "<A href='?src=\ref[src];remove=\ref[Ph]'>Remove</A> - <A href='?src=\ref[src];look=\ref[Ph]'>[Ph.name]</A><BR>"
dat += "<A href='?src=\ref[src];remove=\ref[Ph]'>Remove</A> <A href='?src=\ref[src];rename=\ref[Ph]'>Rename</A> - <A href='?src=\ref[src];look=\ref[Ph]'>[Ph.name]</A><BR>"
user << browse(dat, "window=clipboard")
onclose(user, "clipboard")
@@ -129,6 +129,18 @@
toppaper = newtop
else
toppaper = null
else if(href_list["rename"])
var/obj/item/weapon/O = locate(href_list["rename"])
if(O && (O.loc == src))
if(istype(O, /obj/item/weapon/paper))
var/obj/item/weapon/paper/to_rename = O
to_rename.rename()
else if(istype(O, /obj/item/weapon/photo))
var/obj/item/weapon/photo/to_rename = O
to_rename.rename()
else if(href_list["read"])
var/obj/item/weapon/paper/P = locate(href_list["read"])
+1 -1
View File
@@ -189,7 +189,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
else if (istype(copyitem, /obj/item/weapon/photo))
rcvdcopy = photocopy(copyitem)
else if (istype(copyitem, /obj/item/weapon/paper_bundle))
rcvdcopy = bundlecopy(copyitem)
rcvdcopy = bundlecopy(copyitem, 0)
else
visible_message("[src] beeps, \"Error transmitting message.\"")
return
+19 -4
View File
@@ -44,11 +44,11 @@
var/dat = "<title>[name]</title>"
for(var/obj/item/weapon/paper/P in src)
dat += "<A href='?src=\ref[src];remove=\ref[P]'>Remove</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
dat += "<A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];rename=\ref[P]'>Rename</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
for(var/obj/item/weapon/photo/Ph in src)
dat += "<A href='?src=\ref[src];remove=\ref[Ph]'>Remove</A> - <A href='?src=\ref[src];look=\ref[Ph]'>[Ph.name]</A><BR>"
dat += "<A href='?src=\ref[src];remove=\ref[Ph]'>Remove</A> <A href='?src=\ref[src];rename=\ref[Ph]'>Rename</A> - <A href='?src=\ref[src];look=\ref[Ph]'>[Ph.name]</A><BR>"
for(var/obj/item/weapon/paper_bundle/Pb in src)
dat += "<A href='?src=\ref[src];remove=\ref[Pb]'>Remove</A> - <A href='?src=\ref[src];browse=\ref[Pb]'>[Pb.name]</A><BR>"
dat += "<A href='?src=\ref[src];remove=\ref[Pb]'>Remove</A> <A href='?src=\ref[src];rename=\ref[Pb]'>Rename</A> - <A href='?src=\ref[src];browse=\ref[Pb]'>[Pb.name]</A><BR>"
user << browse(dat, "window=folder")
onclose(user, "folder")
add_fingerprint(usr)
@@ -85,7 +85,22 @@
if(P && (P.loc == src) && istype(P))
P.attack_self(usr)
onclose(usr, "[P.name]")
else if(href_list["rename"])
var/obj/item/weapon/O = locate(href_list["rename"])
if(O && (O.loc == src))
if(istype(O, /obj/item/weapon/paper))
var/obj/item/weapon/paper/to_rename = O
to_rename.rename()
else if(istype(O, /obj/item/weapon/photo))
var/obj/item/weapon/photo/to_rename = O
to_rename.rename()
else if(istype(O, /obj/item/weapon/paper_bundle))
var/obj/item/weapon/paper_bundle/to_rename = O
to_rename.rename()
//Update everything
attack_self(usr)
update_icon()
+30 -40
View File
@@ -22,6 +22,7 @@
var/info_links //A different version of the paper which includes html links at fields and EOF
var/stamps //The (text for the) stamps on the paper.
var/fields //Amount of user created fields
var/free_space = MAX_PAPER_MESSAGE_LEN
var/list/stamped
var/list/ico[0] //Icons and
var/list/offset_x[0] //offsets stored for later
@@ -51,6 +52,7 @@
spawn(2)
update_icon()
update_space(info)
updateinfolinks()
return
@@ -62,6 +64,12 @@
return
icon_state = "paper"
/obj/item/weapon/paper/proc/update_space(var/new_text)
if(!new_text)
return
free_space -= length(strip_html_properly(new_text))
/obj/item/weapon/paper/examine(mob/user)
..()
if(in_range(user, src) || istype(user, /mob/dead/observer))
@@ -87,11 +95,14 @@
usr << "<span class='warning'>You cut yourself on the paper.</span>"
return
var/n_name = sanitizeSafe(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text, MAX_NAME_LEN)
if((loc == usr && usr.stat == 0))
name = "[(n_name ? text("[n_name]") : initial(name))]"
if(name != "paper")
desc = "This is a paper titled '" + name + "'."
add_fingerprint(usr)
// We check loc one level up, so we can rename in clipboards and such. See also: /obj/item/weapon/photo/rename()
if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0 && n_name)
name = n_name
if(n_name != "paper")
desc = "This is a paper titled '" + name + "'."
add_fingerprint(usr)
return
/obj/item/weapon/paper/attack_self(mob/living/user as mob)
@@ -188,6 +199,7 @@
/obj/item/weapon/paper/proc/clearpaper()
info = null
stamps = null
free_space = MAX_PAPER_MESSAGE_LEN
stamped = list()
overlays.Cut()
updateinfolinks()
@@ -268,31 +280,6 @@
return t
/obj/item/weapon/paper/proc/openhelp(mob/user as mob)
user << browse({"<HTML><HEAD><TITLE>Pen Help</TITLE></HEAD>
<BODY>
<b><center>Crayon&Pen commands</center></b><br>
<br>
\[br\] : Creates a linebreak.<br>
\[center\] - \[/center\] : Centers the text.<br>
\[h1\] - \[/h1\] : Makes the text a first level heading<br>
\[h2\] - \[/h2\] : Makes the text a second level heading<br>
\[h3\] - \[/h3\] : Makes the text a third level heading<br>
\[b\] - \[/b\] : Makes the text <b>bold</b>.<br>
\[i\] - \[/i\] : Makes the text <i>italic</i>.<br>
\[u\] - \[/u\] : Makes the text <u>underlined</u>.<br>
\[large\] - \[/large\] : Increases the <font size = \"4\">size</font> of the text.<br>
\[sign\] : Inserts a signature of your name in a foolproof way.<br>
\[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.<br>
<br>
<b><center>Pen exclusive commands</center></b><br>
\[small\] - \[/small\] : Decreases the <font size = \"1\">size</font> of the text.<br>
\[list\] - \[/list\] : A list.<br>
\[*\] : A dot used for lists.<br>
\[hr\] : Adds a horizontal rule.
</BODY></HTML>"}, "window=paper_help")
/obj/item/weapon/paper/proc/burnpaper(obj/item/weapon/flame/P, mob/user)
var/class = "<span class='warning'>"
@@ -327,12 +314,11 @@
var/id = href_list["write"]
//var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as message
var/textlimit = MAX_PAPER_MESSAGE_LEN - length(info)
if(textlimit <= 0)
if(free_space <= 0)
usr << "<span class='info'>There isn't enough space left on \the [src] to write anything.</span>"
return
var/t = sanitize(input("Enter what you want to write:", "Write", null, null) as message, textlimit, extra = 0)
var/t = sanitize(input("Enter what you want to write:", "Write", null, null) as message, free_space, extra = 0)
if(!t)
return
@@ -340,8 +326,8 @@
var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/iscrayon = 0
if(!istype(i, /obj/item/weapon/pen))
if(!istype(i, /obj/item/toy/crayon))
return
return
if(istype(i, /obj/item/weapon/pen/crayon))
iscrayon = 1
@@ -378,6 +364,8 @@
info += t // Oh, he wants to edit to the end of the file, let him.
updateinfolinks()
update_space(t)
usr << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[info_links][stamps]</BODY></HTML>", "window=[name]") // Update the window
update_icon()
@@ -437,15 +425,17 @@
user << "<span class='notice'>You clip the [P.name] to [(src.name == "paper") ? "the paper" : src.name].</span>"
src.loc = B
P.loc = B
B.amount++
B.pages.Add(src)
B.pages.Add(P)
B.update_icon()
else if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
if ( istype(P, /obj/item/weapon/pen/robopen) && P:mode == 2 )
P:RenamePaper(user,src)
else if(istype(P, /obj/item/weapon/pen))
var/obj/item/weapon/pen/robopen/RP = P
if ( istype(RP) && RP.mode == 2 )
RP.RenamePaper(user,src)
else
user << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[info_links][stamps]</BODY></HTML>", "window=[name]")
//openhelp(user)
return
else if(istype(P, /obj/item/weapon/stamp))
+77 -80
View File
@@ -11,66 +11,63 @@
layer = 4
pressure_resistance = 1
attack_verb = list("bapped")
var/amount = 0 //Amount of items clipped to the paper
var/page = 1
var/screen = 0
var/page = 1 // current page
var/list/pages = list() // Ordered list of pages as they are to be displayed. Can be different order than src.contents.
/obj/item/weapon/paper_bundle/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
var/obj/item/weapon/paper/P
if(istype(W, /obj/item/weapon/paper))
P = W
if (istype(P, /obj/item/weapon/paper/carbon))
var/obj/item/weapon/paper/carbon/C = P
if (!C.iscopy && !C.copied)
user << "<span class='notice'>Take off the carbon copy first.</span>"
add_fingerprint(user)
return
amount++
if(screen == 2)
screen = 1
user << "<span class='notice'>You add [(P.name == "paper") ? "the paper" : P.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].</span>"
user.drop_from_inventory(P)
P.loc = src
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
else if(istype(W, /obj/item/weapon/photo))
amount++
if(screen == 2)
screen = 1
user << "<span class='notice'>You add [(W.name == "photo") ? "the photo" : W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].</span>"
user.drop_from_inventory(W)
W.loc = src
if (istype(W, /obj/item/weapon/paper/carbon))
var/obj/item/weapon/paper/carbon/C = W
if (!C.iscopy && !C.copied)
user << "<span class='notice'>Take off the carbon copy first.</span>"
add_fingerprint(user)
return
// adding sheets
if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo))
insert_sheet_at(user, pages.len+1, W)
// burning
else if(istype(W, /obj/item/weapon/flame))
burnpaper(W, user)
// merging bundles
else if(istype(W, /obj/item/weapon/paper_bundle))
user.drop_from_inventory(W)
for(var/obj/O in W)
O.loc = src
O.add_fingerprint(usr)
src.amount++
if(screen == 2)
screen = 1
pages.Add(O)
user << "<span class='notice'>You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].</span>"
qdel(W)
else
if(istype(W, /obj/item/weapon/tape_roll))
return 0
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/toy/crayon))
if(istype(W, /obj/item/weapon/pen))
usr << browse("", "window=[name]") //Closes the dialog
P = src[page]
var/obj/P = pages[page]
P.attackby(W, user)
update_icon()
attack_self(usr) //Update the browsed page.
add_fingerprint(usr)
return
/obj/item/weapon/paper_bundle/proc/insert_sheet_at(mob/user, var/index, obj/item/weapon/sheet)
if(istype(sheet, /obj/item/weapon/paper))
user << "<span class='notice'>You add [(sheet.name == "paper") ? "the paper" : sheet.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].</span>"
else if(istype(sheet, /obj/item/weapon/photo))
user << "<span class='notice'>You add [(sheet.name == "photo") ? "the photo" : sheet.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].</span>"
user.drop_from_inventory(sheet)
sheet.loc = src
pages.Insert(index, sheet)
if(index <= page)
page++
/obj/item/weapon/paper_bundle/proc/burnpaper(obj/item/weapon/flame/P, mob/user)
var/class = "<span class='warning'>"
@@ -105,28 +102,32 @@
/obj/item/weapon/paper_bundle/proc/show_content(mob/user as mob)
var/dat
var/obj/item/weapon/W = src[page]
switch(screen)
if(0)
dat+= "<DIV STYLE='float:left; text-align:left; width:33.33333%'></DIV>"
dat+= "<DIV STYLE='float:left; text-align:center; width:33.33333%'><A href='?src=\ref[src];remove=1'>Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:right; width:33.33333%'><A href='?src=\ref[src];next_page=1'>Next Page</A></DIV><BR><HR>"
if(1)
dat+= "<DIV STYLE='float:left; text-align:left; width:33.33333%'><A href='?src=\ref[src];prev_page=1'>Previous Page</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:center; width:33.33333%'><A href='?src=\ref[src];remove=1'>Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:right; width:33.33333%'><A href='?src=\ref[src];next_page=1'>Next Page</A></DIV><BR><HR>"
if(2)
dat+= "<DIV STYLE='float:left; text-align:left; width:33.33333%'><A href='?src=\ref[src];prev_page=1'>Previous Page</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:center; width:33.33333%'><A href='?src=\ref[src];remove=1'>Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]</A></DIV><BR><HR>"
dat+= "<DIV STYLE='float;left; text-align:right; with:33.33333%'></DIV>"
if(istype(src[page], /obj/item/weapon/paper))
var/obj/item/weapon/W = pages[page]
// first
if(page == 1)
dat+= "<DIV STYLE='float:left; text-align:left; width:33.33333%'><A href='?src=\ref[src];prev_page=1'>Front</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:center; width:33.33333%'><A href='?src=\ref[src];remove=1'>Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:right; width:33.33333%'><A href='?src=\ref[src];next_page=1'>Next Page</A></DIV><BR><HR>"
// last
else if(page == pages.len)
dat+= "<DIV STYLE='float:left; text-align:left; width:33.33333%'><A href='?src=\ref[src];prev_page=1'>Previous Page</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:center; width:33.33333%'><A href='?src=\ref[src];remove=1'>Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]</A></DIV>"
dat+= "<DIV STYLE='float;left; text-align:right; with:33.33333%'><A href='?src=\ref[src];next_page=1'>Back</A></DIV><BR><HR>"
// middle pages
else
dat+= "<DIV STYLE='float:left; text-align:left; width:33.33333%'><A href='?src=\ref[src];prev_page=1'>Previous Page</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:center; width:33.33333%'><A href='?src=\ref[src];remove=1'>Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]</A></DIV>"
dat+= "<DIV STYLE='float:left; text-align:right; width:33.33333%'><A href='?src=\ref[src];next_page=1'>Next Page</A></DIV><BR><HR>"
if(istype(pages[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = W
if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
dat+= "<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY>[stars(P.info)][P.stamps]</BODY></HTML>"
else
dat+= "<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY>[P.info][P.stamps]</BODY></HTML>"
user << browse(dat, "window=[name]")
else if(istype(src[page], /obj/item/weapon/photo))
else if(istype(pages[page], /obj/item/weapon/photo))
var/obj/item/weapon/photo/P = W
user << browse_rsc(P.img, "tmp_photo.png")
user << browse(dat + "<html><head><title>[P.name]</title></head>" \
@@ -145,55 +146,51 @@
..()
if((src in usr.contents) || (istype(src.loc, /obj/item/weapon/folder) && (src.loc in usr.contents)))
usr.set_machine(src)
var/obj/item/weapon/in_hand = usr.get_active_hand()
if(href_list["next_page"])
if(page == amount)
screen = 2
else if(page == 1)
screen = 1
else if(page == amount+1)
return
page++
playsound(src.loc, "pageturn", 50, 1)
if(in_hand && (istype(in_hand, /obj/item/weapon/paper) || istype(in_hand, /obj/item/weapon/photo)))
insert_sheet_at(usr, page+1, in_hand)
else if(page != pages.len)
page++
playsound(src.loc, "pageturn", 50, 1)
if(href_list["prev_page"])
if(page == 1)
return
else if(page == 2)
screen = 0
else if(page == amount+1)
screen = 1
page--
playsound(src.loc, "pageturn", 50, 1)
if(in_hand && (istype(in_hand, /obj/item/weapon/paper) || istype(in_hand, /obj/item/weapon/photo)))
insert_sheet_at(usr, page, in_hand)
else if(page > 1)
page--
playsound(src.loc, "pageturn", 50, 1)
if(href_list["remove"])
var/obj/item/weapon/W = src[page]
var/obj/item/weapon/W = pages[page]
usr.put_in_hands(W)
pages.Remove(pages[page])
usr << "<span class='notice'>You remove the [W.name] from the bundle.</span>"
if(amount == 1)
if(pages.len <= 1)
var/obj/item/weapon/paper/P = src[1]
usr.drop_from_inventory(src)
usr.put_in_hands(P)
qdel(src)
else if(page == amount)
screen = 2
else if(page == amount+1)
page--
amount--
return
if(page > pages.len)
page = pages.len
update_icon()
else
usr << "<span class='notice'>You need to hold it in hands!</span>"
if (istype(src.loc, /mob) ||istype(src.loc.loc, /mob))
src.attack_self(src.loc)
src.attack_self(usr)
updateUsrDialog()
/obj/item/weapon/paper_bundle/verb/rename()
set name = "Rename bundle"
set category = "Object"
set src in usr
var/n_name = sanitizeSafe(input(usr, "What would you like to label the bundle?", "Bundle Labelling", null) as text, MAX_NAME_LEN)
if((loc == usr && usr.stat == 0))
if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0)
name = "[(n_name ? text("[n_name]") : "paper")]"
add_fingerprint(usr)
return
@@ -215,7 +212,7 @@
/obj/item/weapon/paper_bundle/update_icon()
var/obj/item/weapon/paper/P = src[1]
var/obj/item/weapon/paper/P = pages[1]
icon_state = P.icon_state
overlays = P.overlays
underlays = 0
+25
View File
@@ -167,3 +167,28 @@
colour = COLOR_BLACK
usr << "<span class='info'>You select the [lowertext(selected_type)] ink container.</span>"
/*
* Crayons
*/
/obj/item/weapon/pen/crayon
name = "crayon"
desc = "A colourful crayon. Please refrain from eating it or putting it in your nose."
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonred"
w_class = 1.0
attack_verb = list("attacked", "coloured")
colour = "#FF0000" //RGB
var/shadeColour = "#220000" //RGB
var/uses = 30 //0 for unlimited uses
var/instant = 0
var/colourName = "red" //for updateIcon purposes
suicide_act(mob/user)
viewers(user) << "\red <b>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</b>"
return (BRUTELOSS|OXYLOSS)
New()
name = "[colourName] crayon"
..()
+4 -4
View File
@@ -56,7 +56,7 @@
sleep(15)
else if (istype(copyitem, /obj/item/weapon/paper_bundle))
var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem)
sleep(15*B.amount)
sleep(15*B.pages.len)
else
usr << "<span class='warning'>\The [copyitem] can't be copied by \the [src].</span>"
break
@@ -216,7 +216,7 @@
//If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner
/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/weapon/paper_bundle/bundle, var/need_toner=1)
var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src)
for(var/obj/item/weapon/W in bundle)
for(var/obj/item/weapon/W in bundle.pages)
if(toner <= 0 && need_toner)
toner = 0
visible_message("<span class='notice'>A red light on \the [src] flashes, indicating that it is out of toner.</span>")
@@ -227,8 +227,8 @@
else if(istype(W, /obj/item/weapon/photo))
W = photocopy(W)
W.loc = p
p.amount++
//p.amount--
p.pages += W
p.loc = src.loc
p.update_icon()
p.icon_state = "paper_words"
+1 -1
View File
@@ -42,7 +42,7 @@ var/global/photo_count = 0
user.examinate(src)
/obj/item/weapon/photo/attackby(obj/item/weapon/P as obj, mob/user as mob)
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
if(istype(P, /obj/item/weapon/pen))
var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text, 128)
if(loc == user && user.stat == 0)
scribble = txt
-12
View File
@@ -9,59 +9,48 @@
throw_speed = 7
throw_range = 15
matter = list("metal" = 60)
item_color = "cargo"
pressure_resistance = 2
attack_verb = list("stamped")
/obj/item/weapon/stamp/captain
name = "captain's rubber stamp"
icon_state = "stamp-cap"
item_color = "captain"
/obj/item/weapon/stamp/hop
name = "head of personnel's rubber stamp"
icon_state = "stamp-hop"
item_color = "hop"
/obj/item/weapon/stamp/hos
name = "head of security's rubber stamp"
icon_state = "stamp-hos"
item_color = "hosred"
/obj/item/weapon/stamp/ce
name = "chief engineer's rubber stamp"
icon_state = "stamp-ce"
item_color = "chief"
/obj/item/weapon/stamp/rd
name = "research director's rubber stamp"
icon_state = "stamp-rd"
item_color = "director"
/obj/item/weapon/stamp/cmo
name = "chief medical officer's rubber stamp"
icon_state = "stamp-cmo"
item_color = "cmo"
/obj/item/weapon/stamp/denied
name = "\improper DENIED rubber stamp"
icon_state = "stamp-deny"
item_color = "redcoat"
/obj/item/weapon/stamp/clown
name = "clown's rubber stamp"
icon_state = "stamp-clown"
item_color = "clown"
/obj/item/weapon/stamp/internalaffairs
name = "internal affairs rubber stamp"
icon_state = "stamp-intaff"
item_color = "intaff"
/obj/item/weapon/stamp/centcomm
name = "centcomm rubber stamp"
icon_state = "stamp-cent"
item_color = "centcomm"
// Syndicate stamp to forge documents.
/obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob)
@@ -85,4 +74,3 @@
if(chosen_stamp)
name = chosen_stamp.name
icon_state = chosen_stamp.icon_state
item_color = chosen_stamp.item_color
+20 -8
View File
@@ -11,6 +11,7 @@
icon_state = "gsmes"
var/cells_amount = 0
var/capacitors_amount = 0
var/global/list/br_cache = null
/obj/machinery/power/smes/batteryrack/New()
..()
@@ -48,15 +49,26 @@
/obj/machinery/power/smes/batteryrack/update_icon()
overlays.Cut()
if(stat & BROKEN) return
if(!br_cache)
br_cache = list()
br_cache.len = 7
br_cache[1] = image('icons/obj/power.dmi', "gsmes_outputting")
br_cache[2] = image('icons/obj/power.dmi', "gsmes_charging")
br_cache[3] = image('icons/obj/power.dmi', "gsmes_overcharge")
br_cache[4] = image('icons/obj/power.dmi', "gsmes_og1")
br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2")
br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3")
br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4")
if (output_attempt)
overlays += image('icons/obj/power.dmi', "gsmes_outputting")
overlays += br_cache[1]
if(inputting)
overlays += image('icons/obj/power.dmi', "gsmes_charging")
overlays += br_cache[2]
var/clevel = chargedisplay()
if(clevel>0)
overlays += image('icons/obj/power.dmi', "gsmes_og[clevel]")
overlays += br_cache[3+clevel]
return
@@ -124,15 +136,15 @@
if(stat & BROKEN) return
if (output_attempt)
overlays += image('icons/obj/power.dmi', "gsmes_outputting")
overlays += br_cache[1]
if(inputting)
overlays += image('icons/obj/power.dmi', "gsmes_charging")
overlays += br_cache[2]
if (overcharge_percent > 100)
overlays += image('icons/obj/power.dmi', "gsmes_overcharge")
overlays += br_cache[3]
else
var/clevel = chargedisplay()
if(clevel>0)
overlays += image('icons/obj/power.dmi', "gsmes_og[clevel]")
overlays += br_cache[3+clevel]
return
//This mess of if-elses and magic numbers handles what happens if the engies don't pay attention and let it eat too much charge
-1
View File
@@ -470,7 +470,6 @@ obj/structure/cable/proc/cableColor(var/colorC)
amount = MAXCOIL
max_amount = MAXCOIL
color = COLOR_RED
//item_color = COLOR_RED Use regular "color" var instead. No need to have it duplicate in two vars. Causes confusion.
desc = "A coil of power cable."
throwforce = 10
w_class = 2.0
+6 -4
View File
@@ -9,7 +9,7 @@
#define LIGHT_BROKEN 2
#define LIGHT_BURNED 3
#define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb
/obj/item/light_fixture_frame
name = "light fixture frame"
@@ -487,11 +487,13 @@
var/mob/living/carbon/human/H = user
if(istype(H))
if(H.gloves)
if(H.species.heat_level_1 > LIGHT_BULB_TEMPERATURE)
prot = 1
else if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
if(G.max_heat_protection_temperature)
prot = (G.max_heat_protection_temperature > 360)
if(G.max_heat_protection_temperature > LIGHT_BULB_TEMPERATURE)
prot = 1
else
prot = 1
@@ -1,7 +1,4 @@
// POWERNET SENSOR MONITORING CONSOLE
//
// Last Change 31.12.2014 by Atlantis
//
// Connects to powernet sensors and loads data from them. Shows this data to the user.
// Newly supports NanoUI.
@@ -22,18 +19,14 @@
active_power_usage = 300
var/obj/nano_module/power_monitor/power_monitor
// Proc: process()
// Parameters: None
// Description: Checks the sensors for alerts. If change (alerts cleared or detected) occurs, calls for icon update.
// Checks the sensors for alerts. If change (alerts cleared or detected) occurs, calls for icon update.
/obj/machinery/computer/power_monitor/process()
var/alert = check_warnings()
if(alert != alerting)
alerting = !alerting
update_icon()
// Proc: update_icon()
// Parameters: None
// Description: Updates icon of this computer according to current status.
// Updates icon of this computer according to current status.
/obj/machinery/computer/power_monitor/update_icon()
if(stat & BROKEN)
icon_state = "powerb"
@@ -46,17 +39,12 @@
return
icon_state = "power"
// Proc: New()
// Parameters: None
// Description: On creation automatically connects to active sensors. This is delayed to ensure sensors already exist.
// On creation automatically connects to active sensors. This is delayed to ensure sensors already exist.
/obj/machinery/computer/power_monitor/New()
..()
spawn(50)
power_monitor = new(src)
power_monitor = new(src)
// Proc: attack_hand()
// Parameters: None
// Description: On user click opens the UI of this computer.
// On user click opens the UI of this computer.
/obj/machinery/computer/power_monitor/attack_hand(mob/user)
add_fingerprint(user)
@@ -64,16 +52,12 @@
return
ui_interact(user)
// Proc: ui_interact()
// Parameters: 4 (standard NanoUI parameters)
// Description: Uses dark magic to operate the NanoUI of this computer.
// Uses dark magic to operate the NanoUI of this computer.
/obj/machinery/computer/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
power_monitor.ui_interact(user, ui_key, ui, force_open)
// Proc: check_warnings()
// Parameters: None
// Description: Verifies if any warnings were registered by connected sensors.
// Verifies if any warnings were registered by connected sensors.
/obj/machinery/computer/power_monitor/proc/check_warnings()
for(var/obj/machinery/power/sensor/S in power_monitor.grid_sensors)
if(S.check_grid_warning())
+1 -6
View File
@@ -308,12 +308,6 @@ var/list/solars_list = list()
/obj/machinery/power/solar_control/drain_power()
return -1
/obj/machinery/power/solar_control/New()
..()
if(ticker)
initialize()
connect_to_network()
/obj/machinery/power/solar_control/Destroy()
for(var/obj/machinery/power/solar/M in connected_panels)
M.unset_control()
@@ -368,6 +362,7 @@ var/list/solars_list = list()
..()
if(!powernet) return
set_panels(cdir)
connect_to_network()
/obj/machinery/power/solar_control/update_icon()
if(stat & BROKEN)
+171 -63
View File
@@ -1,11 +1,41 @@
/*
Defines a firing mode for a gun.
burst number of shots fired when the gun is used
burst_delay tick delay between shots in a burst
fire_delay tick delay after the last shot before the gun may be used again
move_delay tick delay after the last shot before the player may move
dispersion dispersion of each shot in the burst measured in tiles per 7 tiles angle ratio
accuracy accuracy modifier applied to each shot in tiles.
applied on top of the base weapon accuracy.
*/
/datum/firemode
var/name = "default"
var/burst = 1
var/burst_delay = null
var/fire_delay = null
var/move_delay = 1
var/list/accuracy = list(0)
var/list/dispersion = list(0)
//using a list makes defining fire modes for new guns much nicer,
//however we convert the lists to datums in part so that firemodes can be VVed if necessary.
/datum/firemode/New(list/properties = null)
..()
if(!properties) return
for(var/propname in vars)
if(!isnull(properties[propname]))
src.vars[propname] = properties[propname]
//Parent gun type. Guns are weapons that can be aimed at mobs and act over a distance
/obj/item/weapon/gun
name = "gun"
desc = "Its a gun. It's pretty terrible, though."
icon = 'icons/obj/gun.dmi'
item_icons = list(
icon_l_hand = 'icons/mob/items/lefthand_guns.dmi',
icon_r_hand = 'icons/mob/items/righthand_guns.dmi',
slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi',
)
icon_state = "detective"
item_state = "gun"
@@ -21,16 +51,22 @@
attack_verb = list("struck", "hit", "bashed")
zoomdevicename = "scope"
var/fire_delay = 6
var/fire_delay = 6 //delay after shooting before the gun can be used again
var/burst_delay = 2 //delay between shots, if firing in bursts
var/fire_sound = 'sound/weapons/Gunshot.ogg'
var/fire_sound_text = "gunshot"
var/recoil = 0 //screen shake
var/silenced = 0
var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment.
var/muzzle_flash = 3
var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment.
var/scoped_accuracy = null
var/last_fired = 0
var/next_fire_time = 0
var/sel_mode = 1 //index of the currently selected mode
var/list/firemodes = list()
var/firemode_type = /datum/firemode //for subtypes that need custom firemode data
//aiming system stuff
var/keep_aim = 1 //1 for keep shooting until aim is lowered
//0 for one bullet after tarrget moves and aim is lowered
@@ -42,17 +78,15 @@
/obj/item/weapon/gun/New()
..()
if(!firemodes.len)
firemodes += new firemode_type
else
for(var/i in 1 to firemodes.len)
firemodes[i] = new firemode_type(firemodes[i])
if(isnull(scoped_accuracy))
scoped_accuracy = accuracy
//Returns 1 if the gun is able to be fired
/obj/item/weapon/gun/proc/ready_to_fire()
if(world.time >= last_fired + fire_delay)
last_fired = world.time
return 1
else
return 0
//Checks whether a given mob can use the gun
//Any checks that shouldn't result in handle_click_empty() being called if they fail should go here.
//Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there.
@@ -61,9 +95,9 @@
return 0
if(!user.IsAdvancedToolUser())
return 0
var/mob/living/M = user
if(HULK in M.mutations)
M << "<span class='danger'>Your fingers are much too large for the trigger guard!</span>"
return 0
@@ -73,7 +107,7 @@
if(process_projectile(P, user, user, pick("l_foot", "r_foot")))
handle_post_fire(user, user)
user.visible_message(
"<span class='danger'>[user] shoots \himself in the foot with \the [src]!</span>",
"<span class='danger'>[user] shoots \himself in the foot with \the [src]!</span>",
"<span class='danger'>You shoot yourself in the foot with \the [src]!</span>"
)
M.drop_item()
@@ -114,7 +148,7 @@
else
return ..() //Pistolwhippin'
/obj/item/weapon/gun/proc/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0)
/obj/item/weapon/gun/proc/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0)
if(!user || !target) return
add_fingerprint(user)
@@ -122,24 +156,55 @@
if(!special_check(user))
return
if (!ready_to_fire())
if(world.time < next_fire_time)
if (world.time % 3) //to prevent spam
user << "<span class='warning'>[src] is not ready to fire again!"
user << "<span class='warning'>[src] is not ready to fire again!</span>"
return
var/obj/projectile = consume_next_projectile(user)
if(!projectile)
handle_click_empty(user)
return
//unpack firemode data
var/datum/firemode/firemode = firemodes[sel_mode]
var/_burst = firemode.burst
var/_burst_delay = isnull(firemode.burst_delay)? src.burst_delay : firemode.burst_delay
var/_fire_delay = isnull(firemode.fire_delay)? src.fire_delay : firemode.fire_delay
var/_move_delay = firemode.move_delay
var/shoot_time = (_burst - 1)*_burst_delay
user.next_move = world.time + shoot_time //no clicking on things while shooting
if(user.client) user.client.move_delay = world.time + shoot_time //no moving while shooting either
next_fire_time = world.time + shoot_time
//actually attempt to shoot
var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed.
for(var/i in 1 to _burst)
var/obj/projectile = consume_next_projectile(user)
if(!projectile)
handle_click_empty(user)
break
var/acc = firemode.accuracy[min(i, firemode.accuracy.len)]
var/disp = firemode.dispersion[min(i, firemode.dispersion.len)]
process_accuracy(projectile, user, target, acc, disp)
if(pointblank)
process_point_blank(projectile, user, target)
if(process_projectile(projectile, user, target, user.zone_sel.selecting, clickparams))
handle_post_fire(user, target, pointblank, reflex)
update_icon()
if(i < _burst)
sleep(_burst_delay)
if(!(target && target.loc))
target = targloc
pointblank = 0
update_held_icon()
//update timing
user.next_move = world.time + 4
if(process_projectile(projectile, user, target, user.zone_sel.selecting, params, pointblank, reflex))
handle_post_fire(user, target, pointblank, reflex)
update_icon()
update_held_icon()
if(user.client) user.client.move_delay = world.time + _move_delay
next_fire_time = world.time + _fire_delay
//obtains the next projectile to fire
/obj/item/weapon/gun/proc/consume_next_projectile()
@@ -149,7 +214,7 @@
/obj/item/weapon/gun/proc/can_hit(atom/target as mob, var/mob/living/user as mob)
if(!special_check(user))
return 2
//just assume we can shoot through glass and stuff. No big deal, the player can just choose to not target someone
//just assume we can shoot through glass and stuff. No big deal, the player can just choose to not target someone
//on the other side of a window if it makes a difference. Or if they run behind a window, too bad.
return check_trajectory(target, user)
@@ -167,7 +232,7 @@
playsound(user, fire_sound, 10, 1)
else
playsound(user, fire_sound, 50, 1)
if(reflex)
user.visible_message(
"<span class='reflex_shoot'><b>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""] by reflex!<b></span>",
@@ -180,19 +245,65 @@
"<span class='warning'>You fire \the [src]!</span>",
"You hear a [fire_sound_text]!"
)
if(muzzle_flash)
var/turf/T_user = get_turf(user)
var/turf/T_target = get_turf(target)
var/obj/effect/effect/smoke/illumination/I = new /obj/effect/effect/smoke/illumination(get_step(T_user, get_dir(T_user,T_target)), brightness=muzzle_flash, lifetime=8)
I.alpha = 0
if(recoil)
spawn()
shake_camera(user, recoil+1, recoil)
update_icon()
//does the actual shooting
/obj/item/weapon/gun/proc/process_projectile(obj/projectile, mob/user, atom/target, var/target_zone, var/params=null, var/pointblank=0, var/reflex=0)
if(!istype(projectile, /obj/item/projectile))
return 0 //default behaviour only applies to true projectiles
/obj/item/weapon/gun/proc/process_point_blank(obj/projectile, mob/user, atom/target)
var/obj/item/projectile/P = projectile
if(!istype(P))
return //default behaviour only applies to true projectiles
//default point blank multiplier
var/damage_mult = 1.3
//determine multiplier due to the target being grabbed
if(ismob(target))
var/mob/M = target
if(M.grabbed_by.len)
var/grabstate = 0
for(var/obj/item/weapon/grab/G in M.grabbed_by)
grabstate = max(grabstate, G.state)
if(grabstate >= GRAB_NECK)
damage_mult = 3.0
else if(grabstate >= GRAB_AGGRESSIVE)
damage_mult = 1.5
P.damage *= damage_mult
/obj/item/weapon/gun/proc/process_accuracy(obj/projectile, mob/user, atom/target, acc_mod, dispersion)
var/obj/item/projectile/P = projectile
if(!istype(P))
return //default behaviour only applies to true projectiles
//Accuracy modifiers
P.accuracy = accuracy + acc_mod
P.dispersion = dispersion
//accuracy bonus from aiming
if (aim_targets && (target in aim_targets))
//If you aim at someone beforehead, it'll hit more often.
//Kinda balanced by fact you need like 2 seconds to aim
//As opposed to no-delay pew pew
P.accuracy += 2
//does the actual launching of the projectile
/obj/item/weapon/gun/proc/process_projectile(obj/projectile, mob/user, atom/target, var/target_zone, var/params=null)
var/obj/item/projectile/P = projectile
if(!istype(P))
return 0 //default behaviour only applies to true projectiles
if(params)
P.set_clickpoint(params)
//shooting while in shock
var/x_offset = 0
var/y_offset = 0
@@ -205,27 +316,6 @@
y_offset = rand(-1,1)
x_offset = rand(-1,1)
//Point blank bonus
if(pointblank)
var/damage_mult = 1.3 //default point blank multiplier
//determine multiplier due to the target being grabbed
if(ismob(target))
var/mob/M = target
if(M.grabbed_by.len)
var/grabstate = 0
for(var/obj/item/weapon/grab/G in M.grabbed_by)
grabstate = max(grabstate, G.state)
if(grabstate >= GRAB_NECK)
damage_mult = 3.0
else if (grabstate >= GRAB_AGGRESSIVE)
damage_mult = 1.5
P.damage *= damage_mult
if(params)
P.set_clickpoint(params)
return !P.launch(target, user, src, target_zone, x_offset, y_offset)
//Suicide handling.
@@ -234,7 +324,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/M = user
mouthshoot = 1
M.visible_message("\red [user] sticks their gun in their mouth, ready to pull the trigger...")
if(!do_after(user, 40))
@@ -274,7 +364,7 @@
var/zoom_offset = round(world.view * zoom_amount)
var/view_size = round(world.view + zoom_amount)
var/scoped_accuracy_mod = zoom_offset
zoom(zoom_offset, view_size)
if(zoom)
accuracy = scoped_accuracy + scoped_accuracy_mod
@@ -287,3 +377,21 @@
if(!zoom)
accuracy = initial(accuracy)
recoil = initial(recoil)
/obj/item/weapon/gun/examine(mob/user)
..()
if(firemodes.len > 1)
var/datum/firemode/current_mode = firemodes[sel_mode]
user << "The fire selector is set to [current_mode.name]."
/obj/item/weapon/gun/proc/switch_firemodes(mob/user=null)
sel_mode++
if(sel_mode > firemodes.len)
sel_mode = 1
var/datum/firemode/new_mode = firemodes[sel_mode]
user << "<span class='notice'>\The [src] is now set to [new_mode.name].</span>"
/obj/item/weapon/gun/attack_self(mob/user)
if(firemodes.len > 1)
switch_firemodes(user)
+31 -6
View File
@@ -1,9 +1,16 @@
/datum/firemode/energy
var/projectile_type = null
var/modifystate = null
var/charge_cost = null
var/fire_sound = null
/obj/item/weapon/gun/energy
name = "energy gun"
desc = "A basic energy-based gun."
icon_state = "energy"
fire_sound = 'sound/weapons/Taser.ogg'
fire_sound_text = "laser blast"
firemode_type = /datum/firemode/energy
var/obj/item/weapon/cell/power_supply //What type of power cell this uses
var/charge_cost = 100 //How much energy is needed to fire.
@@ -11,13 +18,25 @@
var/projectile_type = /obj/item/projectile/beam/practice
var/modifystate
var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge
//self-recharging
var/self_recharge = 0 //if set, the weapon will recharge itself
var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically
var/recharge_time = 4
var/charge_tick = 0
/obj/item/weapon/gun/energy/switch_firemodes(mob/user=null)
..()
var/datum/firemode/energy/current_mode = firemodes[sel_mode]
if(istype(current_mode))
projectile_type = isnull(current_mode.projectile_type)? initial(projectile_type) : current_mode.projectile_type
modifystate = isnull(current_mode.modifystate)? initial(modifystate) : current_mode.modifystate
charge_cost = isnull(current_mode.charge_cost)? initial(charge_cost) : current_mode.charge_cost
fire_sound = isnull(current_mode.fire_sound)? initial(fire_sound) : current_mode.fire_sound
update_icon()
update_held_icon()
/obj/item/weapon/gun/energy/emp_act(severity)
..()
update_icon()
@@ -41,15 +60,15 @@
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
if(!power_supply || power_supply.charge >= power_supply.maxcharge)
return 0 // check if we actually need to recharge
if(use_external_power)
var/obj/item/weapon/cell/external = get_external_power_supply()
if(!external || !external.use(charge_cost)) //Take power from the borg...
return 0
power_supply.give(charge_cost) //... to recharge the shot
update_icon()
return 1
@@ -74,16 +93,22 @@
return suit.cell
return null
/obj/item/weapon/gun/energy/examine(mob/user)
..(user)
var/shots_remaining = round(power_supply.charge / charge_cost)
user << "Has [shots_remaining] shot\s remaining."
return
/obj/item/weapon/gun/energy/update_icon()
if(charge_meter)
var/ratio = power_supply.charge / power_supply.maxcharge
//make sure that rounding down will not give us the empty state even if we have charge for a shot left.
if(power_supply.charge < charge_cost)
ratio = 0
else
ratio = max(round(ratio, 0.25) * 100, 25)
if(modifystate)
icon_state = "[modifystate][ratio]"
else
+16 -25
View File
@@ -10,26 +10,10 @@
origin_tech = "combat=3;magnets=2"
modifystate = "energystun"
var/mode = 0 //0 = stun, 1 = kill
/obj/item/weapon/gun/energy/gun/attack_self(mob/living/user as mob)
switch(mode)
if(0)
mode = 1
charge_cost = 100
fire_sound = 'sound/weapons/Laser.ogg'
user << "<span class='warning'>[src.name] is now set to kill.</span>"
projectile_type = /obj/item/projectile/beam
modifystate = "energykill"
if(1)
mode = 0
charge_cost = 100
fire_sound = 'sound/weapons/Taser.ogg'
user << "<span class='warning'>[src.name] is now set to stun.</span>"
projectile_type = /obj/item/projectile/beam/stun
modifystate = "energystun"
update_icon()
update_held_icon()
firemodes = list(
list(name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg'),
list(name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg'),
)
/obj/item/weapon/gun/energy/gun/mounted
name = "mounted energy gun"
@@ -43,7 +27,14 @@
origin_tech = "combat=3;materials=5;powerstorage=3"
slot_flags = SLOT_BELT
force = 8 //looks heavier than a pistol
self_recharge = 1
self_recharge = 1
modifystate = null
firemodes = list(
list(name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'),
list(name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'),
)
var/lightfail = 0
//override for failcheck behaviour
@@ -101,10 +92,10 @@
overlays += "nucgun-clean"
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_mode()
if (mode == 0)
overlays += "nucgun-stun"
else if (mode == 1)
overlays += "nucgun-kill"
var/datum/firemode/current_mode = firemodes[sel_mode]
switch(current_mode.name)
if("stun") overlays += "nucgun-stun"
if("lethal") overlays += "nucgun-kill"
/obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity)
..()
+16 -33
View File
@@ -5,33 +5,16 @@
item_state = null //so the human update icon uses the icon_state instead.
slot_flags = SLOT_BELT|SLOT_BACK
force = 10
fire_sound = 'sound/weapons/pulse.ogg'
charge_cost = 200
projectile_type = /obj/item/projectile/beam/pulse
cell_type = /obj/item/weapon/cell/super
var/mode = 2
fire_delay = 25
/obj/item/weapon/gun/energy/pulse_rifle/attack_self(mob/living/user as mob)
switch(mode)
if(2)
mode = 0
charge_cost = 100
fire_sound = 'sound/weapons/Taser.ogg'
user << "<span class='warning'>[src.name] is now set to stun.</span>"
projectile_type = /obj/item/projectile/beam/stun
if(0)
mode = 1
charge_cost = 100
fire_sound = 'sound/weapons/Laser.ogg'
user << "<span class='warning'>[src.name] is now set to kill.</span>"
projectile_type = /obj/item/projectile/beam
if(1)
mode = 2
charge_cost = 200
fire_sound = 'sound/weapons/pulse.ogg'
user << "<span class='warning'>[src.name] is now set to DESTROY.</span>"
projectile_type = /obj/item/projectile/beam/pulse
fire_sound='sound/weapons/Laser.ogg'
charge_cost = 50
projectile_type = /obj/item/projectile/beam
sel_mode = 2
firemodes = list(
list(name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'),
list(name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'),
list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=100),
)
/obj/item/weapon/gun/energy/pulse_rifle/mounted
self_recharge = 1
@@ -40,12 +23,13 @@
/obj/item/weapon/gun/energy/pulse_rifle/destroyer
name = "pulse destroyer"
desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists."
cell_type = /obj/item/weapon/cell/infinite
fire_delay = 10
cell_type = /obj/item/weapon/cell/super
fire_delay = 25
fire_sound='sound/weapons/pulse.ogg'
projectile_type=/obj/item/projectile/beam/pulse
/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob)
user << "<span class='warning'>[src.name] has three settings, and they are all DESTROY.</span>"
user << "<span class='warning'>[src.name] has three settings, and they are all DESTROY.</span>"
//WHY?
/obj/item/weapon/gun/energy/pulse_rifle/M1911
@@ -53,5 +37,4 @@
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
slot_flags = SLOT_BELT|SLOT_HOLSTER
icon_state = "m1911-p"
cell_type = /obj/item/weapon/cell/infinite
fire_delay = 10
cell_type = /obj/item/weapon/cell/crap
@@ -43,24 +43,11 @@
origin_tech = "materials=2;biotech=3;powerstorage=3"
modifystate = "floramut"
self_recharge = 1
var/mode = 0 //0 = mutate, 1 = yield boost
/obj/item/weapon/gun/energy/floragun/attack_self(mob/living/user as mob)
switch(mode)
if(0)
mode = 1
charge_cost = 100
user << "<span class='warning'>The [src.name] is now set to increase yield.</span>"
projectile_type = /obj/item/projectile/energy/florayield
modifystate = "florayield"
if(1)
mode = 0
charge_cost = 100
user << "<span class='warning'>The [src.name] is now set to induce mutations.</span>"
projectile_type = /obj/item/projectile/energy/floramut
modifystate = "floramut"
update_icon()
update_held_icon()
firemodes = list(
list(name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"),
list(name="increase yield", projectile_type=/obj/item/projectile/energy/florayield, modifystate="florayield"),
)
/obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag)
//allow shooting into adjacent hydrotrays regardless of intent
+1 -3
View File
@@ -7,6 +7,7 @@
var/release_force = 0
var/throw_distance = 10
muzzle_flash = 0
fire_sound_text = "a launcher firing"
//This normally uses a proc on projectiles and our ammo is not strictly speaking a projectile.
@@ -26,6 +27,3 @@
projectile.loc = get_turf(user)
projectile.throw_at(target, throw_distance, release_force, user)
return 1
/obj/item/weapon/gun/launcher/attack_self(mob/living/user as mob)
return
+17 -2
View File
@@ -165,7 +165,10 @@
load_ammo(A, user)
/obj/item/weapon/gun/projectile/attack_self(mob/user as mob)
unload_ammo(user)
if(firemodes.len > 1)
switch_firemodes(user)
else
unload_ammo(user)
/obj/item/weapon/gun/projectile/attack_hand(mob/user as mob)
if(user.get_inactive_hand() == src)
@@ -189,9 +192,9 @@
/obj/item/weapon/gun/projectile/examine(mob/user)
..(user)
user << "Has [getAmmo()] round\s remaining."
if(ammo_magazine)
user << "It has \a [ammo_magazine] loaded."
user << "Has [getAmmo()] round\s remaining."
return
/obj/item/weapon/gun/projectile/proc/getAmmo()
@@ -203,3 +206,15 @@
if(chambered)
bullets += 1
return bullets
/* Unneeded -- so far.
//in case the weapon has firemodes and can't unload using attack_hand()
/obj/item/weapon/gun/projectile/verb/unload_gun()
set name = "Unload Ammo"
set category = "Object"
set src in usr
if(usr.stat || usr.restrained()) return
unload_ammo(usr)
*/
@@ -10,7 +10,12 @@
slot_flags = SLOT_BELT
ammo_type = /obj/item/ammo_casing/c9mm
multi_aim = 1
fire_delay = 0
firemodes = list(
list(name="semiauto", burst=1, fire_delay=0),
list(name="3-round bursts", burst=3, move_delay=4, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 1.0)),
list(name="short bursts", burst=5, move_delay=4, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/projectile/automatic/mini_uzi
name = "\improper Uzi"
@@ -59,6 +64,12 @@
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c762
firemodes = list(
list(name="semiauto", burst=1, fire_delay=0),
list(name="3-round bursts", burst=3, move_delay=6, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6)),
list(name="short bursts", burst=5, move_delay=6, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon()
..()
@@ -87,6 +98,9 @@
icon_state = "wt550"
return
/datum/firemode/z8
var/use_launcher = 0
/obj/item/weapon/gun/projectile/automatic/z8
name = "\improper Z8 Bulldog"
desc = "An older model bullpup carbine, made by the now defunct Zendai Foundries. Uses armor piercing 5.56mm rounds. Makes you feel like a space marine when you hold it."
@@ -104,17 +118,20 @@
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
var/use_launcher = 0
burst_delay = 4
firemode_type = /datum/firemode/z8
firemodes = list(
list(name="semiauto", burst=1, fire_delay=0),
list(name="3-round bursts", burst=3, move_delay=6, accuracy = list(0,-1,-1), dispersion = list(0.0, 0.6, 0.6)),
list(name="fire grenades", use_launcher=1)
)
var/obj/item/weapon/gun/launcher/grenade/underslung/launcher
/obj/item/weapon/gun/projectile/automatic/z8/New()
..()
launcher = new(src)
/obj/item/weapon/gun/projectile/automatic/z8/attack_self(mob/user)
use_launcher = !use_launcher
user << "<span class='notice'>You switch to [use_launcher? "\the [launcher]" : "firing normally"].</span>"
/obj/item/weapon/gun/projectile/automatic/z8/attackby(obj/item/I, mob/user)
if((istype(I, /obj/item/weapon/grenade)))
launcher.load(I, user)
@@ -122,16 +139,18 @@
..()
/obj/item/weapon/gun/projectile/automatic/z8/attack_hand(mob/user)
if(user.get_inactive_hand() == src && use_launcher)
var/datum/firemode/z8/current_mode = firemodes[sel_mode]
if(user.get_inactive_hand() == src && current_mode.use_launcher)
launcher.unload(user)
else
..()
/obj/item/weapon/gun/projectile/automatic/z8/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0)
if(use_launcher)
var/datum/firemode/z8/current_mode = firemodes[sel_mode]
if(current_mode.use_launcher)
launcher.Fire(target, user, params, pointblank, reflex)
if(!launcher.chambered)
use_launcher = 0 //switch back automatically
switch_firemodes() //switch back automatically
else
..()
@@ -166,22 +185,40 @@
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a762
firemodes = list(
list(name="short bursts", burst=5, move_delay=6, accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
list(name="long bursts", burst=8, move_delay=8, accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2)),
)
var/cover_open = 0
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
cover_open = !cover_open
user << "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>"
update_icon()
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
/obj/item/weapon/gun/projectile/automatic/l6_saw/special_check(mob/user)
if(cover_open)
user << "<span class='warning'>[src]'s cover is open! Close it before firing!</span>"
return 0
return ..()
/obj/item/weapon/gun/projectile/automatic/l6_saw/proc/toggle_cover(mob/user)
cover_open = !cover_open
user << "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>"
update_icon()
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
if(cover_open)
toggle_cover(user) //close the cover
else
return ..() //once closed, behave like normal
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_hand(mob/user as mob)
if(!cover_open && user.get_inactive_hand() == src)
toggle_cover(user) //open the cover
else
return ..() //once open, behave like normal
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
/obj/item/weapon/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user)
if(!cover_open)
user << "<span class='warning'>You need to open the cover to load [src].</span>"
@@ -190,5 +227,6 @@
/obj/item/weapon/gun/projectile/automatic/l6_saw/unload_ammo(mob/user, var/allow_dump=1)
if(!cover_open)
user << "<span class='warning'>You need to open the cover to unload [src].</span>"
return
..()
@@ -65,12 +65,24 @@
caliber = "shotgun"
origin_tech = "combat=3;materials=1"
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
burst_delay = 0
firemodes = list(
list(name="fire one barrel at a time", burst=1),
list(name="fire both barrels at once", burst=2),
)
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet
ammo_type = /obj/item/ammo_casing/shotgun/pellet
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare
name = "signal shotgun"
desc = "A double-barreled shotgun meant to fire signal flash shells."
ammo_type = /obj/item/ammo_casing/shotgun/flash
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump)
..(user, allow_dump=1)
//this is largely hacky and bad :( -Pete
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob)
if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter))
+23 -15
View File
@@ -33,6 +33,9 @@
var/p_x = 16
var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center
var/accuracy = 0
var/dispersion = 0.0
var/damage = 10
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
@@ -101,6 +104,12 @@
if(mouse_control["icon-y"])
p_y = text2num(mouse_control["icon-y"])
//randomize clickpoint a bit based on dispersion
if(dispersion)
var/radius = round((dispersion*0.443)*world.icon_size*0.8) //0.443 = sqrt(pi)/4 = 2a, where a is the side length of a square that shares the same area as a circle with diameter = dispersion
p_x = between(0, p_x + rand(-radius, radius), world.icon_size)
p_y = between(0, p_y + rand(-radius, radius), world.icon_size)
//called to launch a projectile from a gun
/obj/item/projectile/proc/launch(atom/target, mob/user, obj/item/weapon/gun/launcher, var/target_zone, var/x_offset=0, var/y_offset=0)
var/turf/curloc = get_turf(user)
@@ -147,24 +156,15 @@
yo = new_y - starting_loc.y
xo = new_x - starting_loc.x
setup_trajectory()
//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying.
/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
if(!istype(target_mob))
return
//accuracy bonus from aiming
if (istype(shot_from, /obj/item/weapon/gun))
var/obj/item/weapon/gun/daddy = shot_from
miss_modifier -= round(15*daddy.accuracy)
//If you aim at someone beforehead, it'll hit more often.
//Kinda balanced by fact you need like 2 seconds to aim
//As opposed to no-delay pew pew
if (daddy.aim_targets && original in daddy.aim_targets)
miss_modifier += -30
//roll to-hit
miss_modifier = max(miss_modifier + 15*(distance-2), 0)
miss_modifier = max(15*(distance-2) - round(15*accuracy) + miss_modifier, 0)
var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1))
if(!hit_zone)
visible_message("<span class='notice'>\The [src] misses [target_mob] narrowly!</span>")
@@ -274,10 +274,11 @@
//plot the initial trajectory
setup_trajectory()
spawn while(src)
spawn while(src && src.loc)
if(kill_count-- < 1)
on_impact(src.loc) //for any final impact behaviours
qdel(src)
return
if((!( current ) || loc == current))
current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
@@ -289,6 +290,7 @@
if(!location)
qdel(src) // if it's left the world... kill it
return
before_move()
Move(location.return_turf())
@@ -302,8 +304,8 @@
if(!bumped && !isturf(original))
if(loc == get_turf(original))
if(!(original in permutated))
Bump(original)
if(Bump(original))
return
if(!hitscan)
sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon
@@ -314,9 +316,15 @@
/obj/item/projectile/proc/before_move()
/obj/item/projectile/proc/setup_trajectory()
// trajectory dispersion
var/offset = 0
if(dispersion)
var/radius = round(dispersion*9, 1)
offset = rand(-radius, radius)
// plot the initial trajectory
trajectory = new()
trajectory.setup(starting, original, pixel_x, pixel_y)
trajectory.setup(starting, original, pixel_x, pixel_y, angle_offset=offset)
// generate this now since all visual effects the projectile makes can use it
effect_transform = new()
@@ -148,6 +148,7 @@
stun = 3
weaken = 3
penetrating = 5
hitscan = 1 //so the PTR isn't useless as a sniper weapon
/obj/item/projectile/bullet/rifle/a556
damage = 40
-4
View File
@@ -16,10 +16,6 @@
stop_aim()
usr.visible_message("<span class='notice'> \The [usr] lowers \the [src]...</span>")
//Clicking gun will still lower aim for guns that don't overwrite this
/obj/item/weapon/gun/attack_self()
lower_aim()
//Removing the lock and the buttons.
/obj/item/weapon/gun/dropped(mob/user as mob)
stop_aim()
+21 -64
View File
@@ -1,66 +1,23 @@
/proc/mix_color_from_reagents(var/list/reagent_list)
if(!reagent_list || !length(reagent_list))
return 0
/datum/reagents/proc/get_color()
if(!reagent_list || !reagent_list.len)
return "#ffffffff"
if(reagent_list.len == 1) // It's pretty common and saves a lot of work
var/datum/reagent/R = reagent_list[1]
return R.color
var/contents = length(reagent_list)
var/list/weight = new /list(contents)
var/list/redcolor = new /list(contents)
var/list/greencolor = new /list(contents)
var/list/bluecolor = new /list(contents)
var/i
var/list/colors = list(0, 0, 0, 0)
var/tot_w = 0
for(var/datum/reagent/R in reagent_list)
var/hex = uppertext(R.color)
if(length(hex) == 7)
hex += "FF"
if(length(hex) != 9) // PANIC PANIC PANIC
warning("Reagent [R.id] has an incorrect color set ([R.color])")
hex = "#FFFFFFFF"
colors[1] += hex2num(copytext(hex, 2, 4)) * R.volume * R.color_weight
colors[2] += hex2num(copytext(hex, 4, 6)) * R.volume * R.color_weight
colors[3] += hex2num(copytext(hex, 6, 8)) * R.volume * R.color_weight
colors[4] += hex2num(copytext(hex, 8, 10)) * R.volume * R.color_weight
tot_w += R.volume * R.color_weight
//fill the list of weights
for(i=1; i<=contents; i++)
var/datum/reagent/re = reagent_list[i]
var/reagentweight = re.volume
if(istype(re, /datum/reagent/paint))
reagentweight *= 20 //Paint colours a mixture twenty times as much
weight[i] = reagentweight
//fill the lists of colours
for(i=1; i<=contents; i++)
var/datum/reagent/re = reagent_list[i]
var/hue = re.color
if(length(hue) != 7)
return 0
redcolor[i]=hex2num(copytext(hue,2,4))
greencolor[i]=hex2num(copytext(hue,4,6))
bluecolor[i]=hex2num(copytext(hue,6,8))
//mix all the colors
var/red = mixOneColor(weight,redcolor)
var/green = mixOneColor(weight,greencolor)
var/blue = mixOneColor(weight,bluecolor)
//assemble all the pieces
var/finalcolor = rgb(red, green, blue)
return finalcolor
/proc/mixOneColor(var/list/weight, var/list/color)
if (!weight || !color || length(weight)!=length(color))
return 0
var/contents = length(weight)
var/i
//normalize weights
var/listsum = 0
for(i=1; i<=contents; i++)
listsum += weight[i]
for(i=1; i<=contents; i++)
weight[i] /= listsum
//mix them
var/mixedcolor = 0
for(i=1; i<=contents; i++)
mixedcolor += weight[i]*color[i]
mixedcolor = round(mixedcolor)
//until someone writes a formal proof for this algorithm, let's keep this in
// if(mixedcolor<0x00 || mixedcolor>0xFF)
// return 0
//that's not the kind of operation we are running here, nerd
mixedcolor=min(max(mixedcolor,0),255)
return mixedcolor
return rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w)
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More