Merge remote-tracking branch 'upstream/dev' into CanTrack

Conflicts:
	code/game/machinery/camera/tracking.dm
This commit is contained in:
PsiOmega
2015-02-01 17:46:16 +01:00
345 changed files with 1547 additions and 1508 deletions
+2 -1
View File
@@ -653,6 +653,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=\ref[src];secretsfun=paintball'>Paintball Mode</A><BR>
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A><BR>
<A href='?src=\ref[src];secretsfun=eagles'>Egalitarian Station Mode</A><BR>
<A href='?src=\ref[src];secretsfun=launchshuttle'>Launch a shuttle</A><BR>
@@ -948,7 +949,7 @@ var/global/floorIsLava = 0
return 2
return 1
if(M.mind in ticker.mode.syndicates)
if (ticker.mode.config_tag == "nuclear")
if (ticker.mode.config_tag == "mercenary")
return 2
return 1
if(M.mind in ticker.mode.wizards)
+23 -26
View File
@@ -46,6 +46,7 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_admin_create_centcom_report,
/client/proc/check_words, /*displays cult-words*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/client/proc/rename_ai, /*properly renames the AI*/
/client/proc/check_antagonists,
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
@@ -282,7 +283,7 @@ var/list/admin_verbs_mentor = list(
if(holder.rights & R_SERVER) verbs += admin_verbs_server
if(holder.rights & R_DEBUG)
verbs += admin_verbs_debug
if(config.debugparanoid && !check_rights(R_ADMIN))
if(config.debugparanoid && !check_rights(R_ADMIN))
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
@@ -308,24 +309,7 @@ var/list/admin_verbs_mentor = list(
admin_verbs_rejuv,
admin_verbs_sounds,
admin_verbs_spawn,
/*Debug verbs added by "show debug verbs"*/
/client/proc/Cell,
/client/proc/do_not_use_these,
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
/client/proc/atmosscan,
/client/proc/powerdebug,
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
/client/proc/cmd_assume_direct_control,
/client/proc/jump_to_dead_group,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/kaboom,
/client/proc/splash,
/client/proc/cmd_admin_areatest
debug_verbs
)
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
@@ -608,12 +592,14 @@ var/list/admin_verbs_mentor = list(
var/datum/disease2/disease/D = new /datum/disease2/disease()
var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
D.makerandom(greater)
if (!greater)
D.infectionchance = 1
var/severity = 1
var/greater = input("Is this a lesser, greater, or badmin disease?", "Give Disease") in list("Lesser", "Greater", "Badmin")
switch(greater)
if ("Lesser") severity = 1
if ("Greater") severity = 2
if ("Badmin") severity = 99
D.makerandom(severity)
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
if(istype(T,/mob/living/carbon/human))
@@ -626,8 +612,8 @@ var/list/admin_verbs_mentor = list(
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"
@@ -706,6 +692,17 @@ var/list/admin_verbs_mentor = list(
if(holder)
src.holder.output_ai_laws()
/client/proc/rename_ai(mob/living/silicon/ai/AI in world)
set name = "Rename AI"
set category = "Admin"
if(holder)
var/new_name = trim_strip_input(src, "Enter new AI name. Leave blank or as is to cancel.", "Enter new AI Name", AI.name)
if(new_name && new_name != AI.name)
admin_log_and_message_admins("has renamed the AI '[AI.name]' to '[new_name]'")
AI.SetName(new_name)
feedback_add_details("admin_verb","RAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//---- bs12 verbs ----
+10
View File
@@ -2399,6 +2399,16 @@
W.item_color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('sound/AI/animes.ogg')
if("paintball")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","PB")
for(var/species in all_species)
var/datum/species/S = all_species[species]
S.blood_color = "rainbow"
for(var/obj/effect/decal/cleanable/blood/B in world)
B.basecolor = "rainbow"
B.update_icon()
message_admins("[key_name_admin(usr)] activated Paintball mode")
if("eagles")//SCRAW
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","EgL")
+7 -82
View File
@@ -1,18 +1,8 @@
#define AHELP_ADMIN 1
#define AHELP_MENTOR 2
#define AHELP_DEV 3
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHELP_MENTOR,\
"Admin - Rule/Gameplay issue" = AHELP_ADMIN,\
"Dev - Bug report" = AHELP_DEV)
/client/proc/adminhelp_admin(message)
adminhelp("Admin - Rule/Gameplay issue", message)
/client/verb/adminhelp(selected_type in adminhelp_categories, msg as text)
/client/verb/adminhelp(msg as text)
set category = "Admin"
set name = "Adminhelp"
@@ -27,18 +17,6 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
/**src.verbs -= /client/verb/adminhelp
spawn(1200)
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
**/
if(!msg || alert("The following message will be sent to staff that administers\n the '[selected_type]' category:\n\n[msg]\n", "Admin Help", "Ok", "Cancel") == "Cancel")
return
var/selected_upper = uppertext(selected_type)
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
@@ -109,62 +87,12 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
var/ai_cl
if(ai_found)
ai_cl = " (<A HREF='?_src_=holder;adminchecklaws=\ref[mob]'>CL</A>)"
var/mentor_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_cl]:</b> [msg]"
var/dev_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 3, 0, 1, 0)][ai_cl]:</b> [msg]"
msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
var/mentor_msg = "\blue <b><font color=red>Request for Help: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_cl]:</b> [msg]"
msg = "\blue <b><font color=red>Request for Help:: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
var/admin_number_afk = 0
var/list/mentorholders = list()
var/list/debugholders = list()
var/list/adminholders = list()
for(var/client/X in admins)
if(R_MENTOR & X.holder.rights && !(R_ADMIN & X.holder.rights)) // we don't want to count admins twice. This list should be JUST mentors
mentorholders += X
if(X.is_afk())
admin_number_afk++
if(R_DEBUG & X.holder.rights) // Looking for anyone with +Debug which will be admins, developers, and developer mentors
debugholders += X
if(!(R_ADMIN & X.holder.rights))
if(X.is_afk())
admin_number_afk++
if(R_ADMIN | R_MOD & X.holder.rights) // just admins here please
adminholders += X
if(X.is_afk())
admin_number_afk++
switch(adminhelp_categories[selected_type])
if(AHELP_MENTOR)
if(mentorholders.len)
for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << mentor_msg
if(adminholders.len)
for(var/client/X in adminholders) // Admins get the full monty
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
if(AHELP_ADMIN)
if(adminholders.len)
for(var/client/X in adminholders) // Admins of course get everything in their helps
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
if(AHELP_DEV)
if(debugholders.len)
for(var/client/X in debugholders)
if(R_ADMIN | R_MOD & X.holder.rights) // Admins get every button & special highlights in theirs
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
else
if (R_DEBUG & X.holder.rights) // Just devs or devmentors get non-highlighted names, but they do get JMP and VV for their bug reports.
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << dev_msg
/*for(var/client/X in admins)
if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
@@ -173,20 +101,17 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
if(X.holder.rights == R_MENTOR)
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
else
X << msg*/
X << msg
//show it to the person adminhelping too
src << "<font color='blue'>PM to-<b>Staff ([selected_type])</b>: [original_msg]</font>"
src << "<font color='blue'>PM to-<b>Staff </b>: [original_msg]</font>"
var/admin_number_present = admins.len - admin_number_afk
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0)
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
else
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)]")
send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)]")
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
#undef AHELP_ADMIN
#undef AHELP_MENTOR
#undef AHELP_DEV
+1 -1
View File
@@ -96,7 +96,7 @@
if(sender)
C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
else
adminhelp_admin(reply) //sender has left, adminhelp instead
adminhelp(reply) //sender has left, adminhelp instead
return
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "PM", src) + " to <span class='name'>[get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]</span>: <span class='message'>[msg]</span></span></span>"
C << "<span class='pm'><span class='in'>" + create_text_tag("pm_in", "", C) + " <b>\[[recieve_pm_type] PM\]</b> <span class='name'>[get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]</span>: <span class='message'>[msg]</span></span></span>"
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A small electronic device that should never exist."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = ""
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
w_class = 2.0
matter = list("metal" = 100)
throwforce = 2
+1 -1
View File
@@ -6,7 +6,7 @@
w_class = 3.0
throw_speed = 2
throw_range = 4
flags = FPRINT | TABLEPASS| CONDUCT //Copied this from old code, so this may or may not be necessary
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
var/status = 0 //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank
+1 -1
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
item_state = "assembly"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
throwforce = 5
w_class = 2.0
throw_speed = 3
-1
View File
@@ -168,7 +168,6 @@
var/visible = 0.0
var/left = null
anchored = 1.0
flags = TABLEPASS
/obj/effect/beam/i_beam/proc/hit()
+1 -1
View File
@@ -6,7 +6,7 @@
var/obj/item/device/radio/electropack/part2 = null
var/status = 0
w_class = 5.0
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
/obj/item/assembly/shock_kit/Del()
del(part1)
+2 -2
View File
@@ -517,7 +517,7 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_wear_suit
/datum/gear/gponcho
/datum/gear/bponcho
display_name = "poncho, blue"
path = /obj/item/clothing/suit/poncho/blue
cost = 3
@@ -529,7 +529,7 @@ var/global/list/gear_datums = list()
cost = 3
slot = slot_wear_suit
/datum/gear/rponcho
/datum/gear/pponcho
display_name = "poncho, purple"
path = /obj/item/clothing/suit/poncho/purple
cost = 3
+15 -10
View File
@@ -44,6 +44,9 @@
return 1
/obj/item/clothing/proc/refit_for_species(var/target_species)
if(!species_restricted)
return //this item doesn't use the species_restricted system
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
@@ -63,6 +66,9 @@
icon = initial(icon)
/obj/item/clothing/head/helmet/refit_for_species(var/target_species)
if(!species_restricted)
return //this item doesn't use the species_restricted system
//Set species_restricted list
switch(target_species)
if("Skrell")
@@ -225,7 +231,7 @@ BLIND // can't see anything
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
clipped = 1
name = "mangled [name]"
name = "modified [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
@@ -365,7 +371,6 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
@@ -386,7 +391,6 @@ BLIND // can't see anything
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
flags = FPRINT | TABLEPASS
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = 3
@@ -399,8 +403,6 @@ BLIND // can't see anything
*/
var/obj/item/clothing/tie/hastie = null
var/displays_id = 1
var/rolled_down = 0
var/basecolor
sprite_sheets = list("Vox" = 'icons/mob/species/vox/uniform.dmi')
/obj/item/clothing/under/update_clothing_icon()
@@ -526,11 +528,14 @@ BLIND // can't see anything
if(!istype(usr, /mob/living)) return
if(usr.stat) return
if(copytext(item_color,-2) != "_d")
basecolor = item_color
if(basecolor + "_d_s" in icon_states('icons/mob/uniform.dmi'))
body_parts_covered = "[basecolor]" ? LEGS|LOWER_TORSO : UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
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()
else
usr << "<span class='notice'>You cannot roll down the uniform!</span>"
@@ -1,87 +0,0 @@
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user)
if(istype(src, /obj/item/clothing/gloves/boxing)) //quick fix for stunglove overlay not working nicely with boxing gloves.
user << "<span class='notice'>That won't work.</span>" //i'm not putting my lips on that!
..()
return
//add wires
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if (clipped)
user << "<span class='notice'>The [src] are too badly mangled for wiring.</span>"
return
if(wired)
user << "<span class='notice'>The [src] are already wired.</span>"
return
if(C.get_amount() < 2)
user << "<span class='notice'>There is not enough wire to cover the [src].</span>"
return
C.use(2)
wired = 1
siemens_coefficient = 3.0
user << "<span class='notice'>You wrap some wires around the [src].</span>"
update_icon()
return
//add cell
else if(istype(W, /obj/item/weapon/cell))
if(!wired)
user << "<span class='notice'>The [src] need to be wired first.</span>"
else if(!cell)
user.drop_item()
W.loc = src
cell = W
user << "<span class='notice'>You attach the [cell] to the [src].</span>"
update_icon()
else
user << "<span class='notice'>A [cell] is already attached to the [src].</span>"
return
else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
//stunglove stuff
if(cell)
cell.updateicon()
user << "<span class='notice'>You cut the [cell] away from the [src].</span>"
cell.loc = get_turf(src.loc)
cell = null
update_icon()
return
if(wired) //wires disappear into the void because fuck that shit
wired = 0
siemens_coefficient = initial(siemens_coefficient)
user << "<span class='notice'>You cut the wires away from the [src].</span>"
update_icon()
return
//clipping fingertips
if(!clipped)
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
clipped = 1
name = "mangled [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
species_restricted -= "Tajara"
return
else
user << "<span class='notice'>The [src] have already been clipped!</span>"
update_icon()
return
return
..()
/obj/item/clothing/gloves/update_icon()
..()
overlays.Cut()
if(wired)
overlays += "gloves_wire"
if(cell)
overlays += "gloves_cell"
+2 -3
View File
@@ -2,7 +2,6 @@
name = "hard hat"
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
icon_state = "hardhat0_yellow"
flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow"
brightness_on = 4 //luminosity when on
light_overlay = "hardhat_light"
@@ -21,7 +20,7 @@
item_state = "hardhat0_red"
item_color = "red"
name = "firefighter helmet"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -29,7 +28,7 @@
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
item_color = "white"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+7 -7
View File
@@ -2,7 +2,7 @@
name = "helmet"
desc = "Standard Security gear. Protects the head from impacts."
icon_state = "helmet"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | THICKMATERIAL
flags = HEADCOVERSEYES | THICKMATERIAL
item_state = "helmet"
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -39,7 +39,7 @@
desc = "It's a helmet specifically designed to protect against close range attacks."
icon_state = "riot"
item_state = "helmet"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
flags_inv = HIDEEARS
siemens_coefficient = 0.7
@@ -48,7 +48,7 @@
name = "\improper SWAT helmet"
desc = "They're often used by highly trained Swat Members."
icon_state = "swat"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "swat"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -60,7 +60,7 @@
name = "\improper Thunderdome helmet"
desc = "<i>'Let the battle commence!'</i>"
icon_state = "thunderdome"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
@@ -71,7 +71,7 @@
name = "gladiator helmet"
desc = "Ave, Imperator, morituri te salutant."
icon_state = "gladiator"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state = "gladiator"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 1
@@ -81,7 +81,7 @@
desc = "An armored helmet capable of being fitted with a multitude of attachments."
icon_state = "swathelm"
item_state = "helmet"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
@@ -95,7 +95,7 @@
name = "Augment Array"
desc = "A helmet with optical and cranial augments coupled to it."
icon_state = "v62"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "v62"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
+3 -13
View File
@@ -6,7 +6,6 @@
icon_state = "chefhat"
item_state = "chefhat"
desc = "The commander in chef's head wear."
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
//Captain: This probably shouldn't be space-worthy
@@ -14,7 +13,6 @@
name = "captain's hat"
icon_state = "captain"
desc = "It's good being the king."
flags = FPRINT|TABLEPASS
item_state = "caphat"
siemens_coefficient = 0.9
@@ -23,7 +21,6 @@
name = "captain's cap"
desc = "You fear to wear it for the negligence it brings."
icon_state = "capcap"
flags = FPRINT|TABLEPASS
flags_inv = 0
body_parts_covered = 0
cold_protection = HEAD
@@ -36,7 +33,7 @@
name = "chaplain's hood"
desc = "It's hood that covers the head. It keeps you warm during the space winters."
icon_state = "chaplain_hood"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
flags = HEADCOVERSEYES|BLOCKHAIR
siemens_coefficient = 0.9
body_parts_covered = HEAD|EYES
@@ -45,7 +42,7 @@
name = "nun hood"
desc = "Maximum piety in this star system."
icon_state = "nun_hood"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
flags = HEADCOVERSEYES|BLOCKHAIR
siemens_coefficient = 0.9
//Mime
@@ -53,7 +50,6 @@
name = "beret"
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -62,32 +58,26 @@
name = "security beret"
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
icon_state = "beret_badge"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/alt
name = "officer beret"
desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "officerberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/hos
name = "officer beret"
desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "hosberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/warden
name = "warden beret"
desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "wardenberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/eng
name = "engineering beret"
desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety."
icon_state = "e_beret_badge"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/jan
name = "purple beret"
desc = "A stylish, if purple, beret."
icon_state = "purpleberet"
flags = FPRINT | TABLEPASS
//Medical
@@ -95,7 +85,7 @@
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
icon_state = "surgcap_blue"
flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
flags = BLOCKHEADHAIR
/obj/item/clothing/head/surgery/purple
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple."
+10 -26
View File
@@ -4,7 +4,6 @@
name = "\improper CentComm. hat"
icon_state = "centcom"
desc = "It's good to be emperor."
flags = FPRINT|TABLEPASS
item_state = "centhat"
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -14,7 +13,6 @@
icon_state = "hairflower"
desc = "Smells nice."
item_state = "hairflower"
flags = FPRINT|TABLEPASS
slot_flags = SLOT_HEAD | SLOT_EARS
body_parts_covered = 0
@@ -29,7 +27,6 @@
desc = "It's an amish looking hat."
icon_state = "tophat"
item_state = "that"
flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -37,21 +34,18 @@
name = "redcoat's hat"
icon_state = "redcoat"
desc = "<i>'I guess it's a redhead.'</i>"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/mailman
name = "station cap"
icon_state = "mailman"
desc = "<i>Choo-choo</i>!"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/plaguedoctorhat
name = "plague doctor's hat"
desc = "These were once used by Plague doctors. They're pretty much useless."
icon_state = "plaguedoctor"
flags = FPRINT | TABLEPASS
permeability_coefficient = 0.01
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -60,14 +54,13 @@
name = "hastur's hood"
desc = "It's unspeakably stylish"
icon_state = "hasturhood"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
flags = HEADCOVERSEYES|BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/head/nursehat
name = "nurse's hat"
desc = "It allows quick identification of trained medical personnel."
icon_state = "nursehat"
flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -76,7 +69,7 @@
icon_state = "syndicate"
item_state = "syndicate"
desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
body_parts_covered = HEAD|FACE|EYES
@@ -85,7 +78,7 @@
name = "cueball helmet"
desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
icon_state = "cueball"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state="cueball"
flags_inv = 0
body_parts_covered = HEAD|FACE|EYES
@@ -95,7 +88,6 @@
desc = "It's a green bandana with some fine nanotech lining."
icon_state = "greenbandana"
item_state = "greenbandana"
flags = FPRINT|TABLEPASS
flags_inv = 0
body_parts_covered = 0
@@ -104,7 +96,7 @@
desc = "A helmet made out of a box."
icon_state = "cardborg_h"
item_state = "cardborg_h"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|FACE|EYES
@@ -113,7 +105,7 @@
desc = "fight for what's righteous!"
icon_state = "justicered"
item_state = "justicered"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
/obj/item/clothing/head/justice/blue
icon_state = "justiceblue"
@@ -135,7 +127,6 @@
name = "rabbit ears"
desc = "Wearing these makes you looks useless, and only good for your sex appeal."
icon_state = "bunny"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/flatcap
@@ -170,7 +161,6 @@
desc = "Gentleman, elite aboard!"
icon_state = "bowler"
item_state = "bowler"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
//stylish bs12 hats
@@ -180,7 +170,6 @@
icon_state = "bowler_hat"
item_state = "bowler_hat"
desc = "For the gentleman of distinction."
flags = FPRINT|TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/beaverhat
@@ -188,35 +177,30 @@
icon_state = "beaver_hat"
item_state = "beaver_hat"
desc = "Soft felt makes this hat both comfortable and elegant."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/boaterhat
name = "boater hat"
icon_state = "boater_hat"
item_state = "boater_hat"
desc = "The ultimate in summer fashion."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fedora
name = "\improper fedora"
icon_state = "fedora"
item_state = "fedora"
desc = "A sharp, stylish hat."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/feathertrilby
name = "\improper feather trilby"
icon_state = "feather_trilby"
item_state = "feather_trilby"
desc = "A sharp, stylish hat with a feather."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fez
name = "\improper fez"
icon_state = "fez"
item_state = "fez"
desc = "You should wear a fez. Fezzes are cool."
flags = FPRINT|TABLEPASS
//end bs12 hats
@@ -225,7 +209,7 @@
desc = "Eeeee~heheheheheheh!"
icon_state = "witch"
item_state = "witch"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 2.0
/obj/item/clothing/head/chicken
@@ -233,7 +217,7 @@
desc = "Bkaw!"
icon_state = "chickenhead"
item_state = "chickensuit"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 0.7
body_parts_covered = HEAD|FACE|EYES
@@ -242,7 +226,7 @@
desc = "Fuzzy."
icon_state = "bearpelt"
item_state = "bearpelt"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 0.7
/obj/item/clothing/head/xenos
@@ -250,7 +234,7 @@
icon_state = "xenos"
item_state = "xenos_helm"
desc = "A helmet made out of chitinous alien hide."
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
body_parts_covered = HEAD|FACE|EYES
@@ -260,7 +244,7 @@
desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!"
icon_state = "philosopher_wig"
item_state = "philosopher_wig"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 2.0 //why is it so conductive?!
body_parts_covered = 0
+3 -4
View File
@@ -15,7 +15,7 @@
name = "welding helmet"
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
icon_state = "welding"
flags = (FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH)
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
matter = list("metal" = 3000, "glass" = 1000)
var/up = 0
@@ -58,7 +58,7 @@
name = "cake-hat"
desc = "It's tasty looking!"
icon_state = "cake0"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
var/onfire = 0.0
var/status = 0
var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
@@ -123,7 +123,7 @@
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
item_state = "hardhat0_pumpkin"
item_color = "pumpkin"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|EYES
brightness_on = 2
@@ -137,7 +137,6 @@
name = "kitty ears"
desc = "A pair of kitty ears. Meow!"
icon_state = "kitty"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
var/icon/mob
var/icon/mob2
+1 -1
View File
@@ -2,7 +2,7 @@
name = "cargo cap"
desc = "It's a baseball hat in a tasteless yellow color."
icon_state = "cargosoft"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "helmet"
item_color = "cargo"
var/flipped = 0
+3 -3
View File
@@ -3,7 +3,7 @@
desc = "LOADSAMONEY"
icon_state = "balaclava"
item_state = "balaclava"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = FACE
w_class = 2
@@ -17,7 +17,7 @@
desc = "Designed to both hide identities and keep your face comfy and warm."
icon_state = "swatclava"
item_state = "balaclava"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
sprite_sheets = list(
@@ -30,7 +30,7 @@
desc = "Worn by robust fighters, flying high to defeat their foes!"
icon_state = "luchag"
item_state = "luchag"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE
w_class = 2
+1 -1
View File
@@ -3,7 +3,7 @@
name = "breath mask"
icon_state = "breath"
item_state = "breath"
flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | AIRTIGHT
flags = MASKCOVERSMOUTH | AIRTIGHT
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.10
+3 -2
View File
@@ -2,7 +2,7 @@
name = "gas mask"
desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air."
icon_state = "gas_alt"
flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = FACE|EYES
w_class = 3.0
@@ -12,6 +12,7 @@
siemens_coefficient = 0.9
var/gas_filter_strength = 1 //For gas mask filters
var/list/filtered_gases = list("phoron", "sleeping_agent")
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
var/datum/gas_mixture/filtered = new
@@ -32,7 +33,7 @@
desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply."
icon_state = "plaguedoctor"
item_state = "gas_mask"
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0)
body_parts_covered = HEAD|FACE
/obj/item/clothing/mask/gas/swat
+9 -11
View File
@@ -3,7 +3,7 @@
desc = "To stop that awful noise."
icon_state = "muzzle"
item_state = "muzzle"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.90
@@ -20,17 +20,16 @@
icon_state = "sterile"
item_state = "sterile"
w_class = 2
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
body_parts_covered = 0
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0)
/obj/item/clothing/mask/fakemoustache
name = "fake moustache"
desc = "Warning: moustache is fake."
icon_state = "fake-moustache"
flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
body_parts_covered = 0
@@ -38,7 +37,6 @@
name = "Snorkel"
desc = "For the Swimming Savant."
icon_state = "snorkel"
flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
body_parts_covered = 0
@@ -49,7 +47,7 @@
desc = "A blue neck scarf."
icon_state = "blueneckscarf"
item_state = "blueneckscarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -58,7 +56,7 @@
desc = "A red and white checkered neck scarf."
icon_state = "redwhite_scarf"
item_state = "redwhite_scarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -67,7 +65,7 @@
desc = "A green neck scarf."
icon_state = "green_scarf"
item_state = "green_scarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -76,7 +74,7 @@
desc = "A stealthy, dark scarf."
icon_state = "ninja_scarf"
item_state = "ninja_scarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
siemens_coefficient = 0
@@ -86,7 +84,7 @@
desc = "A rubber pig mask."
icon_state = "pig"
item_state = "pig"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
siemens_coefficient = 0.9
@@ -97,7 +95,7 @@
desc = "A mask made of soft vinyl and latex, representing the head of a horse."
icon_state = "horsehead"
item_state = "horsehead"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE|EYES
w_class = 2
+2 -2
View File
@@ -4,7 +4,7 @@
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -18,7 +18,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPSPRESSUREDMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
@@ -17,7 +17,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPSPRESSUREDMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
@@ -34,7 +34,7 @@
icon_state = "deathsquad"
item_state = "deathsquad"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
siemens_coefficient = 0.6
/obj/item/clothing/head/helmet/space/deathsquad/beret
@@ -42,7 +42,7 @@
desc = "An armored beret commonly used by special operations officers."
icon_state = "beret_badge"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
siemens_coefficient = 0.9
//Space santa outfit suit
@@ -50,7 +50,7 @@
name = "Santa's hat"
desc = "Ho ho ho. Merrry X-mas!"
icon_state = "santahat"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
body_parts_covered = HEAD
/obj/item/clothing/suit/space/santa
@@ -59,7 +59,7 @@
icon_state = "santa"
item_state = "santa"
slowdown = 0
flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE
flags = ONESIZEFITSALL | STOPSPRESSUREDMAGE
allowed = list(/obj/item) //for stuffing exta special presents
@@ -70,7 +70,7 @@
icon_state = "pirate"
item_state = "pirate"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
body_parts_covered = 0
siemens_coefficient = 0.9
@@ -111,6 +111,16 @@
gun.Fire(target,holder.wearer)
return 1
/obj/item/rig_module/mounted/egun
name = "mounted energy gun"
desc = "A forearm-mounted energy projector."
interface_name = "mounted energy gun"
interface_desc = "A forearm-mounted suit-powered energy gun."
gun_type = /obj/item/weapon/gun/energy/gun/mounted
/obj/item/rig_module/mounted/taser
name = "mounted taser"
@@ -124,7 +134,7 @@
interface_name = "mounted energy gun"
interface_desc = "A shoulder-mounted cell-powered energy gun."
gun_type = /obj/item/weapon/gun/energy/gun/mounted
gun_type = /obj/item/weapon/gun/energy/taser/mounted
/obj/item/rig_module/mounted/energy_blade
@@ -334,6 +334,7 @@
var/atom/interfaced_with // Currently draining power from this device.
var/total_power_drained = 0
var/drain_loc
/obj/item/rig_module/power_sink/deactivate()
@@ -373,6 +374,7 @@
H << "<span class = 'danger'>You begin draining power from [target]!</span>"
interfaced_with = target
drain_loc = interfaced_with.loc
holder.spark_system.start()
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
@@ -406,7 +408,7 @@
drain_complete(H)
return
if(!interfaced_with || !interfaced_with.Adjacent(H))
if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc))
H << "<span class = 'warning'>Your power sink retracts into its casing.</span>"
drain_complete(H)
return
@@ -427,8 +429,6 @@
holder.cell.give(target_drained * CELLRATE)
total_power_drained += target_drained
return 1
/obj/item/rig_module/power_sink/proc/drain_complete(var/mob/living/M)
@@ -439,5 +439,6 @@
if(M) M << "<font color='blue'><b>Total power drained from [interfaced_with]:</b> [round(total_power_drained/1000)]kJ.</font>"
interfaced_with.drain_power(0,1,0) // Damage the victim.
drain_loc = null
interfaced_with = null
total_power_drained = 0
@@ -147,6 +147,14 @@
usr << "<span class='warning'>The suit is not initialized.</span>"
return 0
if(usr.lying || usr.stat || usr.stunned || usr.paralysis)
usr << "<span class='warning'>You cannot use the suit in this state.</span>"
return 0
if(holder.wearer && holder.wearer.lying)
usr << "<span class='warning'>The suit cannot function while the wearer is prone.</span>"
return 0
if(holder.security_check_enabled && !holder.check_suit_access(usr))
usr << "<span class='danger'>Access denied.</span>"
return
@@ -19,6 +19,7 @@
use_power_cost = 5
active_power_cost = 1
passive_power_cost = 0
module_cooldown = 30
activate_string = "Enable Cloak"
deactivate_string = "Disable Cloak"
@@ -0,0 +1,51 @@
//Weapon types intended to be used with rig modules
/obj/item/weapon/gun/energy/lasercannon/mounted/load_into_chamber()
if(in_chamber)
return 1
var/obj/item/rig_module/module = loc
if(!istype(module))
return 0
if(module.holder && module.holder.wearer)
var/mob/living/carbon/human/H = module.holder.wearer
if(istype(H) && H.back)
var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
in_chamber = new /obj/item/projectile/beam/heavylaser(src)
return 1
return 0
/obj/item/weapon/gun/energy/gun/mounted/load_into_chamber()
if(in_chamber)
return 1
var/obj/item/rig_module/module = loc
if(!istype(module))
return 0
if(module.holder && module.holder.wearer)
var/mob/living/carbon/human/H = module.holder.wearer
if(istype(H) && H.back)
var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
var/prog_path = text2path(projectile_type)
in_chamber = new prog_path(src)
return 1
return 0
/obj/item/weapon/gun/energy/taser/mounted/load_into_chamber()
if(in_chamber)
return 1
var/obj/item/rig_module/module = loc
if(!istype(module))
return 0
if(module.holder && module.holder.wearer)
var/mob/living/carbon/human/H = module.holder.wearer
if(istype(H) && H.back)
var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
var/prog_path = text2path(projectile_type)
in_chamber = new prog_path(src)
return 1
return 0
+15 -3
View File
@@ -138,7 +138,7 @@
piece.name = "[suit_type] [initial(piece.name)]"
piece.desc = "It seems to be part of a [src.name]."
piece.icon_state = "[initial(icon_state)]"
piece.armor = armor
piece.armor = armor.Copy()
piece.min_cold_protection_temperature = min_cold_protection_temperature
piece.max_heat_protection_temperature = max_heat_protection_temperature
piece.siemens_coefficient = siemens_coefficient
@@ -227,7 +227,7 @@
if(!failed_to_seal && M.back == src && piece == compare_piece)
if(!instant)
if(!do_after(M,SEAL_DELAY))
if(!do_after(M,SEAL_DELAY,needhand=0))
failed_to_seal = 1
piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]"
@@ -251,6 +251,13 @@
else
helmet.flags &= ~AIRTIGHT
helmet.update_light(wearer)
//sealed pieces become airtight, protecting against diseases
if (!seal_target)
piece.armor["bio"] = 100
else
piece.armor["bio"] = src.armor["bio"]
else
failed_to_seal = 1
@@ -508,6 +515,8 @@
return
if(href_list["toggle_piece"])
if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying))
return 0
toggle_piece(href_list["toggle_piece"], usr)
else if(href_list["toggle_seals"])
toggle_seals(usr)
@@ -536,7 +545,7 @@
usr.set_machine(src)
src.add_fingerprint(usr)
return
return 1
/obj/item/weapon/rig/proc/notify_ai(var/message)
if(!message || !installed_modules || !installed_modules.len)
@@ -572,6 +581,9 @@
if(!istype(wearer) || !wearer.back == src)
return
if(usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) // If the usr isn't wearing the suit it's probably an AI.
return
var/obj/item/check_slot
var/equip_to
var/obj/item/use_obj
@@ -180,7 +180,7 @@
installed_modules -= removed
update_icon()
return
return
// If we've gotten this far, all we have left to do before we pass off to root procs
// is check if any of the loaded modules want to use the item we've been given.
@@ -4,7 +4,7 @@
/obj/item/clothing/head/helmet/space/rig
name = "helmet"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|FACE|EYES
heat_protection = HEAD|FACE|EYES
@@ -14,7 +14,7 @@
/obj/item/clothing/gloves/rig
name = "gauntlets"
flags = FPRINT | TABLEPASS | THICKMATERIAL
flags = THICKMATERIAL
body_parts_covered = HANDS
heat_protection = HANDS
cold_protection = HANDS
@@ -36,7 +36,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT|HIDETAIL
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
slowdown = 0
breach_threshold = 35
can_breach = 1
@@ -120,8 +120,8 @@
/obj/item/weapon/rig/verb/toggle_seals_verb()
set name = "Toggle Seals"
set desc = "Activates or deactivates your rig seals."
set name = "Toggle Hardsuit"
set desc = "Activates or deactivates your rig."
set category = "Hardsuit"
set src = usr.contents
@@ -208,6 +208,8 @@
var/obj/item/rig_module/module = input("Which module do you wish to select?") as null|anything in selectable
if(!istype(module))
selected_module = null
usr << "<font color='blue'><b>Primary system is now: deselected.</b></font>"
return
selected_module = module
@@ -23,7 +23,6 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/datajack,
/obj/item/rig_module/mounted
)
/obj/item/weapon/rig/ert/engineer
@@ -62,5 +61,5 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/grenade_launcher,
/obj/item/rig_module/mounted
/obj/item/rig_module/mounted/egun,
)
@@ -7,7 +7,7 @@
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
slowdown = 0
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
offline_slowdown = 0
offline_vision_restriction = 0
@@ -46,7 +46,7 @@
/obj/item/clothing/head/helmet/space/rig/mask
name = "mask"
flags = FPRINT | TABLEPASS | THICKMATERIAL
flags = THICKMATERIAL
/obj/item/weapon/rig/light/ninja
name = "ominous suit control module"
@@ -6,7 +6,7 @@
name = "Space helmet"
icon_state = "space"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
item_state = "space"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
@@ -53,7 +53,7 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
slowdown = 3
+13 -13
View File
@@ -55,6 +55,13 @@
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any.
/obj/item/clothing/suit/space/void/refit_for_species(var/target_species)
..()
if(istype(helmet))
helmet.refit_for_species(target_species)
if(istype(boots))
boots.refit_for_species(target_species)
/obj/item/clothing/suit/space/void/equipped(mob/M)
..()
@@ -68,20 +75,15 @@
if(helmet)
if(H.head)
M << "You are unable to deploy your suit's helmet as \the [H.head] is in the way."
else
else if (H.equip_to_slot_if_possible(helmet, slot_head))
M << "Your suit's helmet deploys with a hiss."
//TODO: Species check, skull damage for forcing an unfitting helmet on?
helmet.loc = H
H.equip_to_slot(helmet, slot_head)
helmet.canremove = 0
if(boots)
if(H.shoes)
M << "You are unable to deploy your suit's magboots as \the [H.shoes] are in the way."
else
else if (H.equip_to_slot_if_possible(boots, slot_shoes))
M << "Your suit's boots deploy with a hiss."
boots.loc = H
H.equip_to_slot(boots, slot_shoes)
boots.canremove = 0
/obj/item/clothing/suit/space/void/dropped()
@@ -132,12 +134,10 @@
if(H.head)
H << "<span class='danger'>You cannot deploy your helmet while wearing another helmet.</span>"
return
//TODO: Species check, skull damage for forcing an unfitting helmet on?
helmet.loc = H
helmet.pickup(H)
H.equip_to_slot(helmet, slot_head)
helmet.canremove = 0
H << "<font color='blue'><b>You deploy your suit helmet, sealing you off from the world.</b></font>"
if(H.equip_to_slot_if_possible(helmet, slot_head))
helmet.pickup(H)
helmet.canremove = 0
H << "<font color='blue'><b>You deploy your suit helmet, sealing you off from the world.</b></font>"
helmet.update_light(H)
/obj/item/clothing/suit/space/void/attackby(obj/item/W as obj, mob/user as mob)
+4 -5
View File
@@ -2,7 +2,7 @@
/obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | THICKMATERIAL
flags = THICKMATERIAL
cold_protection = UPPER_TORSO|LOWER_TORSO
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
@@ -17,7 +17,7 @@
icon_state = "armor"
item_state = "armor"
blood_overlay_type = "armor"
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
flags = ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/security
@@ -71,7 +71,7 @@
item_state = "swat_suit"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 1
@@ -98,7 +98,7 @@
icon_state = "detective-armor"
item_state = "armor"
blood_overlay_type = "armor"
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
flags = ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
@@ -113,7 +113,6 @@
item_state = "reactiveoff"
blood_overlay_type = "armor"
slowdown = 1
flags = FPRINT | TABLEPASS
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/reactive/IsShield()
+1 -2
View File
@@ -4,7 +4,7 @@
icon_state = "bio"
desc = "A hood that protects the head and face from biological comtaminants."
permeability_coefficient = 0.01
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
body_parts_covered = HEAD|FACE|EYES
@@ -18,7 +18,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
+1 -12
View File
@@ -36,7 +36,6 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|ARMS
@@ -45,7 +44,6 @@
desc = "Yarr."
icon_state = "hgpirate"
item_state = "hgpirate"
flags = FPRINT | TABLEPASS
flags_inv = HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
@@ -55,7 +53,7 @@
desc = "Suit for a cyborg costume."
icon_state = "death"
item_state = "death"
flags = FPRINT | TABLEPASS | CONDUCT
flags = CONDUCT
fire_resist = T0C+5200
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -65,7 +63,6 @@
desc = "A heavy great coat"
icon_state = "nazi"
item_state = "nazi"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/johnny_coat
@@ -73,7 +70,6 @@
desc = "Johnny~~"
icon_state = "johnny"
item_state = "johnny"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/justice
@@ -81,7 +77,6 @@
desc = "This pretty much looks ridiculous."
icon_state = "justice"
item_state = "justice"
flags = FPRINT | TABLEPASS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -91,7 +86,6 @@
desc = "This robe commands authority."
icon_state = "judge"
item_state = "judge"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash)
flags_inv = HIDEJUMPSUIT
@@ -120,7 +114,6 @@
item_state = "space_suit_syndicate"
desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
flags = FPRINT | TABLEPASS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -223,21 +216,18 @@
desc = "A long, thick black leather coat."
icon_state = "leathercoat"
item_state = "leathercoat"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/browncoat
name = "brown leather coat"
desc = "A long, brown leather coat."
icon_state = "browncoat"
item_state = "browncoat"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/neocoat
name = "black coat"
desc = "A flowing, black coat."
icon_state = "neocoat"
item_state = "neocoat"
flags = FPRINT | TABLEPASS
//stripper
/obj/item/clothing/under/stripper
@@ -361,7 +351,6 @@
desc = "A thick, well-worn WW2 leather bomber jacket."
icon_state = "bomber"
item_state = "bomber"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|ARMS
cold_protection = UPPER_TORSO|ARMS
min_cold_protection_temperature = T0C - 20
+3 -4
View File
@@ -21,7 +21,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPSPRESSUREDMAGE
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -47,7 +47,7 @@
name = "bomb hood"
desc = "Use in case of bomb."
icon_state = "bombsuit"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
body_parts_covered = HEAD|FACE|EYES
@@ -62,7 +62,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEJUMPSUIT|HIDETAIL
@@ -89,7 +88,7 @@
name = "Radiation Hood"
icon_state = "rad"
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
-14
View File
@@ -3,7 +3,6 @@
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
@@ -17,21 +16,18 @@
icon_state = "blue"
item_state = "b_suit"
item_color = "blue"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
item_color = "green"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
icon_state = "grey"
item_state = "gy_suit"
item_color = "grey"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
@@ -41,35 +37,30 @@
item_color = "orange"
has_sensor = 2
sensor_mode = 3
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
icon_state = "pink"
item_state = "p_suit"
item_color = "pink"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
item_color = "red"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
item_color = "white"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
item_color = "yellow"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
@@ -88,7 +79,6 @@
desc = "aqua"
icon_state = "aqua"
item_color = "aqua"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/purple
name = "purple jumpsuit"
@@ -120,14 +110,12 @@
desc = "lightbrown"
icon_state = "lightbrown"
item_color = "lightbrown"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/brown
name = "brown jumpsuit"
desc = "brown"
icon_state = "brown"
item_color = "brown"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/yellowgreen
name = "yellowgreen jumpsuit"
@@ -140,7 +128,6 @@
desc = "darkblue"
icon_state = "darkblue"
item_color = "darkblue"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lightred
name = "lightred jumpsuit"
@@ -153,4 +140,3 @@
desc = "darkred"
icon_state = "darkred"
item_color = "darkred"
flags = FPRINT | TABLEPASS
@@ -6,7 +6,6 @@
icon_state = "ba_suit"
item_state = "ba_suit"
item_color = "ba_suit"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
@@ -15,7 +14,6 @@
icon_state = "captain"
item_state = "caparmor"
item_color = "captain"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/cargo
@@ -32,7 +30,6 @@
icon_state = "cargotech"
item_state = "lb_suit"
item_color = "cargo"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -42,7 +39,6 @@
icon_state = "chaplain"
item_state = "bl_suit"
item_color = "chapblack"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/chef
@@ -50,7 +46,6 @@
name = "chef's uniform"
icon_state = "chef"
item_color = "chef"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/clown
@@ -59,7 +54,6 @@
icon_state = "clown"
item_state = "clown"
item_color = "clown"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/head_of_personnel
@@ -68,7 +62,6 @@
icon_state = "hop"
item_state = "b_suit"
item_color = "hop"
flags = FPRINT | TABLEPASS
/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."
@@ -76,7 +69,6 @@
icon_state = "hopwhimsy"
item_state = "hopwhimsy"
item_color = "hopwhimsy"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/hydroponics
@@ -86,7 +78,6 @@
item_state = "g_suit"
item_color = "hydroponics"
permeability_coefficient = 0.50
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/internalaffairs
@@ -95,7 +86,6 @@
icon_state = "internalaffairs"
item_state = "internalaffairs"
item_color = "internalaffairs"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/janitor
@@ -104,13 +94,11 @@
icon_state = "janitor"
item_color = "janitor"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "Lawyer suit"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lawyer/black
@@ -176,7 +164,6 @@
icon_state = "mime"
item_state = "mime"
item_color = "mime"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/miner
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
@@ -6,7 +6,6 @@
item_state = "g_suit"
item_color = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians."
@@ -14,7 +13,6 @@
icon_state = "atmos"
item_state = "atmos_suit"
item_color = "atmos"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
@@ -23,7 +21,6 @@
item_state = "engi_suit"
item_color = "engine"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
@@ -8,7 +8,6 @@
item_state = "g_suit"
item_color = "director"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/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."
@@ -17,7 +16,6 @@
item_state = "rdalt"
item_color = "rdalt"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/research_director/dress_rd
name = "research director dress uniform"
@@ -25,7 +23,6 @@
icon_state = "dress_rd"
item_color = "dress_rd"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/rank/scientist
@@ -36,7 +33,6 @@
item_color = "sciencewhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/chemist
@@ -68,7 +64,6 @@
item_color = "geneticswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/virologist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
@@ -116,28 +111,24 @@
item_color = "medical"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/blue
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"
flags = FPRINT | TABLEPASS
/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"
flags = FPRINT | TABLEPASS
/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"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
@@ -145,7 +136,6 @@
icon_state = "psych"
item_state = "w_suit"
item_color = "psych"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/psych/turtleneck
desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist."
@@ -153,7 +143,6 @@
icon_state = "psychturtle"
item_state = "b_suit"
item_color = "psychturtle"
flags = FPRINT | TABLEPASS
/*
+1 -8
View File
@@ -15,7 +15,6 @@
item_state = "r_suit"
item_color = "warden"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security
@@ -25,7 +24,6 @@
item_state = "r_suit"
item_color = "secred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/dispatch
@@ -35,7 +33,6 @@
item_state = "dispatch"
item_color = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
siemens_coefficient = 0.9
@@ -46,7 +43,6 @@
item_state = "r_suit"
item_color = "redshirt2"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security/corp
@@ -66,7 +62,6 @@
item_state = "swatunder"
item_color = "swatunder"
armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/*
@@ -79,7 +74,6 @@
item_state = "det"
item_color = "detective"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/det/black
@@ -122,7 +116,6 @@
item_state = "r_suit"
item_color = "hosred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.8
/obj/item/clothing/under/rank/head_of_security/corp
@@ -134,7 +127,7 @@
name = "Head of Security Hat"
desc = "The hat of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
flags_inv = HIDEEARS
body_parts_covered = 0
@@ -31,7 +31,6 @@
name = "amish suit"
icon_state = "sl_suit"
item_color = "sl_suit"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/waiter
name = "waiter's outfit"
@@ -39,7 +38,6 @@
icon_state = "waiter"
item_state = "waiter"
item_color = "waiter"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
@@ -93,7 +91,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
@@ -106,7 +103,6 @@
desc = "it's a cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -118,7 +114,6 @@
desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
icon_state = "owl"
item_color = "owl"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
-1
View File
@@ -2,7 +2,6 @@
name = "athletic shorts"
desc = "95% Polyester, 5% Spandex!"
gender = PLURAL
flags = FPRINT | TABLEPASS
body_parts_covered = LOWER_TORSO
/obj/item/clothing/under/shorts/red
-1
View File
@@ -5,7 +5,6 @@
icon_state = "bluetie"
item_state = "" //no inhands
item_color = "bluetie"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_TIE
w_class = 2.0
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
+1 -12
View File
@@ -407,7 +407,6 @@
item_state = "ciglit"
w_class = 1
body_parts_covered = null
flags = FPRINT|TABLEPASS
//Strange penlight, Nerezza: Asher Spock
@@ -787,7 +786,6 @@
name = "colonial marine beret"
desc = "A well-worn navy blue beret. The insignia of the Martian Colonial Marine Corps is affixed to the front."
icon_state = "officerberet"
flags = FPRINT | TABLEPASS
////////////////////////////// Serithi - Adapted Security Helmet //////////////////////////////
@@ -841,7 +839,6 @@
/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle
icon = 'icons/obj/chemical.dmi'
flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first!
New(loc, var/color, var/labeled)
..()
name = "[labeled] bottle"
@@ -1073,7 +1070,6 @@
item_color = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
flags = FPRINT | TABLEPASS
//Suit roll-down toggle.
/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
@@ -1137,7 +1133,6 @@
icon_state = "radi_pendant"
item_state = "radi_pendant"
item_color = "radi_pendant"
flags = FPRINT|TABLEPASS
w_class = 2.0
//////////// Masks ////////////
@@ -1149,7 +1144,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "flagmask"
item_state = "flagmask"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
*/
@@ -1159,7 +1154,6 @@
desc = "A silver and emerald shamrock pendant. It has the initials \"M.K.\" engraved on the back."
icon = 'icons/obj/custom_items.dmi'
icon_state = "mara_kilpatrick_1"
flags = FPRINT|TABLEPASS
w_class = 2
/////////////// Oen'g Issek Medical Mask //////////////////////////
@@ -1182,7 +1176,6 @@
item_state = "altair_locket"
item_color = "altair_locket"
slot_flags = 0
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1196,7 +1189,6 @@
item_state = "konaahirano"
item_color = "konaahirano"
slot_flags = 0
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
var/obj/item/held //Item inside locket.
@@ -1226,7 +1218,6 @@
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
icon = 'icons/obj/custom_items.dmi'
icon_state = "nasir_khayyam_1"
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1237,7 +1228,6 @@
desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
icon = 'icons/obj/custom_items.dmi'
icon_state = "ty_foster"
flags = FPRINT|TABLEPASS
w_class = 2
////// Apollon Pendant - Michael Guess - Dragor23
@@ -1246,7 +1236,6 @@
desc = "A pendant with the form of a sacrificial tripod, used in acient greece. It's a symbol of the Olympian Apollon, a god associated with oracles, poetry, the sun and healing."
icon = 'icons/obj/custom_items.dmi'
icon_state = "michael_guess_1"
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK
body_parts_covered = 0
+12
View File
@@ -122,6 +122,18 @@
throw_speed = 3
throw_range = 5
/obj/item/weapon/f_card/add_fingerprint(mob/living/M as mob, ignoregloves = 0)
if(..())
var/mob/living/carbon/human/H = M
var/full_print = md5(H.dna.uni_identity)
fingerprints[full_print] = full_print
/obj/item/weapon/f_card/examine(mob/user)
..()
if(fingerprints.len)
user << "<span class='notice'>Fingerprints on this card:</span>"
for(var/print in fingerprints)
user << "<span class='notice'>\t[fingerprints[print]]</span>"
/obj/item/weapon/fcardholder
name = "fingerprint card case"
@@ -23,7 +23,7 @@
possible_transfer_amounts = list(5)
volume = 5
can_be_placed_into = null
flags = FPRINT | TABLEPASS | OPENCONTAINER | NOBLUDGEON
flags = OPENCONTAINER | NOBLUDGEON
/obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob)
return
+9 -1
View File
@@ -70,4 +70,12 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
fields["blood"] = blood
fields["area"] = other.fields["area"]
fields["time"] = other.fields["time"]
fields["time"] = other.fields["time"]
/datum/data/record/forensic/proc/update_prints(var/list/o_prints)
var/list/prints = fields["fprints"]
for(var/print in o_prints)
if(prints[print])
prints[print] = stringmerge(prints[print], o_prints[print])
.=1
fields["fprints"] = prints
+10 -2
View File
@@ -5,7 +5,7 @@
var/list/stored = list()
w_class = 3.0
item_state = "electronic"
flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
flags = CONDUCT | NOBLUDGEON
slot_flags = SLOT_BELT
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
@@ -104,4 +104,12 @@
if(old)
fresh.merge(old)
. = 1
stored["\ref [A]"] = fresh
stored["\ref [A]"] = fresh
/obj/item/device/detective_scanner/verb/wipe()
set name = "Wipe Forensic Data"
set category = "Object"
set src in view(1)
if (alert("Are you sure you want to wipe all data from [src]?",,"Yes","No") == "Yes")
stored = list()
usr << "<span class='notice'>Forensic data erase complete.</span>"
+13 -7
View File
@@ -59,17 +59,23 @@
fresh.fields["label"] = old.fields["label"]
files[fresh.uid] = fresh
//updating partial prints on other things
var/list/fprints = fresh.fields["fprints"]
if(fprints.len)
for(var/id in files)
var/datum/data/record/forensic/rec = files[id]
if(rec.update_prints(fprints))
files[id] = rec
/obj/machinery/computer/forensic_scanning/proc/process_card(var/obj/item/weapon/f_card/card)
if(card.fingerprints)
usr << "<span class='notice'>\The [src] sucks in \the [card] and whirrs, scanning it.</span>"
var/found = 0
for(var/id in files)
var/datum/data/record/forensic/rec = files[id]
var/list/prints = rec.fields["fprints"]
for(var/master_print in card.fingerprints)
if(prints[master_print])
prints[master_print] = master_print
found = 1
found = rec.update_prints(card.fingerprints)
if (found)
files[id] = rec
if(found)
usr << "<span class='notice'>Complete match found.</span>"
else
@@ -189,7 +195,7 @@
dat += "<br>NO RECORD SELECTED"
else
dat += get_printable_data(current)
dat += "<b>Labels:</b> "
dat += "<br><b>Labels:</b> "
dat += "<a href='?src=\ref[src];operation=label'>[current.fields["label"] ? current.fields["label"] : "None"]</a><br>"
dat += "<a href='?src=\ref[src];operation=print'>Print record</a><br>"
@@ -302,4 +308,4 @@
ping("Scan complete.")
var/datum/data/record/forensic/fresh = new(scanning)
add_record(fresh)
updateUsrDialog()
updateUsrDialog()
+16 -8
View File
@@ -18,19 +18,27 @@
/datum/event/carp_migration/start()
if(severity == EVENT_LEVEL_MAJOR)
for(var/i = 1 to rand(3,5))
spawn_fish(landmarks_list.len)
else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(landmarks_list.len)
else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups
else
spawn_fish(rand(1, 5))
spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs
/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min=3, var/group_size_max=5)
var/list/spawn_locations = list()
/datum/event/carp_migration/proc/spawn_fish(var/limit)
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc))
if(spawned_carp.len >= limit)
return
spawn_locations.Add(C.loc)
spawn_locations = shuffle(spawn_locations)
num_groups = min(num_groups, spawn_locations.len)
var/i = 1
while (i <= num_groups)
var/group_size = rand(group_size_min, group_size_max)
for (var/j = 1, j <= group_size, j++)
spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
i++
/datum/event/carp_migration/end()
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
+17 -17
View File
@@ -25,7 +25,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
if(!next_event_time)
set_event_delay()
if(delayed)
if(delayed || !config.allow_random_events)
next_event_time += (world.time - last_world_time)
else if(world.time > next_event_time)
start_event()
@@ -139,22 +139,22 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
/datum/event_container/moderate
severity = EVENT_LEVEL_MODERATE
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 10),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 5, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_SECURITY = 25)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 5)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 50, list(ASSIGNMENT_AI = 25, ASSIGNMENT_SECURITY = 25)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 50)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 25, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 15, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 15)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 5, list(ASSIGNMENT_SECURITY = 5), 1),
new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5,list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 25, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SCIENTIST = 5)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 200, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
)
/datum/event_container/major
+9 -1
View File
@@ -45,6 +45,10 @@
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
/datum/event_manager/proc/delay_events(var/severity, var/delay)
var/list/datum/event_container/EC = event_containers[severity]
EC.next_event_time += delay
/datum/event_manager/proc/Interact(var/mob/living/user)
var/html = GetInteractWindow()
@@ -75,6 +79,7 @@
/datum/event_manager/proc/GetInteractWindow()
var/html = "<A align='right' href='?src=\ref[src];refresh=1'>Refresh</A>"
html += "<A align='right' href='?src=\ref[src];pause_all=[!config.allow_random_events]'>Pause All - [config.allow_random_events ? "Pause" : "Resume"]</A>"
if(selected_event_container)
var/event_time = max(0, selected_event_container.next_event_time - world.time)
@@ -92,7 +97,7 @@
html += "<td>[EM.max_weight]</td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_oneshot=\ref[EM]'>[EM.one_shot]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_enabled=\ref[EM]'>[EM.enabled]</A></td>"
html += "<td><span class='alert'>[EM.get_weight()]</span></td>"
html += "<td><span class='alert'>[EM.get_weight(number_active_with_role())]</span></td>"
html += "<td><A align='right' href='?src=\ref[src];remove=\ref[EM];EC=\ref[selected_event_container]'>Remove</A></td>"
html += "</tr>"
html += "</table>"
@@ -207,6 +212,9 @@
var/datum/event_container/EC = locate(href_list["pause"])
EC.delayed = !EC.delayed
admin_log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.")
else if(href_list["pause_all"])
config.allow_random_events = text2num(href_list["pause_all"])
admin_log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.")
else if(href_list["interval"])
var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null
if(delay && delay > 0)
+2 -1
View File
@@ -8,7 +8,8 @@
power_failure(0)
/datum/event/grid_check/announce()
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
if (prob(30))
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
/datum/event/grid_check/end()
power_restore()
+29 -3
View File
@@ -1,11 +1,36 @@
datum/event/viral_infection
var/list/viruses = list()
datum/event/viral_infection/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
//generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected
var/num_diseases = rand(1,3)
for (var/i=0, i < num_diseases, i++)
var/datum/disease2/disease/D = new /datum/disease2/disease
var/strength = 1 //whether the disease is of the greater or lesser variety
if (severity >= EVENT_LEVEL_MAJOR && prob(75))
strength = 2
D.makerandom(strength)
viruses += D
datum/event/viral_infection/announce()
command_announcement.Announce("Confirmed outbreak of level five biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
var/level
if (severity == EVENT_LEVEL_MUNDANE)
return
else if (severity == EVENT_LEVEL_MODERATE)
level = pick("one", "two", "three", "four")
else
level = "five"
if (severity == EVENT_LEVEL_MAJOR || prob(60))
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
datum/event/viral_infection/start()
if(!viruses.len) return
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
@@ -13,9 +38,10 @@ datum/event/viral_infection/start()
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
severity = severity == 1 ? 1 : severity - 1
severity = max(EVENT_LEVEL_MUNDANE, severity - 1)
var/actual_severity = severity * rand(1, 3)
while(actual_severity > 0 && candidates.len)
infect_mob_random_lesser(candidates[1])
var/datum/disease2/disease/D = pick(viruses)
infect_mob(candidates[1], D.getcopy())
candidates.Remove(candidates[1])
actual_severity--
@@ -40,7 +40,6 @@
icon = 'icons/obj/harvest.dmi'
icon_state = "logs"
force = 5
flags = TABLEPASS
throwforce = 5
w_class = 3.0
throw_speed = 3
@@ -71,7 +70,6 @@
icon_state = "sunflower"
damtype = "fire"
force = 0
flags = TABLEPASS
throwforce = 1
w_class = 1.0
throw_speed = 1
@@ -89,7 +87,6 @@
icon_state = "nettle"
damtype = "fire"
force = 15
flags = TABLEPASS
throwforce = 1
w_class = 2.0
throw_speed = 1
+5 -9
View File
@@ -168,7 +168,7 @@
/obj/item/weapon/plantspray
icon = 'icons/obj/hydroponics.dmi'
item_state = "spray"
flags = TABLEPASS | FPRINT | NOBLUDGEON
flags = NOBLUDGEON
slot_flags = SLOT_BELT
throwforce = 4
w_class = 2.0
@@ -220,7 +220,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
flags = CONDUCT | NOBLUDGEON
force = 5.0
throwforce = 7.0
w_class = 2.0
@@ -236,7 +236,6 @@
name = "bottle of weedkiller"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
flags = FPRINT | TABLEPASS
var/toxicity = 0
var/weed_kill_str = 0
@@ -244,7 +243,6 @@
name = "bottle of glyphosate"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
flags = FPRINT | TABLEPASS
toxicity = 4
weed_kill_str = 2
@@ -252,7 +250,6 @@
name = "bottle of triclopyr"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle18"
flags = FPRINT | TABLEPASS
toxicity = 6
weed_kill_str = 4
@@ -260,7 +257,6 @@
name = "bottle of 2,4-D"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle15"
flags = FPRINT | TABLEPASS
toxicity = 8
weed_kill_str = 7
@@ -274,7 +270,7 @@
desc = "A small glass bottle. Can hold up to 10 units."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
flags = FPRINT | TABLEPASS | OPENCONTAINER
flags = OPENCONTAINER
possible_transfer_amounts = null
w_class = 2.0
@@ -314,7 +310,7 @@
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
icon = 'icons/obj/weapons.dmi'
icon_state = "hatchet"
flags = FPRINT | TABLEPASS | CONDUCT
flags = CONDUCT
force = 12.0
w_class = 2.0
throwforce = 15.0
@@ -347,7 +343,7 @@
throw_speed = 1
throw_range = 3
w_class = 4.0
flags = FPRINT | TABLEPASS | NOSHIELD
flags = NOSHIELD
slot_flags = SLOT_BACK
origin_tech = "materials=2;combat=2"
attack_verb = list("chopped", "sliced", "cut", "reaped")
+2 -2
View File
@@ -217,8 +217,8 @@ proc/populate_seed_list()
"water",
"potassium",
"plasticide",
"slimetoxin",
"aslimetoxin",
"mutationtoxin",
"amutationtoxin",
"inaprovaline",
"space_drugs",
"paroxetine",
-1
View File
@@ -3,7 +3,6 @@
name = "packet of seeds"
icon = 'icons/obj/seeds.dmi'
icon_state = "seed"
flags = FPRINT | TABLEPASS
w_class = 2.0
var/seed_type
+2
View File
@@ -362,6 +362,8 @@
SV.life()
if(!SV) continue
if(SV.energy < 2) //If tile isn't fully grown
var/chance
if(seed)
-2
View File
@@ -126,7 +126,6 @@
throw_speed = 1
throw_range = 5
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
flags = FPRINT | TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
var/dat // Actual page content
var/due_date = 0 // Game time in 1/10th seconds
@@ -254,7 +253,6 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
flags = FPRINT | TABLEPASS
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/items.dmi'
name = "Coin"
icon_state = "coin"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
force = 0.0
throwforce = 0.0
w_class = 1.0
+2 -2
View File
@@ -52,7 +52,7 @@
name = "pickaxe"
icon = 'icons/obj/items.dmi'
icon_state = "pickaxe"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
slot_flags = SLOT_BELT
force = 15.0
throwforce = 4.0
@@ -150,7 +150,7 @@
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/items.dmi'
icon_state = "shovel"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
slot_flags = SLOT_BELT
force = 8.0
throwforce = 4.0
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/storage.dmi'
name = "Money bag"
icon_state = "moneybag"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
force = 10.0
throwforce = 2.0
w_class = 4.0
+1 -1
View File
@@ -143,7 +143,7 @@ Works together with spawning an observer, noted above.
ghost.can_reenter_corpse = can_reenter_corpse
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
ghost.key = key
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
return ghost
+2 -1
View File
@@ -40,8 +40,9 @@
/mob/living/var/holder_type
/mob/living/proc/get_scooped(var/mob/living/carbon/grabber)
if(!holder_type)
if(!holder_type || buckled || pinned.len)
return
var/obj/item/weapon/holder/H = new holder_type(loc)
src.loc = H
H.name = loc.name
@@ -7,6 +7,7 @@
pass_flags = PASSTABLE
health = 100
maxHealth = 100
mob_size = 4
var/adult_form
var/dead_icon
@@ -3,7 +3,6 @@
health = 400 //They need to live awhile longer than other organs.
desc = "A piece of juicy meat found in a person's head."
icon_state = "brain2"
flags = TABLEPASS
force = 1.0
w_class = 2.0
throwforce = 1.0
@@ -871,6 +871,7 @@
else
target.show_message("\blue You hear a voice that seems to echo around the room: [say]")
usr.show_message("\blue You project your mind into [target.real_name]: [say]")
log_say("[key_name(usr)] sent a telepathic message to [key_name(target)]: [say]")
for(var/mob/dead/observer/G in world)
G.show_message("<i>Telepathic message from <b>[src]</b> to <b>[target]</b>: [say]</i>")
@@ -120,7 +120,7 @@ emp_act
/mob/living/carbon/human/proc/getarmor_organ(var/datum/organ/external/def_zone, var/type)
if(!type) return 0
var/protection = 0
var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform)
var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes)
for(var/gear in protective_gear)
if(gear && istype(gear ,/obj/item/clothing))
var/obj/item/clothing/C = gear
@@ -640,9 +640,10 @@ It can still be worn/put on as normal.
W.hold.close(usr)
usr.put_in_hands(tie)
suit.hastie = null*/
suit.hastie.on_removed(usr)
suit.hastie = null
target.update_inv_w_uniform()
if(suit && suit.hastie)
suit.hastie.on_removed(usr)
suit.hastie = null
target.update_inv_w_uniform()
if("id")
slot_to_process = slot_wear_id
if (target.wear_id)
+11 -14
View File
@@ -407,11 +407,10 @@
loc.assume_air(breath)
//spread some viruses while we are at it
if (virus2.len > 0)
if (prob(10) && get_infection_chance(src))
// log_debug("[src] : Exhaling some viruses")
for(var/mob/living/carbon/M in view(1,src))
src.spread_disease_to(M)
if (virus2.len > 0 && prob(10))
// log_debug("[src] : Exhaling some viruses")
for(var/mob/living/carbon/M in view(1,src))
src.spread_disease_to(M)
proc/get_breath_from_internal(volume_needed)
@@ -1426,21 +1425,19 @@
client.screen |= G.overlay
if(G.vision_flags)
sight |= G.vision_flags
if(!druggy)
if(!druggy && !seer)
see_invisible = SEE_INVISIBLE_MINIMUM
if(istype(G,/obj/item/clothing/glasses/night))
if(istype(G,/obj/item/clothing/glasses/night) && !seer)
see_invisible = SEE_INVISIBLE_MINIMUM
/* HUD shit goes here, as long as it doesn't modify sight flags */
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
var/obj/item/clothing/glasses/hud/O = G
if(istype(G, /obj/item/clothing/glasses/sunglasses/sechud))
var/obj/item/clothing/glasses/sunglasses/sechud/O = G
if(O.hud) O.hud.process_hud(src)
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
else if(istype(G, /obj/item/clothing/glasses/hud))
var/obj/item/clothing/glasses/hud/O = G
var/obj/item/clothing/glasses/sunglasses/sechud/S = G
O = S.hud
if(istype(O))
O.process_hud(src)
if(!druggy)
see_invisible = SEE_INVISIBLE_LIVING
if(!druggy && !seer) see_invisible = SEE_INVISIBLE_LIVING
proc/handle_random_events()
// Puke if toxloss is too high
@@ -35,23 +35,29 @@
if("head", "mouth", "eyes")
// ----- HEAD ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] scratched [target] across \his cheek!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!</span>")
if(5) user.visible_message("<span class='danger'>[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]</span>")
if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot")
if(1 to 2)
user.visible_message("<span class='danger'>[user] scratched [target] across \his cheek!</span>")
if(3 to 4)
user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target]'s [pick("head", "neck")]!</span>") //'with spread claws' sounds a little bit odd, just enough that conciseness is better here I think
if(5)
user.visible_message(pick(
"<span class='danger'>[user] rakes \his [pick(attack_noun)] across [target]'s face!</span>",
"<span class='danger'>[user] tears \his [pick(attack_noun)] into [target]'s face!</span>",
))
else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] scratched [target]'s [affecting.display_name]!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!</span>")
if(5) user.visible_message("<span class='danger'>[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!</span>")
if(5) user.visible_message("<span class='danger'>[user] tears \his [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.display_name]!</span>")
/datum/unarmed_attack/claws/strong
attack_verb = list("slash")
attack_verb = list("slashed")
damage = 10
shredding = 1
/datum/unarmed_attack/bite/strong
attack_verb = list("maul")
attack_verb = list("mauled")
damage = 15
shredding = 1
@@ -15,7 +15,7 @@ var/const/MAX_ACTIVE_TIME = 400
icon_state = "facehugger"
item_state = "facehugger"
w_class = 1 //note: can be picked up by aliens unlike most other items of w_class below 4
flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
body_parts_covered = FACE|EYES
throw_range = 5
@@ -35,17 +35,18 @@
switch(zone) // strong punches can have effects depending on where they hit
if("head", "mouth", "eyes")
// Induce blurriness
target.visible_message("<span class='danger'>[target] looks dazed.</span>", "<span class='danger'>You see stars.</span>")
target.visible_message("<span class='danger'>[target] looks momentarily disoriented.</span>", "<span class='danger'>You see stars.</span>")
target.apply_effect(attack_damage*2, EYE_BLUR, armour)
if("l_arm", "l_hand")
if (target.l_hand)
// Disarm left hand
target.visible_message("<span class='danger'>[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!</span>")
//Urist McAssistant dropped the macguffin with a scream just sounds odd. Plus it doesn't work with NO_PAIN
target.visible_message("<span class='danger'>\The [target.l_hand] was knocked right out of [src]'s grasp!</span>")
target.drop_l_hand()
if("r_arm", "r_hand")
if (target.r_hand)
// Disarm right hand
target.visible_message("<span class='danger'>[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!</span>")
target.visible_message("<span class='danger'>\The [target.r_hand] was knocked right out of [src]'s grasp!</span>")
target.drop_r_hand()
if("chest")
if(!target.lying)
@@ -113,21 +114,30 @@
if("head", "mouth", "eyes")
// ----- HEAD ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] slapped [target] across \his cheek!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] struck [target] in the head[pick("", " with a closed fist")]!</span>")
if(5) user.visible_message("<span class='danger'>[user] gave [target] a resounding slap to the face!</span>")
if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot")
if(1 to 2)
user.visible_message("<span class='danger'>[user] slapped [target] across \his cheek!</span>")
if(3 to 4)
user.visible_message(pick(
80; "<span class='danger'>[user] [pick(attack_verb)] [target] in the head!</span>", //striking someone with a 'closed fist' is called punching them.
20; "<span class='danger'>[user] struck [target] in the head[pick("", " with a closed fist")]!</span>"
))
if(5)
user.visible_message(pick(
10; "<span class='danger'>[user] gave [target] a resounding slap to the face!</span>",
90; "<span class='danger'>[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!</span>"
))
else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] slapped [target]'s [organ]!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target] in \his [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!</span>")
else
user.visible_message("<span class='danger'>[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!</span>")
user.visible_message("<span class='danger'>[user] [pick("punched", "threw a punch", "struck", "slapped", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!</span>") //why do we have a separate set of verbs for lying targets?
/datum/unarmed_attack/kick
attack_verb = list("kicked", "kneed")
attack_noun = list("kick", "knee strike")
attack_verb = list("kicked", "kicked", "kicked", "kneed")
attack_noun = list("kick", "kick", "kick", "knee strike")
attack_sound = "swing_hit"
damage = 0
@@ -161,7 +171,7 @@
attack_damage = Clamp(attack_damage, 1, 5)
switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] gave [target] a light [pick(attack_noun)] to the [organ]!</span>")
if(1 to 2) user.visible_message("<span class='danger'>[user] threw [target] a glancing [pick(attack_noun)] to the [organ]!</span>") //it's not that they're kicking lightly, it's that the kick didn't quite connect
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target] in \his [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!</span>")
@@ -204,6 +214,6 @@
attack_damage = Clamp(attack_damage, 1, 5)
switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] [pick("clomped on", "treaded on")] [target]'s [organ]!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[pick("[user] stomped down on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[pick("[user] landed a devastating stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!</span>")
if(1 to 2) user.visible_message("<span class='danger'>[user] [pick("stepped on", "treaded on")] [target]'s [organ]!</span>") //stepped on conveys the same meaning and is more recognizable as an actual word than "clomped"
if(3 to 4) user.visible_message("<span class='danger'>[pick("[user] stomped on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!</span>") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/
+2 -1
View File
@@ -37,4 +37,5 @@
var/tod = null // Time of death
var/update_slimes = 1
var/silent = null //Can't talk. Value goes down every life proc.
var/silent = null // Can't talk. Value goes down every life proc.
var/mob_size // Used by lockers.
+1 -1
View File
@@ -54,4 +54,4 @@
var/obj/item/device/aicard/card = loc
card.update_icon()
return ..(gibbed)
return ..(gibbed,"gives one shrill beep before falling lifeless.")
@@ -7,10 +7,16 @@ var/datum/cameranet/cameranet = new()
/datum/cameranet
// The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del().
var/list/cameras = list()
var/cameras_unsorted = 1
// The chunks of the map, mapping the areas that the cameras can see.
var/list/chunks = list()
var/ready = 0
/datum/cameranet/proc/process_sort()
if(cameras_unsorted)
cameras = dd_sortedObjectList(cameras)
cameras_unsorted = 0
// Checks if a chunk has been Generated in x, y, z.
/datum/cameranet/proc/chunkGenerated(x, y, z)
x &= ~0xf
@@ -12,6 +12,7 @@
status_flags = GODMODE // You can't damage it.
mouse_opacity = 0
see_in_dark = 7
invisibility = INVISIBILITY_MAXIMUM
// Movement code. Returns 0 to stop air movement from moving it.
/mob/aiEye/Move()
@@ -92,7 +92,13 @@
/obj/machinery/camera/New()
..()
cameranet.cameras += src //Camera must be added to global list of all cameras no matter what...
//Camera must be added to global list of all cameras no matter what...
if(cameranet.cameras_unsorted || !ticker)
cameranet.cameras += src
cameranet.cameras_unsorted = 1
else
dd_insertObjectList(cameranet.cameras, src)
var/list/open_networks = difflist(network,restricted_camera_networks) //...but if all of camera's networks are restricted, it only works for specific camera consoles.
if(open_networks.len) //If there is at least one open network, chunk is available for AI usage.
cameranet.addCamera(src)
+1 -1
View File
@@ -59,7 +59,7 @@
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
src.see_invisible = SEE_INVISIBLE_LIVING
//Congratulations! You've found a way for AI's to run without using power!
@@ -6,7 +6,7 @@
icon_state = "robotanalyzer"
item_state = "analyzer"
desc = "A hand-held scanner able to diagnose robotic injuries."
flags = FPRINT | TABLEPASS | CONDUCT
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
@@ -234,3 +234,7 @@
sight_mode |= module_state_3:sight_mode
else
src << "<span class='notice'>You need to disable a module first!</span>"
/mob/living/silicon/robot/put_in_hands(var/obj/item/W) // No hands.
W.loc = get_turf(src)
return 1
@@ -1296,4 +1296,5 @@ var/list/robot_verbs_default = list(
if(2) //New Module
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] module change detected: [name] has loaded the [module.name].</span><br>"
if(3) //New Name
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].</span><br>"
if(oldname != newname)
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].</span><br>"
@@ -4,7 +4,7 @@
icon_state = "std_module"
w_class = 100.0
item_state = "electronic"
flags = FPRINT|TABLEPASS | CONDUCT
flags = CONDUCT
var/channels = list()
var/list/modules = list()
var/obj/item/emag = null
@@ -34,8 +34,11 @@
if(!stacktypes || !stacktypes.len) return
for(var/T in stacktypes)
var/O = locate(T) in src.modules
var/obj/item/stack/S = O
var/obj/item/stack/S
for(var/obj/O in src.modules)
if(O.type == T)
S = O
break
if(!S)
src.modules -= null
@@ -43,6 +46,9 @@
src.modules |= S
S.amount = 1
if(!istype(S))
continue
if(S && S.amount < stacktypes[T])
S.amount++
@@ -4,6 +4,7 @@
icon = 'icons/obj/apiary_bees_etc.dmi'
icon_state = "bees1"
icon_dead = "bees1"
mob_size = 1
var/strength = 1
var/feral = 0
var/mut = 0
@@ -129,6 +129,7 @@
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "smashed their armoured gauntlet into"
mob_size = 20
speed = 3
wall_smash = 1
attack_sound = 'sound/weapons/punch3.ogg'
@@ -259,6 +260,7 @@
speed = 5
wall_smash = 1
attack_sound = 'sound/weapons/punch4.ogg'
mob_size = 20
var/energy = 0
var/max_energy = 1000
@@ -22,6 +22,7 @@
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
holder_type = /obj/item/weapon/holder/cat
mob_size = 5
/mob/living/simple_animal/cat/Life()
//MICE!
@@ -50,7 +51,7 @@
if(turns_since_scan > 5)
walk_to(src,0)
turns_since_scan = 0
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
movement_target = null
stop_automated_movement = 0
@@ -68,7 +69,7 @@
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
var/mob/living/carbon/H = over_object
if(!istype(H)) return ..()
if(!istype(H) || !Adjacent(H)) return ..()
if(H.a_intent == "help")
get_scooped(H)
@@ -18,6 +18,8 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
mob_size = 8
var/obj/item/inventory_head
var/obj/item/inventory_back
var/facehugger
@@ -17,6 +17,7 @@
response_harm = "stomps"
stop_automated_movement = 1
friendly = "pinches"
mob_size = 5
var/obj/item/inventory_head
var/obj/item/inventory_mask
@@ -14,4 +14,5 @@
melee_damage_upper = 2
response_help = "pets"
response_disarm = "shoos"
response_harm = "stomps on"
response_harm = "stomps on"
mob_size = 1
@@ -28,6 +28,7 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
universal_understand = 1
mob_size = 1
/mob/living/simple_animal/mouse/Life()
..()
@@ -5,6 +5,7 @@
max_co2 = 0
minbodytemp = 0
maxbodytemp = 500
mob_size = 5
var/obj/item/device/radio/borg/radio = null
var/mob/living/silicon/ai/connected_ai = null
+2 -2
View File
@@ -130,14 +130,14 @@
return 1
return 0
//This is a SAFE proc. Use this instead of equip_to_splot()!
//This is a SAFE proc. Use this instead of equip_to_slot()!
//set del_on_fail to have it delete W if it fails to equip
//set disable_warning to disable the 'you are unable to equip that' warning.
//unset redraw_mob to prevent the mob from being redrawn at the end.
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
if(!istype(W)) return 0
if(!W.mob_can_equip(src, slot, disable_warning))
if(!W.mob_can_equip(src, slot))
if(del_on_fail)
del(W)
else

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