mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-15 09:03:53 +01:00
Merge branch 'dev' into ofMechfabAndPanic
Conflicts: code/__defines/research.dm code/game/mecha/equipment/tools/tools.dm code/game/mecha/mecha_parts.dm code/modules/research/designs.dm maps/exodus-1.dmm
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
proc/log_and_message_admins(var/message as text, var/mob/user = usr)
|
||||
log_admin(user ? "[key_name(user)] [message]" : "EVENT [message]")
|
||||
message_admins(user ? "[key_name(user)] [message]" : "EVENT [message]")
|
||||
message_admins(user ? "[key_name_admin(user)] [message]" : "EVENT [message]")
|
||||
|
||||
proc/log_and_message_admins_many(var/list/mob/users, var/message)
|
||||
if(!users || !users.len)
|
||||
@@ -17,10 +17,6 @@ proc/log_and_message_admins_many(var/list/mob/users, var/message)
|
||||
log_admin("[english_list(user_keys)] [message]")
|
||||
message_admins("[english_list(user_keys)] [message]")
|
||||
|
||||
proc/admin_log_and_message_admins(var/message as text)
|
||||
log_admin(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]")
|
||||
message_admins(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]", 1)
|
||||
|
||||
proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message)
|
||||
if(victim)
|
||||
victim.attack_log += text("\[[time_stamp()]\] <font color='orange'>[key_name(attacker)] - [victim_message]</font>")
|
||||
|
||||
@@ -130,6 +130,7 @@ var/list/admin_verbs_spawn = list(
|
||||
/client/proc/spawn_chemdisp_cartridge
|
||||
)
|
||||
var/list/admin_verbs_server = list(
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/ToRban,
|
||||
/datum/admins/proc/startnow,
|
||||
@@ -731,7 +732,7 @@ var/list/admin_verbs_mentor = list(
|
||||
|
||||
var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "[S.real_name] - Enter new silicon name", S.real_name))
|
||||
if(new_name && new_name != S.real_name)
|
||||
admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
|
||||
log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
|
||||
S.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!
|
||||
|
||||
@@ -746,7 +747,7 @@ var/list/admin_verbs_mentor = list(
|
||||
|
||||
var/datum/nano_module/law_manager/L = new(S)
|
||||
L.ui_interact(usr, state = admin_state)
|
||||
admin_log_and_message_admins("has opened [S]'s law manager.")
|
||||
log_and_message_admins("has opened [S]'s law manager.")
|
||||
feedback_add_details("admin_verb","MSL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/change_human_appearance_admin()
|
||||
@@ -759,7 +760,7 @@ var/list/admin_verbs_mentor = list(
|
||||
var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in human_mob_list
|
||||
if(!H) return
|
||||
|
||||
admin_log_and_message_admins("is altering the appearance of [H].")
|
||||
log_and_message_admins("is altering the appearance of [H].")
|
||||
H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state)
|
||||
feedback_add_details("admin_verb","CHAA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -779,10 +780,10 @@ var/list/admin_verbs_mentor = list(
|
||||
|
||||
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
|
||||
if("Yes")
|
||||
admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
|
||||
log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
|
||||
if("No")
|
||||
admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
|
||||
log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
|
||||
feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/datum/admins/proc/capture_map(tx as num, ty as num, tz as num, range as num)
|
||||
set category = "Server"
|
||||
set name = "Capture Map Part"
|
||||
|
||||
if(!check_rights(R_ADMIN|R_DEBUG|R_SERVER))
|
||||
return
|
||||
|
||||
if(range > 32 || range <= 0)
|
||||
usr << "Capturing range is incorrect, it must be within 1-32."
|
||||
return
|
||||
|
||||
if(locate(tx,ty,tz))
|
||||
var/list/turfstocapture = list()
|
||||
var/hasasked = 0
|
||||
for(var/xoff = 0 to range)
|
||||
for(var/yoff = 0 to range)
|
||||
var/turf/T = locate(tx + xoff,ty + yoff,tz)
|
||||
if(T)
|
||||
turfstocapture.Add(T)
|
||||
else
|
||||
if(!hasasked)
|
||||
var/answer = alert("Capture includes non existant turf, Continue capture?","Continue capture?", "No", "Yes")
|
||||
hasasked = 1
|
||||
if(answer == "No")
|
||||
return
|
||||
|
||||
var/list/atoms = list()
|
||||
for(var/turf/T in turfstocapture)
|
||||
atoms.Add(T)
|
||||
for(var/atom/A in T)
|
||||
if(A.invisibility) continue
|
||||
atoms.Add(A)
|
||||
|
||||
atoms = sort_atoms_by_layer(atoms)
|
||||
var/icon/cap = icon('icons/effects/96x96.dmi', "")
|
||||
cap.Scale(range*32, range*32)
|
||||
cap.Blend("#000", ICON_OVERLAY)
|
||||
for(var/atom/A in atoms)
|
||||
if(A)
|
||||
var/icon/img = getFlatIcon(A)
|
||||
if(istype(img, /icon))
|
||||
if(istype(A, /mob/living) && A:lying)
|
||||
img.BecomeLying()
|
||||
var/xoff = (A.x - tx) * 32
|
||||
var/yoff = (A.y - ty) * 32
|
||||
cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff)
|
||||
|
||||
|
||||
usr << browse_rsc(cap, "map_capture_x[tx]_y[ty]_z[tz]_r[range].png")
|
||||
@@ -2112,7 +2112,7 @@
|
||||
if("friendai")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","FA")
|
||||
for(var/mob/aiEye/aE in mob_list)
|
||||
for(var/mob/eye/aiEye/aE in mob_list)
|
||||
aE.icon_state = "ai_friend"
|
||||
for(var/obj/machinery/M in machines)
|
||||
if(istype(M, /obj/machinery/ai_status_display))
|
||||
|
||||
@@ -118,30 +118,31 @@
|
||||
if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_MENTOR))
|
||||
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>[key_name(C, X, 0)]</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
/client/proc/cmd_admin_irc_pm()
|
||||
/client/proc/cmd_admin_irc_pm(sender)
|
||||
if(prefs.muted & MUTE_ADMINHELP)
|
||||
src << "<font color='red'>Error: Private-Message: You are unable to use PM-s (muted).</font>"
|
||||
return
|
||||
|
||||
var/msg = input(src,"Message:", "Private message to admins on IRC / 400 character limit") as text|null
|
||||
var/msg = input(src,"Message:", "Reply private message to [sender] on IRC / 400 character limit") as text|null
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
sanitize(msg)
|
||||
|
||||
if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
|
||||
src << "\red Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting"
|
||||
src << "\blue [msg]"
|
||||
return
|
||||
// Handled on Bot32's end, unsure about other bots
|
||||
// if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
|
||||
// src << "<span class='warning'>Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting</span>"
|
||||
// src << "<span class='notice'>[msg]</span>"
|
||||
// return
|
||||
|
||||
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
|
||||
send2adminirc("PlayerPM to [sender] from [key_name(src)]: [html_decode(msg)]")
|
||||
|
||||
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
|
||||
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>IRC-[sender]</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
log_admin("PM: [key_name(src)]->IRC: [msg]")
|
||||
log_admin("PM: [key_name(src)]->IRC-[sender]: [msg]")
|
||||
for(var/client/X in admins)
|
||||
if(X == src)
|
||||
continue
|
||||
if(X.holder.rights & R_ADMIN|R_MOD)
|
||||
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
|
||||
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>IRC-[sender]</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
@@ -659,13 +659,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
|
||||
if ("pirate")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
set category = "Fun"
|
||||
|
||||
var/turf/target = get_turf(src.mob)
|
||||
admin_log_and_message_admins("has fired the Icarus point defense laser at [target.x]-[target.y]-[target.z]")
|
||||
log_and_message_admins("has fired the Icarus point defense laser at [target.x]-[target.y]-[target.z]")
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
@@ -18,7 +18,7 @@
|
||||
set category = "Fun"
|
||||
|
||||
var/turf/target = get_turf(src.mob)
|
||||
admin_log_and_message_admins("has fired the Icarus main gun projectile at [target.x]-[target.y]-[target.z]")
|
||||
log_and_message_admins("has fired the Icarus main gun projectile at [target.x]-[target.y]-[target.z]")
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
@@ -31,7 +31,7 @@
|
||||
set desc = "Lets you chose the position of the Icarus in regards to the map."
|
||||
set category = "Fun"
|
||||
|
||||
admin_log_and_message_admins("is changing the Icarus position.")
|
||||
log_and_message_admins("is changing the Icarus position.")
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -447,7 +447,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
data_core.manifest_inject(new_character)
|
||||
|
||||
if(alert(new_character,"Would you like an active AI to announce this character?",,"No","Yes")=="Yes")
|
||||
call(/mob/new_player/proc/AnnounceArrival)(new_character, new_character.mind.assigned_role)
|
||||
call(/proc/AnnounceArrival)(new_character, new_character.mind.assigned_role)
|
||||
|
||||
message_admins("\blue [admin] has respawned [player_key] as [new_character.real_name].", 1)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
|
||||
flags = CONDUCT | PROXMOVE
|
||||
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
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = "holder"
|
||||
item_state = "assembly"
|
||||
flags = CONDUCT
|
||||
flags = CONDUCT | PROXMOVE
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
name = "infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon_state = "infrared"
|
||||
origin_tech = list(TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
|
||||
origin_tech = list(TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
|
||||
|
||||
wires = WIRE_PULSE
|
||||
|
||||
@@ -171,9 +171,7 @@
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
//world << "beam \ref[src]: hit"
|
||||
if(master)
|
||||
//world << "beam hit \ref[src]: calling master \ref[master].hit"
|
||||
master.trigger_beam()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon_state = "prox"
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
|
||||
flags = PROXMOVE
|
||||
wires = WIRE_PULSE
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -59,7 +59,6 @@
|
||||
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
||||
if(src.corpseid == 1)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
@@ -75,7 +74,7 @@
|
||||
W.access = list()
|
||||
if(corpseidjob)
|
||||
W.assignment = corpseidjob
|
||||
W.registered_name = M.real_name
|
||||
W.set_owner_info(M)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(mute_irc)
|
||||
usr << "<span class='warning'You cannot use this as your client has been muted from sending messages to the admins on IRC</span>"
|
||||
return
|
||||
cmd_admin_irc_pm()
|
||||
cmd_admin_irc_pm(href_list["irc_msg"])
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -633,9 +633,9 @@ datum/preferences
|
||||
dat += "<img src='species_preview_[current_species.name].png' width='64px' height='64px'><br/><br/>"
|
||||
dat += "<b>Language:</b> [current_species.language]<br/>"
|
||||
dat += "<small>"
|
||||
if(current_species.flags & CAN_JOIN)
|
||||
if(current_species.spawn_flags & CAN_JOIN)
|
||||
dat += "</br><b>Often present on human stations.</b>"
|
||||
if(current_species.flags & IS_WHITELISTED)
|
||||
if(current_species.spawn_flags & IS_WHITELISTED)
|
||||
dat += "</br><b>Whitelist restricted.</b>"
|
||||
if(current_species.flags & NO_BLOOD)
|
||||
dat += "</br><b>Does not have blood.</b>"
|
||||
@@ -649,11 +649,11 @@ datum/preferences
|
||||
dat += "</br><b>Has excellent traction.</b>"
|
||||
if(current_species.flags & NO_POISON)
|
||||
dat += "</br><b>Immune to most poisons.</b>"
|
||||
if(current_species.flags & HAS_SKIN_TONE)
|
||||
if(current_species.appearance_flags & HAS_SKIN_TONE)
|
||||
dat += "</br><b>Has a variety of skin tones.</b>"
|
||||
if(current_species.flags & HAS_SKIN_COLOR)
|
||||
if(current_species.appearance_flags & HAS_SKIN_COLOR)
|
||||
dat += "</br><b>Has a variety of skin colours.</b>"
|
||||
if(current_species.flags & HAS_EYE_COLOR)
|
||||
if(current_species.appearance_flags & HAS_EYE_COLOR)
|
||||
dat += "</br><b>Has a variety of eye colours.</b>"
|
||||
if(current_species.flags & IS_PLANT)
|
||||
dat += "</br><b>Has a plantlike physiology.</b>"
|
||||
@@ -663,9 +663,9 @@ datum/preferences
|
||||
|
||||
var/restricted = 0
|
||||
if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it!
|
||||
if(!(current_species.flags & CAN_JOIN))
|
||||
if(!(current_species.spawn_flags & CAN_JOIN))
|
||||
restricted = 2
|
||||
else if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(user,current_species))
|
||||
else if((current_species.spawn_flags & IS_WHITELISTED) && !is_alien_whitelisted(user,current_species))
|
||||
restricted = 1
|
||||
|
||||
if(restricted)
|
||||
|
||||
@@ -64,22 +64,36 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_head
|
||||
|
||||
/datum/gear/bsec_beret
|
||||
display_name = "beret, blue (security)"
|
||||
path = /obj/item/clothing/head/beret/sec/alt
|
||||
display_name = "beret, navy (officer)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/officer
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/bsec_beret_warden
|
||||
display_name = "beret, navy (warden)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/warden
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Head of Security","Warden")
|
||||
|
||||
/datum/gear/bsec_beret_hos
|
||||
display_name = "beret, navy (hos)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/hos
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/eng_beret
|
||||
display_name = "beret, engie-orange"
|
||||
path = /obj/item/clothing/head/beret/eng
|
||||
path = /obj/item/clothing/head/beret/engineering
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
|
||||
/datum/gear/purp_beret
|
||||
display_name = "beret, purple"
|
||||
path = /obj/item/clothing/head/beret/jan
|
||||
path = /obj/item/clothing/head/beret/purple
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
|
||||
@@ -378,6 +392,13 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
|
||||
/datum/gear/roboticist_skirt
|
||||
display_name = "skirt, roboticist"
|
||||
path = /obj/item/clothing/under/rank/roboticist/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Roboticist")
|
||||
|
||||
/datum/gear/amishsuit
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
//Sanitize
|
||||
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
|
||||
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
|
||||
UI_style = sanitize_inlist(UI_style, list("White", "Midnight","Orange","old"), initial(UI_style))
|
||||
UI_style = sanitize_inlist(UI_style, all_ui_styles, initial(UI_style))
|
||||
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
|
||||
default_slot = sanitize_integer(default_slot, 1, config.character_slots, initial(default_slot))
|
||||
toggles = sanitize_integer(toggles, 0, 65535, initial(toggles))
|
||||
|
||||
@@ -157,41 +157,3 @@
|
||||
prefs.save_preferences()
|
||||
src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)."
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/change_ui()
|
||||
set name = "Change UI"
|
||||
set category = "Preferences"
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
usr << "This only for human"
|
||||
return
|
||||
|
||||
var/UI_style_new = input(usr, "Select a style, we recommend White for customization") in list("White", "Midnight", "Orange", "old")
|
||||
if(!UI_style_new) return
|
||||
|
||||
var/UI_style_alpha_new = input(usr, "Select a new alpha(transparence) parametr for UI, between 50 and 255") as num
|
||||
if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
|
||||
|
||||
var/UI_style_color_new = input(usr, "Choose your UI color, dark colors are not recommended!") as color|null
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other +usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ui_style2icon(UI_style_new)
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
|
||||
|
||||
if(alert("Like it? Save changes?",,"Yes", "No") == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
prefs.save_preferences()
|
||||
usr << "UI was saved"
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
|
||||
/var/all_ui_styles = list(
|
||||
"Midnight" = 'icons/mob/screen/midnight.dmi',
|
||||
"Orange" = 'icons/mob/screen/orange.dmi',
|
||||
"old" = 'icons/mob/screen/old.dmi',
|
||||
"White" = 'icons/mob/screen/white.dmi',
|
||||
"old-noborder" = 'icons/mob/screen/old-noborder.dmi'
|
||||
)
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
if(ui_style in all_ui_styles)
|
||||
return all_ui_styles[ui_style]
|
||||
return all_ui_styles["White"]
|
||||
|
||||
|
||||
/client/verb/change_ui()
|
||||
set name = "Change UI"
|
||||
set category = "Preferences"
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
usr << "<span class='warning'>You must be human to use this verb.</span>"
|
||||
return
|
||||
|
||||
var/UI_style_new = input(usr, "Select a style. White is recommended for customization") as null|anything in all_ui_styles
|
||||
if(!UI_style_new) return
|
||||
|
||||
var/UI_style_alpha_new = input(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255") as null|num
|
||||
if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
|
||||
|
||||
var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
icons.Add(usr.gun_setting_icon)
|
||||
icons.Add(usr.item_use_icon)
|
||||
icons.Add(usr.gun_move_icon)
|
||||
icons.Add(usr.gun_run_icon)
|
||||
icons.Add(usr.radio_use_icon)
|
||||
|
||||
var/icon/ic = all_ui_styles[UI_style_new]
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ic
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
|
||||
if(alert("Like it? Save changes?",,"Yes", "No") == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
prefs.save_preferences()
|
||||
usr << "UI was saved"
|
||||
@@ -170,7 +170,7 @@ BLIND // can't see anything
|
||||
name = "glasses"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
w_class = 2.0
|
||||
flags = GLASSESCOVERSEYES
|
||||
body_parts_covered = EYES
|
||||
slot_flags = SLOT_EYES
|
||||
var/vision_flags = 0
|
||||
var/darkness_view = 0//Base human is 2
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
name = "glasses"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
//w_class = 2.0
|
||||
//flags = GLASSESCOVERSEYES
|
||||
//slot_flags = SLOT_EYES
|
||||
//var/vision_flags = 0
|
||||
//var/darkness_view = 0//Base human is 2
|
||||
@@ -13,7 +12,6 @@
|
||||
var/active = 1
|
||||
var/activation_sound = 'sound/items/goggles_charge.ogg'
|
||||
var/obj/screen/overlay = null
|
||||
body_parts_covered = EYES
|
||||
|
||||
/obj/item/clothing/glasses/attack_self(mob/user)
|
||||
if(toggleable)
|
||||
@@ -37,7 +35,7 @@
|
||||
icon_state = "meson"
|
||||
item_state = "glasses"
|
||||
action_button_name = "Toggle Goggles"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
toggleable = 1
|
||||
vision_flags = SEE_TURFS
|
||||
|
||||
@@ -95,7 +93,7 @@
|
||||
desc = "Very confusing glasses."
|
||||
icon_state = "material"
|
||||
item_state = "glasses"
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3)
|
||||
toggleable = 1
|
||||
vision_flags = SEE_OBJS
|
||||
|
||||
@@ -159,14 +157,12 @@
|
||||
if(usr.canmove && !usr.stat && !usr.restrained())
|
||||
if(src.up)
|
||||
src.up = !src.up
|
||||
src.flags |= GLASSESCOVERSEYES
|
||||
flags_inv |= HIDEEYES
|
||||
body_parts_covered |= EYES
|
||||
icon_state = initial(icon_state)
|
||||
usr << "You flip \the [src] down to protect your eyes."
|
||||
else
|
||||
src.up = !src.up
|
||||
src.flags &= ~HEADCOVERSEYES
|
||||
flags_inv &= ~HIDEEYES
|
||||
body_parts_covered &= ~EYES
|
||||
icon_state = "[initial(icon_state)]up"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/clothing/glasses/hud
|
||||
name = "HUD"
|
||||
desc = "A heads-up display that provides important info in (almost) real time."
|
||||
flags = null //doesn't protect eyes because it's a monocle, duh
|
||||
flags = 0 //doesn't protect eyes because it's a monocle, duh
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2)
|
||||
var/list/icon/current = list() //the current hud icons
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
/obj/item/clothing/head/hardhat/red
|
||||
icon_state = "hardhat0_red"
|
||||
name = "firefighter helmet"
|
||||
flags = STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/head/hardhat/white
|
||||
icon_state = "hardhat0_white"
|
||||
flags = STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
slot_l_hand_str = "helmet",
|
||||
slot_r_hand_str = "helmet",
|
||||
)
|
||||
flags = HEADCOVERSEYES | THICKMATERIAL
|
||||
item_flags = THICKMATERIAL
|
||||
body_parts_covered = HEAD
|
||||
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
cold_protection = HEAD
|
||||
@@ -20,7 +21,7 @@
|
||||
name = "riot helmet"
|
||||
desc = "It's a helmet specifically designed to protect against close range attacks."
|
||||
icon_state = "riot"
|
||||
flags = HEADCOVERSEYES
|
||||
body_parts_covered = HEAD|FACE|EYES //face shield
|
||||
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
@@ -29,7 +30,6 @@
|
||||
name = "\improper SWAT helmet"
|
||||
desc = "They're often used by highly trained Swat Members."
|
||||
icon_state = "swat"
|
||||
flags = HEADCOVERSEYES
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
cold_protection = HEAD
|
||||
@@ -40,7 +40,6 @@
|
||||
name = "\improper Thunderdome helmet"
|
||||
desc = "<i>'Let the battle commence!'</i>"
|
||||
icon_state = "thunderdome"
|
||||
flags = HEADCOVERSEYES
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -50,15 +49,14 @@
|
||||
name = "gladiator helmet"
|
||||
desc = "Ave, Imperator, morituri te salutant."
|
||||
icon_state = "gladiator"
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/tactical
|
||||
name = "tactical helmet"
|
||||
desc = "An armored helmet capable of being fitted with a multitude of attachments."
|
||||
icon_state = "swathelm"
|
||||
flags = HEADCOVERSEYES
|
||||
sprite_sheets = list(
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
@@ -72,9 +70,9 @@
|
||||
name = "Augment Array"
|
||||
desc = "A helmet with optical and cranial augments coupled to it."
|
||||
icon_state = "v62"
|
||||
flags = HEADCOVERSEYES
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
body_parts_covered = HEAD|EYES
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
@@ -38,15 +38,15 @@
|
||||
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 = HEADCOVERSEYES|BLOCKHAIR
|
||||
body_parts_covered = HEAD|EYES
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD
|
||||
|
||||
//Chaplain
|
||||
/obj/item/clothing/head/nun_hood
|
||||
name = "nun hood"
|
||||
desc = "Maximum piety in this star system."
|
||||
icon_state = "nun_hood"
|
||||
flags = HEADCOVERSEYES|BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD
|
||||
|
||||
//Mime
|
||||
@@ -60,42 +60,54 @@
|
||||
/obj/item/clothing/head/beret/sec
|
||||
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"
|
||||
/obj/item/clothing/head/beret/sec/alt
|
||||
icon_state = "beret_officer"
|
||||
/obj/item/clothing/head/beret/sec/navy/officer
|
||||
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"
|
||||
/obj/item/clothing/head/beret/sec/hos
|
||||
icon_state = "beret_navy_officer"
|
||||
/obj/item/clothing/head/beret/sec/navy/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"
|
||||
/obj/item/clothing/head/beret/sec/warden
|
||||
icon_state = "beret_navy_hos"
|
||||
/obj/item/clothing/head/beret/sec/navy/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"
|
||||
/obj/item/clothing/head/beret/eng
|
||||
icon_state = "beret_navy_warden"
|
||||
/obj/item/clothing/head/beret/sec/corporate/officer
|
||||
name = "officer beret"
|
||||
desc = "A corporate black beret with an officer's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_officer"
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos
|
||||
name = "officer beret"
|
||||
desc = "A corporate black beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_hos"
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden
|
||||
name = "warden beret"
|
||||
desc = "A corporate black beret with a warden's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_warden"
|
||||
/obj/item/clothing/head/beret/engineering
|
||||
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"
|
||||
/obj/item/clothing/head/beret/jan
|
||||
icon_state = "beret_engineering"
|
||||
/obj/item/clothing/head/beret/purple
|
||||
name = "purple beret"
|
||||
desc = "A stylish, if purple, beret."
|
||||
icon_state = "purpleberet"
|
||||
icon_state = "beret_purple"
|
||||
/obj/item/clothing/head/beret/centcom/officer
|
||||
name = "officers beret"
|
||||
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces."
|
||||
icon_state = "centcomofficerberet"
|
||||
icon_state = "beret_centcom_officer"
|
||||
/obj/item/clothing/head/beret/centcom/captain
|
||||
name = "captains beret"
|
||||
desc = "A white beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces."
|
||||
icon_state = "centcomcaptain"
|
||||
icon_state = "beret_centcom_captain"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/head/surgery
|
||||
name = "surgical cap"
|
||||
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
|
||||
icon_state = "surgcap_blue"
|
||||
flags = BLOCKHEADHAIR
|
||||
flags_inv = 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."
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
name = "hastur's hood"
|
||||
desc = "It's unspeakably stylish"
|
||||
icon_state = "hasturhood"
|
||||
flags = HEADCOVERSEYES|BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
/obj/item/clothing/head/nursehat
|
||||
@@ -74,8 +74,7 @@
|
||||
)
|
||||
icon_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 = BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
@@ -84,8 +83,7 @@
|
||||
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"
|
||||
item_state = "cueball"
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
flags_inv = 0
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
/obj/item/clothing/head/greenbandana
|
||||
@@ -101,7 +99,6 @@
|
||||
desc = "A helmet made out of a box."
|
||||
icon_state = "cardborg_h"
|
||||
item_state = "cardborg_h"
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
@@ -109,7 +106,8 @@
|
||||
name = "justice hat"
|
||||
desc = "fight for what's righteous!"
|
||||
icon_state = "justicered"
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD|EYES
|
||||
|
||||
/obj/item/clothing/head/justice/blue
|
||||
icon_state = "justiceblue"
|
||||
@@ -201,7 +199,7 @@
|
||||
name = "witch costume wig"
|
||||
desc = "Eeeee~heheheheheheh!"
|
||||
icon_state = "witch"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
/obj/item/clothing/head/chicken
|
||||
@@ -212,7 +210,7 @@
|
||||
slot_l_hand_str = "chickensuit",
|
||||
slot_r_hand_str = "chickensuit",
|
||||
)
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 0.7
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
@@ -220,7 +218,7 @@
|
||||
name = "bear pelt hat"
|
||||
desc = "Fuzzy."
|
||||
icon_state = "bearpelt"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/head/xenos
|
||||
@@ -231,8 +229,7 @@
|
||||
slot_r_hand_str = "xenos_helm",
|
||||
)
|
||||
desc = "A helmet made out of chitinous alien hide."
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
@@ -244,7 +241,7 @@
|
||||
slot_l_hand_str = "pwig",
|
||||
slot_r_hand_str = "pwig",
|
||||
)
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 2.0 //why is it so conductive?!
|
||||
body_parts_covered = 0
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
slot_l_hand_str = "welding",
|
||||
slot_r_hand_str = "welding",
|
||||
)
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000)
|
||||
var/up = 0
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
@@ -44,13 +43,13 @@
|
||||
if(usr.canmove && !usr.stat && !usr.restrained())
|
||||
if(src.up)
|
||||
src.up = !src.up
|
||||
src.flags |= (HEADCOVERSEYES | HEADCOVERSMOUTH)
|
||||
body_parts_covered |= (EYES|FACE)
|
||||
flags_inv |= (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
|
||||
icon_state = base_state
|
||||
usr << "You flip the [src] down to protect your eyes."
|
||||
else
|
||||
src.up = !src.up
|
||||
src.flags &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH)
|
||||
body_parts_covered &= ~(EYES|FACE)
|
||||
flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
|
||||
icon_state = "[base_state]up"
|
||||
usr << "You push the [src] up out of your face."
|
||||
@@ -66,9 +65,8 @@
|
||||
desc = "It's tasty looking!"
|
||||
icon_state = "cake0"
|
||||
item_state = "cake0"
|
||||
flags = HEADCOVERSEYES
|
||||
var/onfire = 0
|
||||
body_parts_covered = HEAD|EYES
|
||||
body_parts_covered = HEAD
|
||||
|
||||
/obj/item/clothing/head/cakehat/process()
|
||||
if(!onfire)
|
||||
@@ -124,9 +122,8 @@
|
||||
name = "carved pumpkin"
|
||||
desc = "A jack o' lantern! Believed to ward off evil spirits."
|
||||
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
body_parts_covered = HEAD|EYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
brightness_on = 2
|
||||
light_overlay = "helmet_light"
|
||||
w_class = 3
|
||||
@@ -155,4 +152,4 @@
|
||||
desc = "You can hear the distant sounds of rhythmic electronica."
|
||||
icon_state = "richard"
|
||||
body_parts_covered = HEAD|FACE
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
desc = "LOADSAMONEY"
|
||||
icon_state = "balaclava"
|
||||
item_state = "balaclava"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
flags_inv = HIDEFACE|BLOCKHAIR
|
||||
body_parts_covered = FACE|HEAD
|
||||
w_class = 2
|
||||
sprite_sheets = list(
|
||||
@@ -17,8 +16,7 @@
|
||||
desc = "Designed to both hide identities and keep your face comfy and warm."
|
||||
icon_state = "swatclava"
|
||||
item_state = "balaclava"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
flags_inv = HIDEFACE|BLOCKHAIR
|
||||
w_class = 2
|
||||
sprite_sheets = list(
|
||||
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
@@ -30,8 +28,7 @@
|
||||
desc = "Worn by robust fighters, flying high to defeat their foes!"
|
||||
icon_state = "luchag"
|
||||
item_state = "luchag"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
flags_inv = HIDEFACE|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE
|
||||
w_class = 2
|
||||
siemens_coefficient = 3.0
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
name = "breath mask"
|
||||
icon_state = "breath"
|
||||
item_state = "breath"
|
||||
flags = MASKCOVERSMOUTH | AIRTIGHT
|
||||
body_parts_covered = 0
|
||||
item_flags = AIRTIGHT|FLEXIBLEMATERIAL
|
||||
body_parts_covered = FACE
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.10
|
||||
permeability_coefficient = 0.50
|
||||
@@ -20,16 +20,16 @@
|
||||
if(!src.hanging)
|
||||
src.hanging = !src.hanging
|
||||
gas_transfer_coefficient = 1 //gas is now escaping to the turf and vice versa
|
||||
flags &= ~(MASKCOVERSMOUTH | AIRTIGHT)
|
||||
body_parts_covered = 0
|
||||
item_flags &= ~(AIRTIGHT)
|
||||
body_parts_covered = ~(FACE)
|
||||
icon_state = "breathdown"
|
||||
user << "Your mask is now hanging on your neck."
|
||||
|
||||
else
|
||||
src.hanging = !src.hanging
|
||||
gas_transfer_coefficient = initial(gas_transfer_coefficient)
|
||||
flags |= MASKCOVERSMOUTH | AIRTIGHT
|
||||
body_parts_covered = initial(body_parts_covered)
|
||||
item_flags |= AIRTIGHT
|
||||
body_parts_covered |= FACE
|
||||
icon_state = "breath"
|
||||
user << "You pull the mask up to cover your face."
|
||||
update_clothing_icon()
|
||||
@@ -49,4 +49,4 @@
|
||||
name = "medical mask"
|
||||
icon_state = "medical"
|
||||
item_state = "medical"
|
||||
permeability_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
|
||||
@@ -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 = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
|
||||
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
body_parts_covered = FACE|EYES
|
||||
w_class = 3.0
|
||||
@@ -34,7 +34,7 @@
|
||||
icon_state = "plaguedoctor"
|
||||
item_state = "gas_mask"
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0)
|
||||
body_parts_covered = HEAD|FACE
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
/obj/item/clothing/mask/gas/swat
|
||||
name = "\improper SWAT mask"
|
||||
@@ -101,3 +101,4 @@
|
||||
name = "owl mask"
|
||||
desc = "Twoooo!"
|
||||
icon_state = "owl"
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
desc = "To stop that awful noise."
|
||||
icon_state = "muzzle"
|
||||
item_state = "muzzle"
|
||||
flags = MASKCOVERSMOUTH
|
||||
body_parts_covered = 0
|
||||
body_parts_covered = FACE
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.90
|
||||
voicechange = 1
|
||||
@@ -26,8 +25,8 @@
|
||||
icon_state = "sterile"
|
||||
item_state = "sterile"
|
||||
w_class = 2
|
||||
flags = MASKCOVERSMOUTH
|
||||
body_parts_covered = 0
|
||||
body_parts_covered = FACE
|
||||
item_flags = FLEXIBLEMATERIAL
|
||||
gas_transfer_coefficient = 0.90
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0)
|
||||
@@ -47,13 +46,14 @@
|
||||
body_parts_covered = 0
|
||||
|
||||
//scarves (fit in in mask slot)
|
||||
|
||||
//None of these actually have on-mob sprites...
|
||||
/obj/item/clothing/mask/bluescarf
|
||||
name = "blue neck scarf"
|
||||
desc = "A blue neck scarf."
|
||||
icon_state = "blueneckscarf"
|
||||
item_state = "blueneckscarf"
|
||||
flags = MASKCOVERSMOUTH
|
||||
body_parts_covered = FACE
|
||||
item_flags = FLEXIBLEMATERIAL
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.90
|
||||
|
||||
@@ -62,7 +62,8 @@
|
||||
desc = "A red and white checkered neck scarf."
|
||||
icon_state = "redwhite_scarf"
|
||||
item_state = "redwhite_scarf"
|
||||
flags = MASKCOVERSMOUTH
|
||||
body_parts_covered = FACE
|
||||
item_flags = FLEXIBLEMATERIAL
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.90
|
||||
|
||||
@@ -71,7 +72,8 @@
|
||||
desc = "A green neck scarf."
|
||||
icon_state = "green_scarf"
|
||||
item_state = "green_scarf"
|
||||
flags = MASKCOVERSMOUTH
|
||||
body_parts_covered = FACE
|
||||
item_flags = FLEXIBLEMATERIAL
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.90
|
||||
|
||||
@@ -80,7 +82,8 @@
|
||||
desc = "A stealthy, dark scarf."
|
||||
icon_state = "ninja_scarf"
|
||||
item_state = "ninja_scarf"
|
||||
flags = MASKCOVERSMOUTH
|
||||
body_parts_covered = FACE
|
||||
item_flags = FLEXIBLEMATERIAL
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.90
|
||||
siemens_coefficient = 0
|
||||
@@ -90,8 +93,7 @@
|
||||
desc = "A rubber pig mask."
|
||||
icon_state = "pig"
|
||||
item_state = "pig"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
flags_inv = HIDEFACE|BLOCKHAIR
|
||||
w_class = 2
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
@@ -101,8 +103,7 @@
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a horse."
|
||||
icon_state = "horsehead"
|
||||
item_state = "horsehead"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
flags_inv = HIDEFACE|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
w_class = 2
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "galoshes"
|
||||
icon_state = "galoshes"
|
||||
permeability_coefficient = 0.05
|
||||
flags = NOSLIP
|
||||
item_flags = NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
species_restricted = null
|
||||
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
|
||||
if(magpulse)
|
||||
flags &= ~NOSLIP
|
||||
item_flags &= ~NOSLIP
|
||||
magpulse = 0
|
||||
set_slowdown()
|
||||
force = 3
|
||||
if(icon_base) icon_state = "[icon_base]0"
|
||||
user << "You disable the mag-pulse traction system."
|
||||
else
|
||||
flags |= NOSLIP
|
||||
item_flags |= NOSLIP
|
||||
magpulse = 1
|
||||
set_slowdown()
|
||||
force = 5
|
||||
@@ -70,6 +70,6 @@
|
||||
/obj/item/clothing/shoes/magboots/examine(mob/user)
|
||||
..(user)
|
||||
var/state = "disabled"
|
||||
if(src.flags&NOSLIP)
|
||||
if(item_flags & NOSLIP)
|
||||
state = "enabled"
|
||||
user << "Its mag-pulse traction system appears to be [state]."
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "brown"
|
||||
item_state = "brown"
|
||||
permeability_coefficient = 0.05
|
||||
flags = NOSLIP
|
||||
item_flags = NOSLIP
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
var/list/clothing_choices = list()
|
||||
siemens_coefficient = 0.8
|
||||
@@ -20,7 +20,7 @@
|
||||
icon_state = "swat"
|
||||
force = 3
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags = NOSLIP
|
||||
item_flags = NOSLIP
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes.
|
||||
@@ -29,7 +29,7 @@
|
||||
icon_state = "swat"
|
||||
force = 5
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags = NOSLIP
|
||||
item_flags = NOSLIP
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
cold_protection = FEET
|
||||
@@ -120,6 +120,6 @@
|
||||
desc = "Help you swim good."
|
||||
name = "swimming fins"
|
||||
icon_state = "flippers"
|
||||
flags = NOSLIP
|
||||
item_flags = NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
species_restricted = null
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
/obj/item/clothing/head/helmet/space/vox
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.6
|
||||
flags = HEADCOVERSEYES|STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
species_restricted = list("Vox")
|
||||
sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi')
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user)
|
||||
if(src.magpulse)
|
||||
flags &= ~NOSLIP
|
||||
item_flags &= ~NOSLIP
|
||||
magpulse = 0
|
||||
canremove = 1
|
||||
user << "You relax your deathgrip on the flooring."
|
||||
@@ -148,7 +148,7 @@
|
||||
user << "You will have to put on the [src] before you can do that."
|
||||
return
|
||||
|
||||
flags |= NOSLIP
|
||||
item_flags |= NOSLIP
|
||||
magpulse = 1
|
||||
canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly.
|
||||
user << "You dig your claws deeply into the flooring, bracing yourself."
|
||||
@@ -160,7 +160,7 @@
|
||||
..()
|
||||
if(src.magpulse)
|
||||
user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.")
|
||||
flags &= ~NOSLIP
|
||||
item_flags &= ~NOSLIP
|
||||
magpulse = 0
|
||||
canremove = 1
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
icon_state = "capspace"
|
||||
item_state = "capspace"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
|
||||
flags_inv = HIDEFACE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
flags_inv = HIDEFACE|BLOCKHAIR
|
||||
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 = STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
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 = STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
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
|
||||
@@ -37,7 +37,8 @@
|
||||
slot_r_hand_str = "syndicate-helm-black-red",
|
||||
)
|
||||
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60)
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
//how is this a space helmet?
|
||||
@@ -46,7 +47,8 @@
|
||||
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 = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
flags_inv = BLOCKHAIR
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Space santa outfit suit
|
||||
@@ -55,7 +57,8 @@
|
||||
desc = "Ho ho ho. Merrry X-mas!"
|
||||
icon_state = "santahat"
|
||||
item_state = "santahat"
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD
|
||||
|
||||
/obj/item/clothing/suit/space/santa
|
||||
@@ -64,7 +67,7 @@
|
||||
icon_state = "santa"
|
||||
item_state = "santa"
|
||||
slowdown = 0
|
||||
flags = ONESIZEFITSALL | STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
allowed = list(/obj/item) //for stuffing exta special presents
|
||||
|
||||
//Space pirate outfit
|
||||
@@ -74,7 +77,8 @@
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = 0
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
@@ -179,9 +179,8 @@
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(!piece) continue
|
||||
piece.icon_state = "[initial(icon_state)]"
|
||||
if(airtight)
|
||||
piece.flags &= ~STOPPRESSUREDAMAGE
|
||||
piece.flags &= ~AIRTIGHT
|
||||
if(airtight)
|
||||
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
update_icon(1)
|
||||
|
||||
/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant)
|
||||
@@ -269,9 +268,9 @@
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(!piece) continue
|
||||
piece.icon_state = "[initial(icon_state)][!seal_target ? "" : "_sealed"]"
|
||||
canremove = !seal_target
|
||||
canremove = !seal_target
|
||||
if(airtight)
|
||||
update_component_sealed()
|
||||
update_component_sealed()
|
||||
update_icon(1)
|
||||
return 0
|
||||
|
||||
@@ -289,11 +288,10 @@
|
||||
/obj/item/weapon/rig/proc/update_component_sealed()
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(canremove)
|
||||
piece.flags &= ~STOPPRESSUREDAMAGE
|
||||
piece.flags &= ~AIRTIGHT
|
||||
else
|
||||
piece.flags |= STOPPRESSUREDAMAGE
|
||||
piece.flags |= AIRTIGHT
|
||||
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
else
|
||||
piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
update_icon(1)
|
||||
|
||||
/obj/item/weapon/rig/process()
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig
|
||||
name = "helmet"
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
item_flags = THICKMATERIAL
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
heat_protection = HEAD|FACE|EYES
|
||||
cold_protection = HEAD|FACE|EYES
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/item/clothing/gloves/rig
|
||||
name = "gauntlets"
|
||||
flags = THICKMATERIAL
|
||||
item_flags = THICKMATERIAL
|
||||
body_parts_covered = HANDS
|
||||
heat_protection = HANDS
|
||||
cold_protection = HANDS
|
||||
@@ -38,7 +38,7 @@
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAIL
|
||||
flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT
|
||||
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT
|
||||
slowdown = 0
|
||||
//will reach 10 breach damage after 25 laser carbine blasts, 3 revolver hits, or ~1 PTR hit. Completely immune to smg or sts hits.
|
||||
breach_threshold = 38
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
emp_protection = 10
|
||||
slowdown = 0
|
||||
flags = STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
offline_slowdown = 0
|
||||
offline_vision_restriction = 0
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
name = "Space helmet"
|
||||
icon_state = "space"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT
|
||||
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT
|
||||
flags_inv = BLOCKHAIR
|
||||
item_state_slots = list(
|
||||
slot_l_hand_str = "s_helmet",
|
||||
slot_r_hand_str = "s_helmet",
|
||||
@@ -54,7 +55,7 @@
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
flags = STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
item_flags = STOPPRESSUREDAMAGE | 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
|
||||
|
||||
@@ -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 = THICKMATERIAL
|
||||
item_flags = THICKMATERIAL
|
||||
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO
|
||||
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -17,7 +17,6 @@
|
||||
icon_state = "armor"
|
||||
item_state = "armor"
|
||||
blood_overlay_type = "armor"
|
||||
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 +70,7 @@
|
||||
item_state = "swat_suit"
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
flags = STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
item_flags = STOPPRESSUREDAMAGE | 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 +97,6 @@
|
||||
icon_state = "detective-armor"
|
||||
item_state = "armor"
|
||||
blood_overlay_type = "armor"
|
||||
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)
|
||||
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
)
|
||||
desc = "A hood that protects the head and face from biological comtaminants."
|
||||
permeability_coefficient = 0.01
|
||||
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
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
@@ -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 = STOPPRESSUREDAMAGE
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
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,9 +47,8 @@
|
||||
name = "bomb hood"
|
||||
desc = "Use in case of bomb."
|
||||
icon_state = "bombsuit"
|
||||
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
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
siemens_coefficient = 0
|
||||
|
||||
@@ -86,7 +85,7 @@
|
||||
name = "Radiation Hood"
|
||||
icon_state = "rad"
|
||||
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
flags_inv = BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
|
||||
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
var/open
|
||||
var/obj/item/held //Item inside locket.
|
||||
|
||||
/obj/item/clothing/accessory/locket/heart
|
||||
name = "heart-shaped locket"
|
||||
desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
|
||||
icon_state = "heartlocket"
|
||||
|
||||
/obj/item/clothing/accessory/locket/attack_self(mob/user as mob)
|
||||
if(!base_icon)
|
||||
base_icon = icon_state
|
||||
|
||||
if(!("[base_icon]_open" in icon_states(icon)))
|
||||
user << "\The [src] doesn't seem to open."
|
||||
return
|
||||
|
||||
open = !open
|
||||
user << "You flip \the [src] [open?"open":"closed"]."
|
||||
if(open)
|
||||
@@ -36,11 +36,11 @@
|
||||
|
||||
if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
|
||||
if(held)
|
||||
usr << "[src] already has something inside it."
|
||||
usr << "\The [src] already has something inside it."
|
||||
else
|
||||
usr << "You slip [O] into [src]."
|
||||
user.drop_item()
|
||||
O.loc = src
|
||||
src.held = O
|
||||
return
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -23,8 +23,14 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist
|
||||
desc = "It's a slimming black with reinforced seams; great for industrial work."
|
||||
desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpsuit"
|
||||
icon_state = "robotics"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "robotics"
|
||||
worn_state = "robotics"
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
worn_state = "roboticsf"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/machinery/computer/forensic_scanning
|
||||
name = "high-res forensic scanning computer"
|
||||
icon_state = "forensic"
|
||||
icon_keyboard = "security_key"
|
||||
icon_screen = "forensic"
|
||||
|
||||
var/screen = "database"
|
||||
var/authenticated = 0
|
||||
|
||||
@@ -4,10 +4,8 @@
|
||||
|
||||
var/obj/effect/blob/core/Blob
|
||||
|
||||
|
||||
/datum/event/blob/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
|
||||
level_seven_announcement()
|
||||
|
||||
/datum/event/blob/start()
|
||||
var/turf/T = pick(blobstart)
|
||||
@@ -18,10 +16,9 @@
|
||||
for(var/i = 1; i < rand(3, 4), i++)
|
||||
Blob.process()
|
||||
|
||||
|
||||
/datum/event/blob/tick()
|
||||
if(!Blob)
|
||||
kill()
|
||||
return
|
||||
if(IsMultiple(activeFor, 3))
|
||||
Blob.process()
|
||||
Blob.process()
|
||||
|
||||
@@ -5,11 +5,12 @@
|
||||
var/min_weight = 0 // The minimum weight that this event will have. Only used if non-zero.
|
||||
var/max_weight = 0 // The maximum weight that this event will have. Only use if non-zero.
|
||||
var/severity = 0 // The current severity of this event
|
||||
var/one_shot = 0 //If true, then the event will not be re-added to the list of available events
|
||||
var/one_shot = 0 // If true, then the event will not be re-added to the list of available events
|
||||
var/add_to_queue= 1 // If true, add back to the queue of events upon finishing.
|
||||
var/list/role_weights = list()
|
||||
var/datum/event/event_type
|
||||
|
||||
/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0)
|
||||
/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1)
|
||||
name = event_name
|
||||
severity = event_severity
|
||||
event_type = type
|
||||
@@ -17,6 +18,7 @@
|
||||
weight = event_weight
|
||||
min_weight = min_event_weight
|
||||
max_weight = max_event_weight
|
||||
src.add_to_queue = add_to_queue
|
||||
if(job_weights)
|
||||
role_weights = job_weights
|
||||
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
// Add the event back to the list of available events
|
||||
var/datum/event_container/EC = event_containers[E.severity]
|
||||
var/datum/event_meta/EM = E.event_meta
|
||||
EC.available_events += EM
|
||||
if(EM.add_to_queue)
|
||||
EC.available_events += EM
|
||||
|
||||
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
|
||||
|
||||
@@ -193,41 +194,41 @@
|
||||
|
||||
if(href_list["toggle_report"])
|
||||
report_at_round_end = !report_at_round_end
|
||||
admin_log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.")
|
||||
log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.")
|
||||
else if(href_list["dec_timer"])
|
||||
var/datum/event_container/EC = locate(href_list["event"])
|
||||
var/decrease = 60 * (10 ** text2num(href_list["dec_timer"]))
|
||||
EC.next_event_time -= decrease
|
||||
admin_log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).")
|
||||
log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).")
|
||||
else if(href_list["inc_timer"])
|
||||
var/datum/event_container/EC = locate(href_list["event"])
|
||||
var/increase = 60 * (10 ** text2num(href_list["inc_timer"]))
|
||||
EC.next_event_time += increase
|
||||
admin_log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).")
|
||||
log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).")
|
||||
else if(href_list["select_event"])
|
||||
var/datum/event_container/EC = locate(href_list["select_event"])
|
||||
var/datum/event_meta/EM = EC.SelectEvent()
|
||||
if(EM)
|
||||
admin_log_and_message_admins("has queued the [severity_to_string[EC.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has queued the [severity_to_string[EC.severity]] event '[EM.name]'.")
|
||||
else if(href_list["pause"])
|
||||
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.")
|
||||
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.")
|
||||
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)
|
||||
var/datum/event_container/EC = locate(href_list["interval"])
|
||||
EC.delay_modifier = delay
|
||||
admin_log_and_message_admins("has set the interval modifier for [severity_to_string[EC.severity]] events to [EC.delay_modifier].")
|
||||
log_and_message_admins("has set the interval modifier for [severity_to_string[EC.severity]] events to [EC.delay_modifier].")
|
||||
else if(href_list["stop"])
|
||||
if(alert("Stopping an event may have unintended side-effects. Continue?","Stopping Event!","Yes","No") != "Yes")
|
||||
return
|
||||
var/datum/event/E = locate(href_list["stop"])
|
||||
var/datum/event_meta/EM = E.event_meta
|
||||
admin_log_and_message_admins("has stopped the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has stopped the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
E.kill()
|
||||
else if(href_list["view_events"])
|
||||
selected_event_container = locate(href_list["view_events"])
|
||||
@@ -249,23 +250,23 @@
|
||||
var/datum/event_meta/EM = locate(href_list["set_weight"])
|
||||
EM.weight = weight
|
||||
if(EM != new_event)
|
||||
admin_log_and_message_admins("has changed the weight of the [severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].")
|
||||
log_and_message_admins("has changed the weight of the [severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].")
|
||||
else if(href_list["toggle_oneshot"])
|
||||
var/datum/event_meta/EM = locate(href_list["toggle_oneshot"])
|
||||
EM.one_shot = !EM.one_shot
|
||||
if(EM != new_event)
|
||||
admin_log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
else if(href_list["toggle_enabled"])
|
||||
var/datum/event_meta/EM = locate(href_list["toggle_enabled"])
|
||||
EM.enabled = !EM.enabled
|
||||
admin_log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
else if(href_list["remove"])
|
||||
if(alert("This will remove the event from rotation. Continue?","Removing Event!","Yes","No") != "Yes")
|
||||
return
|
||||
var/datum/event_meta/EM = locate(href_list["remove"])
|
||||
var/datum/event_container/EC = locate(href_list["EC"])
|
||||
EC.available_events -= EM
|
||||
admin_log_and_message_admins("has removed the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has removed the [severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
else if(href_list["add"])
|
||||
if(!new_event.name || !new_event.event_type)
|
||||
return
|
||||
@@ -273,12 +274,12 @@
|
||||
return
|
||||
new_event.severity = selected_event_container.severity
|
||||
selected_event_container.available_events += new_event
|
||||
admin_log_and_message_admins("has added \a [severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].")
|
||||
log_and_message_admins("has added \a [severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].")
|
||||
new_event = new
|
||||
else if(href_list["clear"])
|
||||
var/datum/event_container/EC = locate(href_list["clear"])
|
||||
if(EC.next_event)
|
||||
admin_log_and_message_admins("has dequeued the [severity_to_string[EC.severity]] event '[EC.next_event.name]'.")
|
||||
log_and_message_admins("has dequeued the [severity_to_string[EC.severity]] event '[EC.next_event.name]'.")
|
||||
EC.next_event = null
|
||||
|
||||
Interact(usr)
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
/datum/event/ionstorm/end()
|
||||
spawn(rand(5000,8000))
|
||||
if(prob(50))
|
||||
command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
|
||||
ion_storm_announcement()
|
||||
|
||||
/*
|
||||
/proc/IonStorm(botEmagChance = 10)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
var/const/radIntervall = 5 // Enough time between enter/leave belt for 10 hits, as per original implementation
|
||||
var/const/leaveBelt = 80
|
||||
var/const/revokeAccess = 135
|
||||
startWhen = 2
|
||||
announceWhen = 1
|
||||
endWhen = revokeAccess
|
||||
var/postStartTicks = 0
|
||||
@@ -52,3 +53,6 @@
|
||||
|
||||
/datum/event/radiation_storm/end()
|
||||
revoke_maint_all_access()
|
||||
|
||||
/datum/event/radiation_storm/syndicate/radiate()
|
||||
return
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/var/global/spacevines_spawned = 0
|
||||
|
||||
/datum/event/spacevine
|
||||
announceWhen = 10
|
||||
announceWhen = 60
|
||||
|
||||
/datum/event/spacevine/start()
|
||||
spacevine_infestation()
|
||||
spacevines_spawned = 1
|
||||
|
||||
/datum/event/spacevine/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
level_seven_announcement()
|
||||
|
||||
@@ -288,6 +288,8 @@
|
||||
if(M.mind)
|
||||
linkedholodeck.play_ambience(M)
|
||||
|
||||
linkedholodeck.sound_env = A.sound_env
|
||||
|
||||
spawn(30)
|
||||
for(var/obj/effect/landmark/L in linkedholodeck)
|
||||
if(L.name=="Atmospheric Test Start")
|
||||
|
||||
@@ -3,46 +3,112 @@
|
||||
// Holographic tables are in code/modules/tables/presets.dm
|
||||
// Holographic racks are in code/modules/tables/rack.dm
|
||||
|
||||
/turf/simulated/floor/holofloor/
|
||||
/turf/simulated/floor/holofloor
|
||||
thermal_conductivity = 0
|
||||
|
||||
/turf/simulated/floor/holofloor/grass
|
||||
name = "Lush Grass"
|
||||
icon_state = "grass1"
|
||||
floor_type = /obj/item/stack/tile/grass
|
||||
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
New()
|
||||
icon_state = "grass[pick("1","2","3","4")]"
|
||||
..()
|
||||
spawn(4)
|
||||
update_icon()
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
/turf/simulated/floor/holofloor/set_flooring()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/holofloor/carpet
|
||||
name = "carpet"
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon_state = "carpet"
|
||||
initial_flooring = /decl/flooring/carpet
|
||||
|
||||
/turf/simulated/floor/holofloor/tiled
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "steel"
|
||||
initial_flooring = /decl/flooring/tiling
|
||||
|
||||
/turf/simulated/floor/holofloor/tiled/dark
|
||||
name = "dark floor"
|
||||
icon_state = "dark"
|
||||
initial_flooring = /decl/flooring/tiling/dark
|
||||
|
||||
/turf/simulated/floor/holofloor/lino
|
||||
name = "lino"
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_state = "lino"
|
||||
initial_flooring = /decl/flooring/linoleum
|
||||
|
||||
/turf/simulated/floor/holofloor/wood
|
||||
name = "wooden floor"
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood
|
||||
|
||||
/turf/simulated/floor/holofloor/grass
|
||||
name = "lush grass"
|
||||
icon = 'icons/turf/flooring/grass.dmi'
|
||||
icon_state = "grass0"
|
||||
initial_flooring = /decl/flooring/grass
|
||||
|
||||
/turf/simulated/floor/holofloor/snow
|
||||
name = "snow"
|
||||
base_name = "snow"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
base_icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "snow"
|
||||
base_icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/holofloor/space
|
||||
icon = 'icons/turf/space.dmi'
|
||||
name = "\proper space"
|
||||
icon_state = "0"
|
||||
|
||||
/turf/simulated/floor/holofloor/reinforced
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
initial_flooring = /decl/flooring/reinforced
|
||||
name = "reinforced holofloor"
|
||||
icon_state = "reinforced"
|
||||
|
||||
/turf/simulated/floor/holofloor/space/New()
|
||||
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach
|
||||
desc = "Uncomfortably gritty for a hologram."
|
||||
base_desc = "Uncomfortably gritty for a hologram."
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
base_icon = 'icons/misc/beach.dmi'
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/sand
|
||||
name = "sand"
|
||||
icon_state = "desert"
|
||||
base_icon_state = "desert"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/coastline
|
||||
name = "coastline"
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
icon_state = "sandwater"
|
||||
base_icon_state = "sandwater"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/water
|
||||
name = "water"
|
||||
icon_state = "seashallow"
|
||||
base_icon_state = "seashallow"
|
||||
|
||||
/turf/simulated/floor/holofloor/desert
|
||||
name = "desert sand"
|
||||
base_name = "desert sand"
|
||||
desc = "Uncomfortably gritty for a hologram."
|
||||
base_desc = "Uncomfortably gritty for a hologram."
|
||||
icon_state = "asteroid"
|
||||
base_icon_state = "asteroid"
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
base_icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/holofloor/desert/New()
|
||||
..()
|
||||
if(prob(10))
|
||||
overlays += "asteroid[rand(0,9)]"
|
||||
|
||||
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
/obj/structure/holostool
|
||||
name = "stool"
|
||||
desc = "Apply butt."
|
||||
@@ -51,7 +117,6 @@
|
||||
anchored = 1.0
|
||||
pressure_resistance = 15
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/boxing/hologlove
|
||||
name = "boxing gloves"
|
||||
desc = "Because you really needed another excuse to punch your crewmates."
|
||||
@@ -175,7 +240,7 @@
|
||||
throw_range = 5
|
||||
throwforce = 0
|
||||
w_class = 2.0
|
||||
flags = NOSHIELD | NOBLOODY
|
||||
flags = NOBLOODY
|
||||
var/active = 0
|
||||
var/item_color
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.shoes && H.shoes.flags & NOSLIP)
|
||||
if(H.shoes && H.shoes.item_flags & NOSLIP)
|
||||
return
|
||||
|
||||
M.stop_pulling()
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
var/can_grab = 1
|
||||
if(istype(victim, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = victim
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags & NOSLIP))
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.item_flags & NOSLIP))
|
||||
can_grab = 0
|
||||
if(can_grab)
|
||||
src.visible_message("<span class='danger'>Tendrils lash out from \the [src] and drag \the [victim] in!</span>")
|
||||
|
||||
@@ -51,7 +51,7 @@ turf: (lighting_turf.dm)
|
||||
- proc/lighting_clear_overlays():
|
||||
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
|
||||
- proc/lighting_build_overlays():
|
||||
- Create lighting overlays for this turf
|
||||
- Create lighting overlays for this turf. Called by ChangeTurf in case the turf is being changed to use dynamic lighting.
|
||||
|
||||
|
||||
atom/movable/lighting_overlay: (lighting_overlay.dm)
|
||||
|
||||
@@ -246,6 +246,45 @@
|
||||
effect_turf.Cut(idx, idx + 1)
|
||||
effect_str.Cut(idx, idx + 1)
|
||||
|
||||
//Whoop yet not another copy pasta because speed ~~~~BYOND.
|
||||
//Calculates and applies lighting for a single turf. This is intended for when a turf switches to
|
||||
//using dynamic lighting when it was not doing so previously (when constructing a floor on space, for example).
|
||||
//Assumes the turf is visible and such.
|
||||
//For the love of god don't call this proc when it's not needed! Lighting artifacts WILL happen!
|
||||
/datum/light_source/proc/calc_turf(var/turf/T)
|
||||
var/idx = effect_turf.Find(T)
|
||||
if(!idx)
|
||||
return //WHY.
|
||||
|
||||
if(T.lighting_overlay)
|
||||
#if LIGHTING_FALLOFF == 1 // circular
|
||||
. = (T.lighting_overlay.x - source_turf.x)**2 + (T.lighting_overlay.y - source_turf.y)**2 + LIGHTING_HEIGHT
|
||||
#if LIGHTING_LAMBERTIAN == 1
|
||||
. = CLAMP01((1 - CLAMP01(sqrt(.) / light_range)) * (1 / (sqrt(. + 1))))
|
||||
#else
|
||||
. = 1 - CLAMP01(sqrt(.) / light_range)
|
||||
#endif
|
||||
|
||||
#elif LIGHTING_FALLOFF == 2 // square
|
||||
. = abs(T.lighting_overlay.x - source_turf.x) + abs(T.lighting_overlay.y - source_turf.y) + LIGHTING_HEIGHT
|
||||
#if LIGHTING_LAMBERTIAN == 1
|
||||
. = CLAMP01((1 - CLAMP01(. / light_range)) * (1 / (sqrt(.)**2 + )))
|
||||
#else
|
||||
. = 1 - CLAMP01(. / light_range)
|
||||
#endif
|
||||
#endif
|
||||
. *= light_power
|
||||
|
||||
. = round(., LIGHTING_ROUND_VALUE)
|
||||
|
||||
effect_str[idx] = .
|
||||
|
||||
T.lighting_overlay.update_lumcount(
|
||||
lum_r * .,
|
||||
lum_g * .,
|
||||
lum_b * .
|
||||
)
|
||||
|
||||
#undef LUM_FALLOFF
|
||||
#undef LUM_DISTANCE
|
||||
#undef LUM_ATTENUATION
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
var/atom/movable/lighting_overlay/O = PoolOrNew(/atom/movable/lighting_overlay, src)
|
||||
lighting_overlay = O
|
||||
|
||||
//Make the light sources recalculate us so the lighting overlay updates immediately
|
||||
for(var/datum/light_source/L in affecting_lights)
|
||||
L.calc_turf(src)
|
||||
|
||||
/turf/Entered(atom/movable/obj)
|
||||
. = ..()
|
||||
if(obj && obj.opacity)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
@@ -83,6 +83,7 @@
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
|
||||
|
||||
/material/sandstone/generate_recipes()
|
||||
..()
|
||||
@@ -96,6 +97,8 @@
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
|
||||
@@ -361,7 +361,6 @@ var/list/name_to_material
|
||||
destruction_desc = "shatters"
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/basic
|
||||
wire_product = /obj/item/stack/light_w
|
||||
rod_product = /obj/item/stack/material/glass/reinforced
|
||||
|
||||
/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
return
|
||||
|
||||
//Drill through the flooring, if any.
|
||||
if(istype(get_turf(src), /turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src)
|
||||
if(istype(get_turf(src), /turf/simulated/floor/asteroid))
|
||||
var/turf/simulated/floor/asteroid/T = get_turf(src)
|
||||
if(!T.dug)
|
||||
T.gets_dug()
|
||||
else if(istype(get_turf(src), /turf/simulated/floor))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "forensic0-old" //GET A BETTER SPRITE.
|
||||
item_state = "electronic"
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
|
||||
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
w_class = 4.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3750)
|
||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
var/drill_sound = 'sound/weapons/Genhit.ogg'
|
||||
var/drill_verb = "drilling"
|
||||
@@ -77,7 +77,7 @@
|
||||
icon_state = "handdrill"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 30
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
desc = "Yours is the drill that will pierce through the rock walls."
|
||||
drill_verb = "drilling"
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
icon_state = "jackhammer"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 20 //faster than drill, but cannot dig
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
||||
drill_verb = "hammering"
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
w_class = 3.0 //it is smaller than the pickaxe
|
||||
damtype = "fire"
|
||||
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
drill_verb = "cutting"
|
||||
drill_sound = 'sound/items/Welder.ogg'
|
||||
@@ -118,7 +118,7 @@
|
||||
icon_state = "dpickaxe"
|
||||
item_state = "dpickaxe"
|
||||
digspeed = 10
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4)
|
||||
desc = "A pickaxe with a diamond pick head."
|
||||
drill_verb = "picking"
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
icon_state = "diamonddrill"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 5 //Digs through walls, girders, and can dig up sand
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5)
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
drill_verb = "drilling"
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
throwforce = 4.0
|
||||
item_state = "shovel"
|
||||
w_class = 3.0
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
|
||||
sharp = 0
|
||||
@@ -230,7 +230,7 @@
|
||||
var/obj/item/stack/flag/F = locate() in get_turf(src)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T || !istype(T,/turf/simulated/floor/plating/airless/asteroid))
|
||||
if(!T || !istype(T,/turf/simulated/floor/asteroid))
|
||||
user << "The flag won't stand up in this terrain."
|
||||
return
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = T0C
|
||||
var/mined_turf = /turf/simulated/floor/plating/airless/asteroid
|
||||
var/mined_turf = /turf/simulated/floor/asteroid
|
||||
var/ore/mineral
|
||||
var/mined_ore = 0
|
||||
var/last_act = 0
|
||||
@@ -41,8 +41,8 @@
|
||||
var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
|
||||
for(var/direction in step_overlays)
|
||||
var/turf/turf_to_check = get_step(src,step_overlays[direction])
|
||||
if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/plating/airless/asteroid/T = turf_to_check
|
||||
if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid))
|
||||
var/turf/simulated/floor/asteroid/T = turf_to_check
|
||||
T.updateMineralOverlays()
|
||||
else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
|
||||
turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
|
||||
@@ -283,7 +283,7 @@
|
||||
|
||||
//Add some rubble, you did just clear out a big chunk of rock.
|
||||
|
||||
var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(mined_turf)
|
||||
var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf)
|
||||
|
||||
// Kill and update the space overlays around us.
|
||||
for(var/direction in step_overlays)
|
||||
@@ -387,25 +387,31 @@
|
||||
|
||||
/**********************Asteroid**************************/
|
||||
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid //floor piece
|
||||
// Setting icon/icon_state initially will use these values when the turf is built on/replaced.
|
||||
// This means you can put grass on the asteroid etc.
|
||||
/turf/simulated/floor/asteroid
|
||||
name = "sand"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
icon_state = "asteroid"
|
||||
base_name = "sand"
|
||||
base_desc = "Gritty and unpleasant."
|
||||
base_icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
base_icon_state = "asteroid"
|
||||
|
||||
initial_flooring = null
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
icon_plating = "asteroid"
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
var/overlay_detail
|
||||
has_resources = 1
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/New()
|
||||
/turf/simulated/floor/asteroid/New()
|
||||
|
||||
if(prob(20))
|
||||
overlay_detail = "asteroid[rand(0,9)]"
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/ex_act(severity)
|
||||
/turf/simulated/floor/asteroid/ex_act(severity)
|
||||
switch(severity)
|
||||
if(3.0)
|
||||
return
|
||||
@@ -416,7 +422,10 @@
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/turf/simulated/floor/asteroid/is_plating()
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if(!W || !user)
|
||||
return 0
|
||||
@@ -468,7 +477,7 @@
|
||||
..(W,user)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/proc/gets_dug()
|
||||
/turf/simulated/floor/asteroid/proc/gets_dug()
|
||||
|
||||
if(dug)
|
||||
return
|
||||
@@ -477,11 +486,10 @@
|
||||
new/obj/item/weapon/ore/glass(src)
|
||||
|
||||
dug = 1
|
||||
icon_plating = "asteroid_dug"
|
||||
icon_state = "asteroid_dug"
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/proc/updateMineralOverlays(var/update_neighbors)
|
||||
/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors)
|
||||
|
||||
overlays.Cut()
|
||||
|
||||
@@ -494,17 +502,18 @@
|
||||
if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral))
|
||||
overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
|
||||
|
||||
if(overlay_detail) overlays += overlay_detail
|
||||
//todo cache
|
||||
if(overlay_detail) overlays |= image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail)
|
||||
|
||||
if(update_neighbors)
|
||||
var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)
|
||||
for(var/direction in all_step_directions)
|
||||
var/turf/simulated/floor/plating/airless/asteroid/A
|
||||
if(istype(get_step(src, direction), /turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/asteroid/A
|
||||
if(istype(get_step(src, direction), /turf/simulated/floor/asteroid))
|
||||
A = get_step(src, direction)
|
||||
A.updateMineralOverlays()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/Entered(atom/movable/M as mob|obj)
|
||||
/turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj)
|
||||
..()
|
||||
if(istype(M,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
|
||||
@@ -189,7 +189,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
/mob/dead/observer/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
if(emergency_shuttle)
|
||||
var/eta_status = emergency_shuttle.get_status_panel_eta()
|
||||
if(eta_status)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
slot_flags = SLOT_HEAD | SLOT_OCLOTHING
|
||||
|
||||
/obj/item/weapon/holder/drone
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5)
|
||||
|
||||
/obj/item/weapon/holder/mouse
|
||||
w_class = 1
|
||||
|
||||
@@ -97,10 +97,12 @@
|
||||
..(message, null, verb)
|
||||
|
||||
/mob/living/bot/Bump(var/atom/A)
|
||||
if(istype(A, /obj/machinery/door) && botcard)
|
||||
if(on && botcard && istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard))
|
||||
D.open()
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/bot/emag_act(var/remaining_charges, var/mob/user)
|
||||
return 0
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
is_ranged = 1
|
||||
preparing_arrest_sounds = new()
|
||||
|
||||
a_intent = I_HURT
|
||||
mob_bump_flag = HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
mob_push_flags = HEAVY
|
||||
|
||||
var/shot_delay = 4
|
||||
var/last_shot = 0
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/list/path = list()
|
||||
var/list/ignorelist = list()
|
||||
var/turf/target
|
||||
var/floor_build_type = /decl/flooring/tiling // Basic steel floor.
|
||||
|
||||
/mob/living/bot/floorbot/update_icons()
|
||||
if(repairing)
|
||||
@@ -136,7 +137,7 @@
|
||||
target = T
|
||||
if(improvefloors && istype(T, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = T
|
||||
if(!F.floor_type && (get_turf(T) == loc || prob(40)))
|
||||
if(!F.flooring && (get_turf(T) == loc || prob(40)))
|
||||
target = T
|
||||
|
||||
if(emagged) // Time to griff
|
||||
@@ -150,7 +151,7 @@
|
||||
|
||||
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
|
||||
if(eattiles)
|
||||
for(var/obj/item/stack/tile/steel/T in view(src))
|
||||
for(var/obj/item/stack/tile/floor/T in view(src))
|
||||
if(T in ignorelist)
|
||||
continue
|
||||
target = T
|
||||
@@ -217,7 +218,7 @@
|
||||
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
|
||||
var/obj/item/I
|
||||
if(building == 1)
|
||||
I = new /obj/item/stack/tile/steel(src)
|
||||
I = new /obj/item/stack/tile/floor(src)
|
||||
else
|
||||
I = PoolOrNew(/obj/item/stack/rods, src)
|
||||
A.attackby(I, src)
|
||||
@@ -226,20 +227,19 @@
|
||||
update_icons()
|
||||
else if(istype(A, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = A
|
||||
if(!F.floor_type && amount)
|
||||
if(!F.flooring && amount)
|
||||
repairing = 1
|
||||
update_icons()
|
||||
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
|
||||
if(do_after(src, 50))
|
||||
if(!F.floor_type)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(src)
|
||||
F.attackby(T, src)
|
||||
if(!F.flooring)
|
||||
F.set_flooring(get_flooring_data(floor_build_type))
|
||||
addTiles(-1)
|
||||
target = null
|
||||
repairing = 0
|
||||
update_icons()
|
||||
else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/steel/T = A
|
||||
else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/floor/T = A
|
||||
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
|
||||
repairing = 1
|
||||
update_icons()
|
||||
@@ -272,7 +272,7 @@
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(Tsec)
|
||||
var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec)
|
||||
T.amount = amount
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
@@ -288,8 +288,8 @@
|
||||
|
||||
/* Assembly */
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/steel/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/steel))
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/floor))
|
||||
..()
|
||||
return
|
||||
if(contents.len >= 1)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
var/obj/secbot_listener/listener = null
|
||||
var/beacon_freq = 1445 // Navigation beacon frequency
|
||||
var/control_freq = AI_FREQ // Bot control frequency
|
||||
var/control_freq = BOT_FREQ // Bot control frequency
|
||||
var/list/path = list()
|
||||
var/frustration = 0
|
||||
var/turf/patrol_target = null // This is where we are headed
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "posibrain"
|
||||
w_class = 3
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
|
||||
var/searching = 0
|
||||
var/askDelay = 10 * 60 * 1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "mainboard"
|
||||
w_class = 3
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
|
||||
/obj/item/device/mmi/digital/robot/New()
|
||||
..()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(internal)
|
||||
if (!contents.Find(internal))
|
||||
internal = null
|
||||
if (!(wear_mask && (wear_mask.flags & AIRTIGHT)))
|
||||
if (!(wear_mask && (wear_mask.item_flags & AIRTIGHT)))
|
||||
internal = null
|
||||
if(internal)
|
||||
if (internals)
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
//Handle possble chem smoke effect
|
||||
/mob/living/carbon/proc/handle_chemical_smoke(var/datum/gas_mixture/environment)
|
||||
if(wear_mask && (wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(wear_mask && (wear_mask.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
|
||||
for(var/obj/effect/effect/smoke/chem/smoke in view(1, src))
|
||||
|
||||
@@ -147,11 +147,11 @@
|
||||
src.hand = !( src.hand )
|
||||
if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
|
||||
if(hand) //This being 1 means the left hand is in use
|
||||
hud_used.l_hand_hud_object.icon_state = "hand_active"
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_inactive"
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_active"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_inactive"
|
||||
else
|
||||
hud_used.l_hand_hud_object.icon_state = "hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_active"
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_active"
|
||||
/*if (!( src.hand ))
|
||||
src.hands.set_dir(NORTH)
|
||||
else
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue)
|
||||
if(red == r_skin && green == g_skin && blue == b_skin || !(species.flags & HAS_SKIN_COLOR))
|
||||
if(red == r_skin && green == g_skin && blue == b_skin || !(species.appearance_flags & HAS_SKIN_COLOR))
|
||||
return
|
||||
|
||||
r_skin = red
|
||||
@@ -122,7 +122,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
|
||||
if(s_tone == tone || !(species.flags & HAS_SKIN_TONE))
|
||||
if(s_tone == tone || !(species.appearance_flags & HAS_SKIN_TONE))
|
||||
return
|
||||
|
||||
s_tone = tone
|
||||
@@ -141,13 +141,13 @@
|
||||
var/datum/species/current_species = all_species[current_species_name]
|
||||
|
||||
if(check_whitelist && config.usealienwhitelist && !check_rights(R_ADMIN, 0, src)) //If we're using the whitelist, make sure to check it!
|
||||
if(!(current_species.flags & CAN_JOIN))
|
||||
if(!(current_species.spawn_flags & CAN_JOIN))
|
||||
continue
|
||||
if(whitelist.len && !(current_species_name in whitelist))
|
||||
continue
|
||||
if(blacklist.len && (current_species_name in blacklist))
|
||||
continue
|
||||
if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(src, current_species_name))
|
||||
if((current_species.spawn_flags & IS_WHITELISTED) && !is_alien_whitelisted(src, current_species_name))
|
||||
continue
|
||||
|
||||
valid_species += current_species_name
|
||||
|
||||
@@ -1225,10 +1225,10 @@
|
||||
else
|
||||
switch(target_zone)
|
||||
if("head")
|
||||
if(head && head.flags & THICKMATERIAL)
|
||||
if(head && head.item_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && wear_suit.flags & THICKMATERIAL)
|
||||
if(wear_suit && wear_suit.item_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
if(!fail_msg)
|
||||
@@ -1301,7 +1301,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/slip(var/slipped_on, stun_duration=8)
|
||||
if((species.flags & NO_SLIP) || (shoes && (shoes.flags & NOSLIP)))
|
||||
if((species.flags & NO_SLIP) || (shoes && (shoes.item_flags & NOSLIP)))
|
||||
return 0
|
||||
..(slipped_on,stun_duration)
|
||||
|
||||
@@ -1369,6 +1369,6 @@
|
||||
handle_regular_hud_updates()
|
||||
|
||||
/mob/living/carbon/human/Check_Shoegrip()
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP)) //magboots + dense_object = no floating
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.item_flags & NOSLIP)) //magboots + dense_object = no floating
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -60,10 +60,10 @@
|
||||
if(!check_has_mouth())
|
||||
H << "<span class='danger'>They don't have a mouth, you cannot perform CPR!</span>"
|
||||
return
|
||||
if((H.head && (H.head.flags & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
if((H.head && (H.head.body_parts_covered & FACE)) || (H.wear_mask && (H.wear_mask.body_parts_covered & FACE)))
|
||||
H << "<span class='notice'>Remove your mask!</span>"
|
||||
return 0
|
||||
if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
if((head && (head.body_parts_covered & FACE)) || (wear_mask && (wear_mask.body_parts_covered & FACE)))
|
||||
H << "<span class='notice'>Remove [src]'s mask!</span>"
|
||||
return 0
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ emp_act
|
||||
/mob/living/carbon/human/proc/check_mouth_coverage()
|
||||
var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform)
|
||||
for(var/obj/item/gear in protective_gear)
|
||||
if(istype(gear) && (gear.body_parts_covered & FACE) && (gear.flags & (MASKCOVERSMOUTH|HEADCOVERSMOUTH)))
|
||||
if(istype(gear) && (gear.body_parts_covered & FACE) && !(gear.item_flags & FLEXIBLEMATERIAL))
|
||||
return gear
|
||||
return null
|
||||
|
||||
|
||||
@@ -82,5 +82,5 @@
|
||||
var/list/flavor_texts = list()
|
||||
|
||||
mob_bump_flag = HUMAN
|
||||
mob_push_flags = ALLMOBS
|
||||
mob_swap_flags = ALLMOBS
|
||||
mob_push_flags = ~HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense.
|
||||
|
||||
//Do we have magboots or such on if so no slip
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP))
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.item_flags & NOSLIP))
|
||||
prob_slip = 0
|
||||
|
||||
//Check hands and mod slip
|
||||
|
||||
@@ -116,19 +116,12 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_glasses()
|
||||
else if (W == head)
|
||||
head = null
|
||||
|
||||
var/update_hair = 0
|
||||
if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
|
||||
update_hair = 1
|
||||
else if(istype(W, /obj/item))
|
||||
if(istype(W, /obj/item))
|
||||
var/obj/item/I = W
|
||||
if(I.flags_inv & HIDEMASK)
|
||||
update_hair = 1
|
||||
if(update_hair)
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
update_inv_wear_mask(0)
|
||||
|
||||
if(I.flags_inv & (HIDEMASK|BLOCKHAIR|BLOCKHEADHAIR))
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
update_inv_wear_mask(0)
|
||||
update_inv_head()
|
||||
else if (W == l_ear)
|
||||
l_ear = null
|
||||
@@ -144,9 +137,11 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_belt()
|
||||
else if (W == wear_mask)
|
||||
wear_mask = null
|
||||
if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
if(istype(W, /obj/item))
|
||||
var/obj/item/I = W
|
||||
if(I.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR))
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
if(internal)
|
||||
if(internals)
|
||||
internals.icon_state = "internal0"
|
||||
@@ -205,7 +200,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_back(redraw_mob)
|
||||
if(slot_wear_mask)
|
||||
src.wear_mask = W
|
||||
if((wear_mask.flags & BLOCKHAIR) || (wear_mask.flags & BLOCKHEADHAIR))
|
||||
if(wear_mask.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR))
|
||||
update_hair(redraw_mob) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
W.equipped(src, slot)
|
||||
@@ -261,7 +256,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_gloves(redraw_mob)
|
||||
if(slot_head)
|
||||
src.head = W
|
||||
if((head.flags & BLOCKHAIR) || (head.flags & BLOCKHEADHAIR) || (head.flags_inv & HIDEMASK))
|
||||
if(head.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR|HIDEMASK))
|
||||
update_hair(redraw_mob) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
update_inv_wear_mask(0)
|
||||
@@ -328,17 +323,16 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
switch(slot)
|
||||
if(slot_wear_mask)
|
||||
covering = src.head
|
||||
check_flags = HEADCOVERSMOUTH
|
||||
check_flags = FACE
|
||||
if(slot_glasses)
|
||||
covering = src.head
|
||||
check_flags = HEADCOVERSEYES
|
||||
check_flags = EYES
|
||||
if(slot_gloves, slot_w_uniform)
|
||||
covering = src.wear_suit
|
||||
|
||||
if(covering)
|
||||
if((covering.body_parts_covered & I.body_parts_covered) || (covering.flags & check_flags))
|
||||
user << "<span class='warning'>\The [covering] is in the way.</span>"
|
||||
return 0
|
||||
if(covering && (covering.body_parts_covered & (I.body_parts_covered|check_flags)))
|
||||
user << "<span class='warning'>\The [covering] is in the way.</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/get_equipped_item(var/slot)
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
var/pressure_adjustment_coefficient = 1 // Assume no protection at first.
|
||||
|
||||
if(wear_suit && (wear_suit.flags & STOPPRESSUREDAMAGE) && head && (head.flags & STOPPRESSUREDAMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed.
|
||||
if(wear_suit && (wear_suit.item_flags & STOPPRESSUREDAMAGE) && head && (head.item_flags & STOPPRESSUREDAMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed.
|
||||
pressure_adjustment_coefficient = 0
|
||||
|
||||
// Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure protection.
|
||||
@@ -303,11 +303,11 @@
|
||||
/** breathing **/
|
||||
|
||||
/mob/living/carbon/human/handle_chemical_smoke(var/datum/gas_mixture/environment)
|
||||
if(wear_mask && (wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(wear_mask && (wear_mask.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
if(glasses && (glasses.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(glasses && (glasses.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
if(head && (head.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(head && (head.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
if(!rig.offline && (rig.air_supply && internal == rig.air_supply))
|
||||
rig_supply = rig.air_supply
|
||||
|
||||
if (!rig_supply && (!contents.Find(internal) || !((wear_mask && (wear_mask.flags & AIRTIGHT)) || (head && (head.flags & AIRTIGHT)))))
|
||||
if (!rig_supply && (!contents.Find(internal) || !((wear_mask && (wear_mask.item_flags & AIRTIGHT)) || (head && (head.item_flags & AIRTIGHT)))))
|
||||
internal = null
|
||||
|
||||
if(internal)
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
remains_type = /obj/effect/decal/cleanable/ash
|
||||
death_message = "dissolves into ash..."
|
||||
|
||||
flags = IS_RESTRICTED | NO_BLOOD | NO_SCAN | NO_SLIP | NO_POISON
|
||||
flags = NO_BLOOD | NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
|
||||
spawn(1)
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
poison_type = "oxygen"
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | NO_SCAN | HAS_EYE_COLOR
|
||||
flags = NO_SCAN | NO_MINOR_CUT
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_EYE_COLOR
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
|
||||
var/darksight = 2 // Native darksight distance.
|
||||
var/flags = 0 // Various specific features.
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
@@ -135,9 +137,9 @@
|
||||
)
|
||||
|
||||
// Bump vars
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ALLMOBS // What can we push?
|
||||
var/swap_flags = ALLMOBS // What can we swap place with?
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ~HEAVY // What can we push?
|
||||
var/swap_flags = ~HEAVY // What can we swap place with?
|
||||
|
||||
/datum/species/New()
|
||||
if(hud_type)
|
||||
|
||||
@@ -17,18 +17,18 @@
|
||||
// to be drawn for the mob. This is fairly delicate, try to avoid messing with it
|
||||
// unless you know exactly what it does.
|
||||
var/list/gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
|
||||
"eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_l_ear, "name" = "Left Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"r_ear" = list("loc" = ui_r_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"shoes" = list("loc" = ui_shoes, "name" = "Shoes", "slot" = slot_shoes, "state" = "shoes", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
@@ -55,13 +55,13 @@
|
||||
/datum/hud_data/diona
|
||||
has_internals = 0
|
||||
gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
|
||||
"o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_gloves, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_oclothing, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
@@ -69,6 +69,6 @@
|
||||
|
||||
/datum/hud_data/monkey
|
||||
gear = list(
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
)
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
)
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
|
||||
language = "Sol Common" //todo?
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
|
||||
flags = IS_RESTRICTED | NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON
|
||||
flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
siemens_coefficient = 0
|
||||
|
||||
breath_type = null
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
flags = IS_RESTRICTED
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
bump_flag = MONKEY
|
||||
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
|
||||
@@ -6,10 +6,11 @@
|
||||
icobase = 'icons/mob/human_races/r_slime.dmi'
|
||||
deform = 'icons/mob/human_races/r_slime.dmi'
|
||||
|
||||
language = "Sol Common" //todo?
|
||||
language = null //todo?
|
||||
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
|
||||
flags = IS_RESTRICTED | NO_SCAN | NO_SLIP | NO_BREATHE
|
||||
siemens_coefficient = 3
|
||||
flags = NO_SCAN | NO_SLIP | NO_BREATHE | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
siemens_coefficient = 3 //conductive
|
||||
darksight = 3
|
||||
|
||||
blood_color = "#05FF9B"
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list("Sol Common")
|
||||
|
||||
flags = CAN_JOIN | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
spawn_flags = CAN_JOIN
|
||||
appearance_flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
@@ -41,7 +42,8 @@
|
||||
heat_level_2 = 480 //Default 400
|
||||
heat_level_3 = 1100 //Default 1000
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
flesh_color = "#34AF10"
|
||||
|
||||
@@ -96,7 +98,8 @@
|
||||
|
||||
primitive_form = "Farwa"
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
@@ -129,7 +132,8 @@
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list("Skrellian")
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
|
||||
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
@@ -202,7 +206,8 @@
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP
|
||||
flags = NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | NO_MINOR_CUT
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
|
||||
blood_color = "#004400"
|
||||
flesh_color = "#907E4A"
|
||||
@@ -276,7 +281,8 @@
|
||||
|
||||
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
|
||||
flags = NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#575757"
|
||||
|
||||
@@ -15,7 +15,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
icon_state = "facehugger"
|
||||
item_state = "facehugger"
|
||||
w_class = 3 //note: can be picked up by aliens unlike most other items of w_class below 4
|
||||
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
|
||||
flags = PROXMOVE
|
||||
body_parts_covered = FACE|EYES
|
||||
throw_range = 5
|
||||
|
||||
@@ -126,15 +126,6 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
L.visible_message("\red \b [src] leaps at [L]'s face!")
|
||||
|
||||
/* Tentatively removed since huggers can't be thrown anymore
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.head && H.head.flags & HEADCOVERSMOUTH)
|
||||
H.visible_message("\red \b [src] smashes against [H]'s [H.head]!")
|
||||
Die()
|
||||
return
|
||||
*/
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/target = L
|
||||
|
||||
@@ -235,6 +226,6 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.head && H.head.flags & HEADCOVERSMOUTH)
|
||||
if(H.head && (H.head.body_parts_covered & FACE) && !(H.head.item_flags & FLEXIBLEMATERIAL))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -144,8 +144,10 @@
|
||||
var/turf/simulated/wall/W = O
|
||||
if(W.material.flags & MATERIAL_UNMELTABLE)
|
||||
cannot_melt = 1
|
||||
else if(istype(O, /turf/simulated/floor/engine))
|
||||
cannot_melt = 1
|
||||
else if(istype(O, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = O
|
||||
if(F.flooring && (F.flooring.flags & TURF_ACID_IMMUNE))
|
||||
cannot_melt = 1
|
||||
|
||||
if(cannot_melt)
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
flags = IS_RESTRICTED | NO_BREATHE | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON
|
||||
flags = NO_BREATHE | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
reagent_tag = IS_XENOS
|
||||
|
||||
@@ -53,8 +54,8 @@
|
||||
)
|
||||
|
||||
bump_flag = ALIEN
|
||||
swap_flags = ALLMOBS
|
||||
push_flags = ALLMOBS ^ ROBOT
|
||||
swap_flags = ~HEAVY
|
||||
push_flags = (~HEAVY) ^ ROBOT
|
||||
|
||||
var/alien_number = 0
|
||||
var/caste_name = "creature" // Used to update alien name.
|
||||
|
||||
@@ -325,10 +325,10 @@ var/global/list/damage_icon_parts = list()
|
||||
stand_icon.Blend(base_icon,ICON_OVERLAY)
|
||||
|
||||
//Underwear
|
||||
if(underwear && species.flags & HAS_UNDERWEAR)
|
||||
if(underwear && species.appearance_flags & HAS_UNDERWEAR)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear), ICON_OVERLAY)
|
||||
|
||||
if(undershirt && species.flags & HAS_UNDERWEAR)
|
||||
if(undershirt && species.appearance_flags & HAS_UNDERWEAR)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', undershirt), ICON_OVERLAY)
|
||||
|
||||
if(update_icons)
|
||||
@@ -348,7 +348,7 @@ var/global/list/damage_icon_parts = list()
|
||||
return
|
||||
|
||||
//masks and helmets can obscure our hair.
|
||||
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
|
||||
if( (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR)))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
@@ -364,7 +364,7 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
|
||||
if(h_style && !(head && (head.flags_inv & BLOCKHEADHAIR)))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style && src.species.name in hair_style.species_allowed)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
@@ -573,7 +573,7 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
/mob/living/carbon/human/update_inv_ears(var/update_icons=1)
|
||||
overlays_standing[EARS_LAYER] = null
|
||||
if( (head && (head.flags & (BLOCKHAIR | BLOCKHEADHAIR))) || (wear_mask && (wear_mask.flags & (BLOCKHAIR | BLOCKHEADHAIR))))
|
||||
if( (head && (head.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))) || (wear_mask && (wear_mask.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
var/damage_mod = 1
|
||||
//presumably, if they are wearing a helmet that stops pressure effects, then it probably covers the throat as well
|
||||
var/obj/item/clothing/head/helmet = get_equipped_item(slot_head)
|
||||
if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.flags & STOPPRESSUREDAMAGE))
|
||||
if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.item_flags & STOPPRESSUREDAMAGE))
|
||||
//we don't do an armor_check here because this is not an impact effect like a weapon swung with momentum, that either penetrates or glances off.
|
||||
damage_mod = 1.0 - (helmet.armor["melee"]/100)
|
||||
|
||||
|
||||
@@ -128,7 +128,6 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return verb
|
||||
|
||||
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="")
|
||||
|
||||
if(client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (Muted)."
|
||||
@@ -167,7 +166,7 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
// irrespective of distance or anything else.
|
||||
if(speaking.flags & HIVEMIND)
|
||||
speaking.broadcast(src,trim(message))
|
||||
return
|
||||
return 1
|
||||
//If we've gotten this far, keep going!
|
||||
if(speaking.flags & COMMON_VERBS)
|
||||
verb = say_quote(message)
|
||||
@@ -188,11 +187,11 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
verb = handle_s[2]
|
||||
|
||||
if(!message || message == "")
|
||||
return
|
||||
return 0
|
||||
|
||||
var/list/obj/item/used_radios = new
|
||||
if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name))
|
||||
return
|
||||
return 1
|
||||
|
||||
var/list/handle_v = handle_speech_sound()
|
||||
var/sound/speech_sound = handle_v[1]
|
||||
|
||||
@@ -78,6 +78,8 @@
|
||||
|
||||
for(var/datum/ai_law/law in laws.laws_to_state())
|
||||
can_state = statelaw("[prefix][law.get_index()]. [law.law]")
|
||||
if(!can_state)
|
||||
break
|
||||
|
||||
if(!can_state)
|
||||
src << "<span class='danger'>[method]: Unable to state laws. Communication method unavailable.</span>"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINEERING = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
|
||||
var/mode = 1;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user