mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-01-05 15:03:48 +00:00
Merge branch 'master' into botFixes
This commit is contained in:
@@ -1315,7 +1315,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
|
||||
if (!istype(src,/datum/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/datum/admins))
|
||||
if (!istype(src,/datum/admins) || !check_rights(R_ADMIN))
|
||||
usr << "Error: you are not an admin!"
|
||||
return
|
||||
|
||||
@@ -1323,19 +1323,33 @@ proc/admin_notice(var/message, var/rights)
|
||||
usr << "Mode has not started."
|
||||
return
|
||||
|
||||
message_admins("[key_name(usr)] attempting to force mode latespawn.")
|
||||
ticker.mode.next_spawn = 0
|
||||
log_and_message_admins("attempting to force mode autospawn.")
|
||||
ticker.mode.try_latespawn()
|
||||
|
||||
|
||||
/datum/admins/proc/paralyze_mob(mob/living/H as mob)
|
||||
set category = "Admin"
|
||||
set name = "Toggle Paralyze"
|
||||
set desc = "Paralyzes a player. Or unparalyses them."
|
||||
|
||||
var/msg
|
||||
|
||||
if(check_rights(R_ADMIN|R_MOD))
|
||||
if (H.paralysis == 0)
|
||||
H.paralysis = 8000
|
||||
msg = "has paralyzed [key_name(H)]."
|
||||
else
|
||||
H.paralysis = 0
|
||||
msg = "has unparalyzed [key_name(H)]."
|
||||
log_and_message_admins(msg)
|
||||
/datum/admins/proc/set_tcrystals(mob/living/carbon/human/H as mob)
|
||||
set category = "Debug"
|
||||
set name = "Set Telecrystals"
|
||||
set desc = "Allows admins to change telecrystals of a user."
|
||||
|
||||
|
||||
var/crystals
|
||||
|
||||
|
||||
if(check_rights(R_ADMIN))
|
||||
crystals = input("Amount of telecrystals for [H.ckey]", crystals) as null|num
|
||||
crystals = input("Amount of telecrystals for [H.ckey], currently [H.mind.tcrystals].", crystals) as null|num
|
||||
if (!isnull(crystals))
|
||||
H.mind.tcrystals = crystals
|
||||
var/msg = "[key_name(usr)] has modified [H.ckey]'s telecrystals to [crystals]."
|
||||
@@ -1343,18 +1357,19 @@ proc/admin_notice(var/message, var/rights)
|
||||
else
|
||||
usr << "You do not have access to this command."
|
||||
|
||||
/datum/admins/proc/paralyze_mob(mob/living/H as mob)
|
||||
set category = "Admin"
|
||||
set name = "Toggle Paralyze"
|
||||
set desc = "Paralyzes a player. Or unparalyses them."
|
||||
|
||||
var/msg
|
||||
|
||||
if(check_rights(R_ADMIN|R_MOD))
|
||||
if (H.paralysis == 0)
|
||||
H.paralysis = 8000
|
||||
msg = "[key_name(usr)] has paralyzed [key_name(H)]."
|
||||
else
|
||||
H.paralysis = 0
|
||||
msg = "[key_name(usr)] has unparalyzed [key_name(H)]."
|
||||
message_admins(msg)
|
||||
/datum/admins/proc/add_tcrystals(mob/living/carbon/human/H as mob)
|
||||
set category = "Debug"
|
||||
set name = "Add Telecrystals"
|
||||
set desc = "Allows admins to change telecrystals of a user by addition."
|
||||
|
||||
var/crystals
|
||||
|
||||
if(check_rights(R_ADMIN))
|
||||
crystals = input("Amount of telecrystals to give to [H.ckey], currently [H.mind.tcrystals].", crystals) as null|num
|
||||
if (!isnull(crystals))
|
||||
H.mind.tcrystals += crystals
|
||||
var/msg = "[key_name(usr)] has added [crystals] to [H.ckey]'s telecrystals."
|
||||
message_admins(msg)
|
||||
else
|
||||
usr << "You do not have access to this command."
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ var/list/admin_verbs_default = list(
|
||||
var/list/admin_verbs_admin = list(
|
||||
/client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
|
||||
/datum/admins/proc/set_tcrystals,
|
||||
/datum/admins/proc/add_tcrystals,
|
||||
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
|
||||
// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage
|
||||
/datum/admins/proc/show_game_mode, /*Configuration window for the current game mode.*/
|
||||
@@ -132,9 +133,6 @@ var/list/admin_verbs_spawn = list(
|
||||
/datum/admins/proc/spawn_plant,
|
||||
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
|
||||
/client/proc/respawn_character,
|
||||
/client/proc/FireLaser,
|
||||
/client/proc/FireCannons,
|
||||
/client/proc/ChangeIcarusPosition,
|
||||
/client/proc/virus2_editor,
|
||||
/client/proc/spawn_chemdisp_cartridge
|
||||
)
|
||||
@@ -605,22 +603,6 @@ var/list/admin_verbs_mentor = list(
|
||||
message_admins("\blue [ckey] creating an admin explosion at [epicenter.loc].")
|
||||
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/give_disease(mob/T as mob in mob_list) // -- Giacom
|
||||
set category = "Fun"
|
||||
set name = "Give Disease (old)"
|
||||
set desc = "Gives a (tg-style) Disease to a mob."
|
||||
var/list/disease_names = list()
|
||||
for(var/v in diseases)
|
||||
// "/datum/disease/" 15 symbols ~Intercross
|
||||
disease_names.Add(copytext("[v]", 16, 0))
|
||||
var/datum/disease/D = input("Choose the disease to give to that guy", "ACHOO") as null|anything in disease_names
|
||||
if(!D) return
|
||||
var/path = text2path("/datum/disease/[D]")
|
||||
T.contract_disease(new path, 1)
|
||||
feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].")
|
||||
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the disease [D].", 1)
|
||||
|
||||
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
|
||||
set category = "Fun"
|
||||
set name = "Give Disease"
|
||||
|
||||
@@ -1681,13 +1681,8 @@
|
||||
else
|
||||
var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
var/datum/feed_channel/newChannel = new /datum/feed_channel
|
||||
newChannel.channel_name = src.admincaster_feed_channel.channel_name
|
||||
newChannel.author = src.admincaster_signature
|
||||
newChannel.locked = src.admincaster_feed_channel.locked
|
||||
newChannel.is_admin_channel = 1
|
||||
feedback_inc("newscaster_channels",1)
|
||||
news_network.network_channels += newChannel //Adding channel to the global network
|
||||
news_network.CreateFeedChannel(admincaster_feed_channel.channel_name, admincaster_signature, admincaster_feed_channel.locked, 1)
|
||||
feedback_inc("newscaster_channels",1) //Adding channel to the global network
|
||||
log_admin("[key_name_admin(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!")
|
||||
src.admincaster_screen=5
|
||||
src.access_news_network()
|
||||
|
||||
@@ -296,3 +296,4 @@
|
||||
if(pa.Find("right"))
|
||||
if(holder.throw_atom)
|
||||
holder.throw_atom.throw_at(object, 10, 1)
|
||||
log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]")
|
||||
|
||||
@@ -496,8 +496,6 @@
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/plain/monocle(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/det(M), slot_head)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
|
||||
|
||||
@@ -604,7 +602,6 @@
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
|
||||
|
||||
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
|
||||
for(var/obj/item/briefcase_item in sec_briefcase)
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
/client/proc/FireLaser()
|
||||
set name = "Fire the Icarus lasers"
|
||||
set desc = "Fires a laser bolt at your position. You should only do this as a(n) (a)ghost"
|
||||
set category = "Fun"
|
||||
|
||||
var/turf/target = get_turf(src.mob)
|
||||
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
|
||||
|
||||
Icarus_FireLaser(target)
|
||||
|
||||
|
||||
/client/proc/FireCannons()
|
||||
set name = "Fire the Icarus cannons"
|
||||
set desc = "Fires an explosive missile at your position. You should only do this as a(n) (a)ghost."
|
||||
set category = "Fun"
|
||||
|
||||
var/turf/target = get_turf(src.mob)
|
||||
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
|
||||
|
||||
Icarus_FireCannon(target)
|
||||
|
||||
|
||||
/client/proc/ChangeIcarusPosition()
|
||||
set name = "Adjust Icarus Position"
|
||||
set desc = "Lets you chose the position of the Icarus in regards to the map."
|
||||
set category = "Fun"
|
||||
|
||||
log_and_message_admins("is changing the Icarus position.")
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
Icarus_SetPosition(src)
|
||||
|
||||
var/icarus_position = SOUTH
|
||||
|
||||
proc/Icarus_FireLaser(var/turf/target)
|
||||
// Find the world edge to fire from.
|
||||
var/x = icarus_position & EAST ? world.maxx : icarus_position & WEST ? 1 : target.x
|
||||
var/y = icarus_position & NORTH ? world.maxy : icarus_position & SOUTH ? 1 : target.y
|
||||
var/x_off = x != target.x ? abs(target.x - x) : INFINITY
|
||||
var/y_off = y != target.y ? abs(target.y - y) : INFINITY
|
||||
// Get the minimum number of steps using the rise/run shit.
|
||||
var/iterations = round(min(x_off, y_off)) - 14 // We cannot fire straight from the edge since teleport thing.
|
||||
|
||||
// Now we can get the location of the start.
|
||||
x = target.x + (icarus_position & EAST ? iterations : icarus_position & WEST ? -iterations : 0)
|
||||
y = target.y + (icarus_position & NORTH ? iterations : icarus_position & SOUTH ? -iterations : 0)
|
||||
|
||||
var/turf/start = locate(x, y, target.z)
|
||||
|
||||
// should step down as:
|
||||
// 1000, 500, 333, 250, 200, 167, 142, 125, 111, 100, 90
|
||||
var/damage = 1000
|
||||
for(var/i in 2 to 12)
|
||||
var/obj/item/projectile/beam/in_chamber = new (start)
|
||||
in_chamber.original = target
|
||||
in_chamber.starting = start
|
||||
in_chamber.silenced = 1
|
||||
in_chamber.yo = icarus_position & NORTH ? -1 : icarus_position & SOUTH ? 1 : 0
|
||||
in_chamber.xo = icarus_position & EAST ? -1 : icarus_position & WEST ? 1 : 0
|
||||
in_chamber.damage = damage
|
||||
in_chamber.kill_count = 500
|
||||
in_chamber.process()
|
||||
damage -= damage / i
|
||||
sleep(-1)
|
||||
|
||||
// Let everyone know what hit them.
|
||||
var/obj/item/projectile/beam/in_chamber = new (start)
|
||||
in_chamber.original = target
|
||||
in_chamber.starting = start
|
||||
in_chamber.silenced = 0
|
||||
in_chamber.yo = icarus_position & NORTH ? -1 : icarus_position & SOUTH ? 1 : 0
|
||||
in_chamber.xo = icarus_position & EAST ? -1 : icarus_position & WEST ? 1 : 0
|
||||
in_chamber.kill_count = 500
|
||||
in_chamber.damage = 0
|
||||
in_chamber.name = "point defense laser"
|
||||
in_chamber.firer = "Icarus" // Never displayed, but we want this to display the hit message.
|
||||
in_chamber.process()
|
||||
|
||||
proc/Icarus_FireCannon(var/turf/target)
|
||||
// Find the world edge to fire from.
|
||||
var/x = icarus_position & EAST ? world.maxx : icarus_position & WEST ? 1 : target.x
|
||||
var/y = icarus_position & NORTH ? world.maxy : icarus_position & SOUTH ? 1 : target.y
|
||||
var/x_off = x != target.x ? abs(target.x - x) : INFINITY
|
||||
var/y_off = y != target.y ? abs(target.y - y) : INFINITY
|
||||
// Get the minimum number of steps using the rise/run shit.
|
||||
var/iterations = round(min(x_off, y_off)) - 14 // We cannot fire straight from the edge since teleport thing.
|
||||
|
||||
// Now we can get the location of the start.
|
||||
x = target.x + (icarus_position & EAST ? iterations : icarus_position & WEST ? -iterations : 0)
|
||||
y = target.y + (icarus_position & NORTH ? iterations : icarus_position & SOUTH ? -iterations : 0)
|
||||
|
||||
var/turf/start = locate(x, y, target.z)
|
||||
|
||||
// Now we find the corresponding turf on the other side of the level.
|
||||
// Yeah, yeah. Overuse of the terinary operator. So sue me.
|
||||
x = icarus_position & EAST ? 1 : icarus_position & WEST ? world.maxx : target.x
|
||||
y = icarus_position & NORTH ? 1 : icarus_position & SOUTH ? world.maxy : target.y
|
||||
x_off = x != target.x ? abs(target.x - x) : INFINITY
|
||||
y_off = y != target.y ? abs(target.y - y) : INFINITY
|
||||
iterations = round(min(x_off, y_off))
|
||||
x = target.x + (icarus_position & EAST ? -iterations : icarus_position & WEST ? iterations : 0)
|
||||
y = target.y + (icarus_position & NORTH ? -iterations : icarus_position & SOUTH ? iterations : 0)
|
||||
target = locate(x, y, target.z)
|
||||
|
||||
// Finally fire the fucker.
|
||||
var/obj/effect/meteor/projectile = new (start)
|
||||
projectile.dest = target
|
||||
projectile.name = "main gun projectile" // stealthy
|
||||
projectile.hits = 6
|
||||
|
||||
// Make sure it travels
|
||||
spawn(0)
|
||||
walk_towards(projectile, projectile.dest, 1)
|
||||
|
||||
proc/Icarus_SetPosition(var/user)
|
||||
var/global/list/directions = list("North" = 1, "North East" = 5, "East" = 4, "South East" = 6, "South" = 2, "South West" = 10, "West" = 8, "North West" = 9)
|
||||
var/direction = input(user, "Where should the Icarus fire from?", "Icarus Comms") as null|anything in directions
|
||||
if(!direction)
|
||||
return
|
||||
|
||||
icarus_position = directions[direction]
|
||||
@@ -520,7 +520,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
P.name = "'[command_name()] Update.'"
|
||||
P.info = input
|
||||
P.info = replacetext(input, "\n", "<br/>")
|
||||
P.update_space(P.info)
|
||||
P.update_icon()
|
||||
C.messagetitle.Add("[command_name()] Update")
|
||||
C.messagetext.Add(P.info)
|
||||
@@ -627,7 +628,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1)
|
||||
|
||||
if(istype(M, /mob/dead/observer))
|
||||
gibs(M.loc, M.viruses)
|
||||
gibs(M.loc)
|
||||
return
|
||||
|
||||
M.gib()
|
||||
|
||||
@@ -74,17 +74,6 @@
|
||||
src.give_spell(M)
|
||||
href_list["datumrefresh"] = href_list["give_spell"]
|
||||
|
||||
else if(href_list["give_disease"])
|
||||
if(!check_rights(R_ADMIN|R_FUN)) return
|
||||
|
||||
var/mob/M = locate(href_list["give_disease"])
|
||||
if(!istype(M))
|
||||
usr << "This can only be used on instances of type /mob"
|
||||
return
|
||||
|
||||
src.give_disease(M)
|
||||
href_list["datumrefresh"] = href_list["give_spell"]
|
||||
|
||||
else if(href_list["give_disease2"])
|
||||
if(!check_rights(R_ADMIN|R_FUN)) return
|
||||
|
||||
|
||||
@@ -137,6 +137,11 @@
|
||||
interact(mob/user as mob)
|
||||
return //HTML MENU FOR WIRES GOES HERE
|
||||
|
||||
/obj/item/device/assembly/nano_host()
|
||||
if(istype(loc, /obj/item/device/assembly_holder))
|
||||
return loc.nano_host()
|
||||
return ..()
|
||||
|
||||
/*
|
||||
var/small_icon_state = null//If this obj will go inside the assembly use this for icons
|
||||
var/list/small_icon_state_overlays = null//Same here
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name = "mousetrap"
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
icon_state = "mousetrap"
|
||||
origin_tech = list(TECH_COMBAT = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 10)
|
||||
origin_tech = list(TECH_COMBAT = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 10)
|
||||
var/armed = 0
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
if(!armed)
|
||||
user << "<span class='notice'>You arm [src].</span>"
|
||||
else
|
||||
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!user.hand)
|
||||
which_hand = "r_hand"
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
attack_hand(mob/living/user as mob)
|
||||
if(armed)
|
||||
if(((user.getBrainLoss() >= 60 || CLUMSY in user.mutations)) && prob(50))
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!user.hand)
|
||||
which_hand = "r_hand"
|
||||
|
||||
@@ -158,6 +158,7 @@
|
||||
spawn(5) // And wait a half-second, since it sounds like you can do this too fast.
|
||||
if(src)
|
||||
winset(src, null, "command=\".configure graphics-hwmode off\"")
|
||||
sleep(2) // wait a bit more, possibly fixes hardware mode not re-activating right
|
||||
winset(src, null, "command=\".configure graphics-hwmode on\"")
|
||||
|
||||
log_client_to_db()
|
||||
@@ -280,6 +281,9 @@
|
||||
if(inactivity > duration) return inactivity
|
||||
return 0
|
||||
|
||||
/client/proc/last_activity_seconds()
|
||||
return inactivity / 10
|
||||
|
||||
//send resources to the client. It's here in its own proc so we can move it around easiliy if need be
|
||||
/client/proc/send_resources()
|
||||
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
S["OOC_Notes"] << pref.metadata
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
||||
pref.age = sanitize_integer(pref.age, AGE_MIN, AGE_MAX, initial(pref.age))
|
||||
if(!pref.species) pref.species = "Human"
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age))
|
||||
pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders))
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||
if(!pref.real_name)
|
||||
@@ -65,9 +67,11 @@
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["age"])
|
||||
var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference", pref.age) as num|null
|
||||
if(!pref.species) pref.species = "Human"
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", pref.age) as num|null
|
||||
if(new_age && CanUseTopic(user))
|
||||
pref.age = max(min(round(text2num(new_age)), AGE_MAX), AGE_MIN)
|
||||
pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["spawnpoint"])
|
||||
|
||||
@@ -135,7 +135,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
R = all_robolimbs[pref.rlimb_data[name]]
|
||||
else
|
||||
R = basic_robolimb
|
||||
. += "\t[R.company] [organ_name] prothesis"
|
||||
. += "\t[R.company] [organ_name] prosthesis"
|
||||
else if(status == "amputated")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
@@ -264,6 +264,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.s_tone = 0
|
||||
|
||||
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
|
||||
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
pref.age = max(min(pref.age, S.max_age), S.min_age)
|
||||
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["hair_color"])
|
||||
@@ -370,7 +374,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/third_limb = null // if you try to unchange the hand, the arm should also change
|
||||
|
||||
// Do not let them amputate their entire body, ty.
|
||||
var/list/choice_options = list("Normal","Amputated","Prothesis")
|
||||
var/list/choice_options = list("Normal","Amputated","Prosthesis")
|
||||
switch(organ_tag)
|
||||
if("Left Leg")
|
||||
limb = BP_L_LEG
|
||||
@@ -398,11 +402,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
third_limb = BP_R_ARM
|
||||
if("Head")
|
||||
limb = BP_HEAD
|
||||
choice_options = list("Prothesis")
|
||||
choice_options = list("Prosthesis")
|
||||
if("Full Body")
|
||||
limb = BP_TORSO
|
||||
third_limb = BP_GROIN
|
||||
choice_options = list("Normal","Prothesis")
|
||||
choice_options = list("Normal","Prosthesis")
|
||||
|
||||
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options
|
||||
if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
@@ -429,7 +433,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.organ_data[second_limb] = "amputated"
|
||||
pref.rlimb_data[second_limb] = null
|
||||
|
||||
if("Prothesis")
|
||||
if("Prosthesis")
|
||||
var/tmp_species = pref.species ? pref.species : "Human"
|
||||
var/list/usable_manufacturers = list()
|
||||
for(var/company in chargen_robolimbs)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/category_item/player_setup_item/general/equipment
|
||||
name = "Equipment"
|
||||
name = "Clothing"
|
||||
sort_order = 4
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
|
||||
@@ -8,7 +8,6 @@
|
||||
S["socks"] >> pref.socks
|
||||
S["backbag"] >> pref.backbag
|
||||
S["pdachoice"] >> pref.pdachoice
|
||||
S["gear"] >> pref.gear
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
||||
S["underwear"] << pref.underwear
|
||||
@@ -16,7 +15,6 @@
|
||||
S["socks"] << pref.socks
|
||||
S["backbag"] << pref.backbag
|
||||
S["pdachoice"] << pref.pdachoice
|
||||
S["gear"] << pref.gear
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/sanitize_character()
|
||||
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
|
||||
@@ -32,61 +30,17 @@
|
||||
if(!get_key_by_value(socks_t, pref.socks))
|
||||
pref.socks = socks_t[1]
|
||||
|
||||
var/total_cost = 0
|
||||
for(var/gear_name in pref.gear)
|
||||
if(!gear_datums[gear_name])
|
||||
pref.gear -= gear_name
|
||||
else if(!(gear_name in valid_gear_choices()))
|
||||
pref.gear -= gear_name
|
||||
else
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
if(total_cost + G.cost > MAX_GEAR_COST)
|
||||
pref.gear -= gear_name
|
||||
else
|
||||
total_cost += G.cost
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/content()
|
||||
. += "<b>Equipment Loadout:</b><br>"
|
||||
. += "<b>Equipment:</b><br>"
|
||||
. += "Underwear: <a href='?src=\ref[src];change_underwear=1'><b>[get_key_by_value(get_undies(),pref.underwear)]</b></a><br>"
|
||||
. += "Undershirt: <a href='?src=\ref[src];change_undershirt=1'><b>[get_key_by_value(undershirt_t,pref.undershirt)]</b></a><br>"
|
||||
. += "Socks: <a href='?src=\ref[src];change_socks=1'><b>[get_key_by_value(socks_t,pref.socks)]</b></a><br>"
|
||||
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
||||
. += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdachoicelist[pref.pdachoice]]</b></a><br>"
|
||||
|
||||
. += "<br><b>Custom Loadout:</b><br>"
|
||||
var/total_cost = 0
|
||||
|
||||
if(pref.gear && pref.gear.len)
|
||||
for(var/i = 1; i <= pref.gear.len; i++)
|
||||
var/datum/gear/G = gear_datums[pref.gear[i]]
|
||||
if(G)
|
||||
total_cost += G.cost
|
||||
. += "[pref.gear[i]] ([G.cost] points) <a href='?src=\ref[src];remove_loadout=[i]'>Remove</a><br>"
|
||||
|
||||
. += "<b>Used:</b> [total_cost] points."
|
||||
else
|
||||
. += "None."
|
||||
|
||||
if(total_cost < MAX_GEAR_COST)
|
||||
. += " <a href='?src=\ref[src];add_loadout=1'>Add</a>"
|
||||
if(pref.gear && pref.gear.len)
|
||||
. += " <a href='?src=\ref[src];clear_loadout=1'>Clear</a>"
|
||||
. += "<br>"
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/get_undies()
|
||||
return pref.gender == MALE ? underwear_m : underwear_f
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/valid_gear_choices(var/max_cost)
|
||||
var/list/valid_gear_choices = list()
|
||||
for(var/gear_name in gear_datums)
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
if(G.whitelisted && !is_alien_whitelisted(preference_mob(), G.whitelisted))
|
||||
continue
|
||||
if(max_cost && G.cost > max_cost)
|
||||
continue
|
||||
valid_gear_choices += gear_name
|
||||
return valid_gear_choices
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["change_underwear"])
|
||||
var/underwear_options = get_undies()
|
||||
@@ -118,33 +72,4 @@
|
||||
if(!isnull(new_pdachoice) && CanUseTopic(user))
|
||||
pref.pdachoice = pdachoicelist.Find(new_pdachoice)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["add_loadout"])
|
||||
var/total_cost = 0
|
||||
for(var/gear_name in pref.gear)
|
||||
if(gear_datums[gear_name])
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
total_cost += G.cost
|
||||
|
||||
var/choice = input(user, "Select gear to add:", "Character Preference") as null|anything in valid_gear_choices(MAX_GEAR_COST - total_cost)
|
||||
if(choice && gear_datums[choice] && CanUseTopic(user))
|
||||
var/datum/gear/C = gear_datums[choice]
|
||||
total_cost += C.cost
|
||||
if(C && total_cost <= MAX_GEAR_COST)
|
||||
pref.gear += choice
|
||||
user << "<span class='notice'>Added \the '[choice]' for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining).</span>"
|
||||
else
|
||||
user << "<span class='warning'>Adding \the '[choice]' will exceed the maximum loadout cost of [MAX_GEAR_COST] points.</span>"
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["remove_loadout"])
|
||||
var/i_remove = text2num(href_list["remove_loadout"])
|
||||
if(i_remove < 1 || i_remove > pref.gear.len) return TOPIC_NOACTION
|
||||
pref.gear.Cut(i_remove, i_remove + 1)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["clear_loadout"])
|
||||
pref.gear.Cut()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
161
code/modules/client/preference_setup/loadout/loadout.dm
Normal file
161
code/modules/client/preference_setup/loadout/loadout.dm
Normal file
@@ -0,0 +1,161 @@
|
||||
var/list/loadout_categories = list()
|
||||
var/list/gear_datums = list()
|
||||
|
||||
/datum/loadout_category
|
||||
var/category = ""
|
||||
var/list/gear = list()
|
||||
|
||||
/datum/loadout_category/New(var/cat)
|
||||
category = cat
|
||||
..()
|
||||
|
||||
/hook/startup/proc/populate_gear_list()
|
||||
|
||||
//create a list of gear datums to sort
|
||||
for(var/geartype in typesof(/datum/gear)-/datum/gear)
|
||||
var/datum/gear/G = geartype
|
||||
|
||||
var/use_name = initial(G.display_name)
|
||||
var/use_category = initial(G.sort_category)
|
||||
|
||||
if(!use_name)
|
||||
error("Loadout - Missing display name: [G]")
|
||||
continue
|
||||
if(!initial(G.cost))
|
||||
error("Loadout - Missing cost: [G]")
|
||||
continue
|
||||
if(!initial(G.path))
|
||||
error("Loadout - Missing path definition: [G]")
|
||||
continue
|
||||
|
||||
if(!loadout_categories[use_category])
|
||||
loadout_categories[use_category] = new /datum/loadout_category(use_category)
|
||||
var/datum/loadout_category/LC = loadout_categories[use_category]
|
||||
gear_datums[use_name] = new geartype
|
||||
LC.gear[use_name] = gear_datums[use_name]
|
||||
|
||||
loadout_categories = sortAssoc(loadout_categories)
|
||||
for(var/loadout_category in loadout_categories)
|
||||
var/datum/loadout_category/LC = loadout_categories[loadout_category]
|
||||
LC.gear = sortAssoc(LC.gear)
|
||||
return 1
|
||||
|
||||
/datum/category_item/player_setup_item/loadout
|
||||
name = "Loadout"
|
||||
sort_order = 1
|
||||
var/current_tab = "General"
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/load_character(var/savefile/S)
|
||||
S["gear"] >> pref.gear
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/save_character(var/savefile/S)
|
||||
S["gear"] << pref.gear
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost)
|
||||
var/list/valid_gear_choices = list()
|
||||
for(var/gear_name in gear_datums)
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
if(G.whitelisted && !is_alien_whitelisted(preference_mob(), G.whitelisted))
|
||||
continue
|
||||
if(max_cost && G.cost > max_cost)
|
||||
continue
|
||||
valid_gear_choices += gear_name
|
||||
return valid_gear_choices
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/sanitize_character()
|
||||
|
||||
for(var/gear_name in pref.gear)
|
||||
if(!(gear_name in gear_datums))
|
||||
pref.gear -= gear_name
|
||||
|
||||
var/total_cost = 0
|
||||
for(var/gear_name in pref.gear)
|
||||
if(!gear_datums[gear_name])
|
||||
pref.gear -= gear_name
|
||||
else if(!(gear_name in valid_gear_choices()))
|
||||
pref.gear -= gear_name
|
||||
else
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
if(total_cost + G.cost > MAX_GEAR_COST)
|
||||
pref.gear -= gear_name
|
||||
else
|
||||
total_cost += G.cost
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/content()
|
||||
var/total_cost = 0
|
||||
if(pref.gear && pref.gear.len)
|
||||
for(var/i = 1; i <= pref.gear.len; i++)
|
||||
var/datum/gear/G = gear_datums[pref.gear[i]]
|
||||
if(G)
|
||||
total_cost += G.cost
|
||||
|
||||
var/fcolor = "#3366CC"
|
||||
if(total_cost < MAX_GEAR_COST)
|
||||
fcolor = "#E67300"
|
||||
. += "<table align = 'center' width = 500px>"
|
||||
. += "<tr><td colspan=3><center><b><font color = '[fcolor]'>[total_cost]/[MAX_GEAR_COST]</font> loadout points spent.</b> \[<a href='?src=\ref[src];clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
|
||||
|
||||
. += "<tr><td colspan=3><center><b>"
|
||||
var/firstcat = 1
|
||||
for(var/category in loadout_categories)
|
||||
|
||||
if(firstcat)
|
||||
firstcat = 0
|
||||
else
|
||||
. += " |"
|
||||
if(category == current_tab)
|
||||
. += " [category] "
|
||||
else
|
||||
var/datum/loadout_category/LC = loadout_categories[category]
|
||||
var/tcolor = "#3366CC"
|
||||
for(var/thing in LC.gear)
|
||||
if(thing in pref.gear)
|
||||
tcolor = "#E67300"
|
||||
break
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'><font color = '[tcolor]'>[category]</font></a> "
|
||||
. += "</b></center></td></tr>"
|
||||
|
||||
var/datum/loadout_category/LC = loadout_categories[current_tab]
|
||||
. += "<tr><td colspan=3><hr></td></tr>"
|
||||
. += "<tr><td colspan=3><b><center>[LC.category]</center></b></td></tr>"
|
||||
. += "<tr><td colspan=3><hr></td></tr>"
|
||||
for(var/gear_name in LC.gear)
|
||||
var/datum/gear/G = LC.gear[gear_name]
|
||||
var/ticked = (G.display_name in pref.gear)
|
||||
var/obj/item/temp = G.path
|
||||
. += "<tr><td width=25%><a href='?src=\ref[src];toggle_gear=[G.display_name]'><font color='[ticked ? "#E67300" : "#3366CC"]'>[G.display_name]</font></a></td>"
|
||||
. += "<td width = 10%>[G.cost]</td>"
|
||||
. += "<td><font size=2><i>[initial(temp.desc)]</i></font></td></tr>"
|
||||
. += "</table>"
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user)
|
||||
if(href_list["toggle_gear"])
|
||||
var/datum/gear/TG = gear_datums[href_list["toggle_gear"]]
|
||||
if(TG.display_name in pref.gear)
|
||||
pref.gear -= TG.display_name
|
||||
else
|
||||
var/total_cost = 0
|
||||
for(var/gear_name in pref.gear)
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
if(istype(G)) total_cost += G.cost
|
||||
if((total_cost+TG.cost) <= MAX_GEAR_COST)
|
||||
pref.gear += TG.display_name
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["select_category"])
|
||||
current_tab = href_list["select_category"]
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["clear_loadout"])
|
||||
pref.gear.Cut()
|
||||
return TOPIC_REFRESH
|
||||
return ..()
|
||||
|
||||
/datum/gear
|
||||
var/display_name //Name/index. Must be unique.
|
||||
var/path //Path to item.
|
||||
var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
|
||||
var/slot //Slot to equip to.
|
||||
var/list/allowed_roles //Roles that can spawn with this item.
|
||||
var/whitelisted //Term to check the whitelist for..
|
||||
var/sort_category = "General"
|
||||
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
/datum/gear/accessory
|
||||
display_name = "armband, red"
|
||||
path = /obj/item/clothing/accessory/armband
|
||||
slot = slot_tie
|
||||
sort_category = "Accessories"
|
||||
|
||||
/datum/gear/accessory/cargo
|
||||
display_name = "armband, cargo"
|
||||
path = /obj/item/clothing/accessory/armband/cargo
|
||||
|
||||
/datum/gear/accessory/emt
|
||||
display_name = "armband, EMT"
|
||||
path = /obj/item/clothing/accessory/armband/medgreen
|
||||
|
||||
/datum/gear/accessory/engineering
|
||||
display_name = "armband, engineering"
|
||||
path = /obj/item/clothing/accessory/armband/engine
|
||||
|
||||
/datum/gear/accessory/hydroponics
|
||||
display_name = "armband, hydroponics"
|
||||
path = /obj/item/clothing/accessory/armband/hydro
|
||||
|
||||
/datum/gear/accessory/medical
|
||||
display_name = "armband, medical"
|
||||
path = /obj/item/clothing/accessory/armband/med
|
||||
|
||||
/datum/gear/accessory/science
|
||||
display_name = "armband, science"
|
||||
path = /obj/item/clothing/accessory/armband/science
|
||||
|
||||
/datum/gear/accessory/holster
|
||||
display_name = "holster, armpit"
|
||||
path = /obj/item/clothing/accessory/holster/armpit
|
||||
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
|
||||
|
||||
/datum/gear/accessory/holster/hip
|
||||
display_name = "holster, hip"
|
||||
path = /obj/item/clothing/accessory/holster/hip
|
||||
|
||||
/datum/gear/accessory/holster/waist
|
||||
display_name = "holster, waist"
|
||||
path = /obj/item/clothing/accessory/holster/waist
|
||||
|
||||
/datum/gear/accessory/tie
|
||||
display_name = "tie, black"
|
||||
path = /obj/item/clothing/accessory/black
|
||||
|
||||
/datum/gear/accessory/tie/blue
|
||||
display_name = "tie, blue"
|
||||
path = /obj/item/clothing/accessory/blue
|
||||
|
||||
/datum/gear/accessory/tie/red
|
||||
display_name = "tie, red"
|
||||
path = /obj/item/clothing/accessory/red
|
||||
|
||||
/datum/gear/accessory/tie/horrible
|
||||
display_name = "tie, socially disgraceful"
|
||||
path = /obj/item/clothing/accessory/horrible
|
||||
|
||||
/datum/gear/accessory/scarf
|
||||
display_name = "scarf"
|
||||
path = /obj/item/clothing/accessory/scarf
|
||||
|
||||
/datum/gear/accessory/scarf/red
|
||||
display_name = "scarf, red"
|
||||
path = /obj/item/clothing/accessory/scarf/red
|
||||
|
||||
/datum/gear/accessory/scarf/green
|
||||
display_name = "scarf, green"
|
||||
path = /obj/item/clothing/accessory/scarf/green
|
||||
|
||||
/datum/gear/accessory/scarf/darkblue
|
||||
display_name = "scarf, dark blue"
|
||||
path = /obj/item/clothing/accessory/scarf/darkblue
|
||||
|
||||
/datum/gear/accessory/scarf/purple
|
||||
display_name = "scarf, purple"
|
||||
path = /obj/item/clothing/accessory/scarf/purple
|
||||
|
||||
/datum/gear/accessory/scarf/yellow
|
||||
display_name = "scarf, yellow"
|
||||
path = /obj/item/clothing/accessory/scarf/yellow
|
||||
|
||||
/datum/gear/accessory/scarf/orange
|
||||
display_name = "scarf, orange"
|
||||
path = /obj/item/clothing/accessory/scarf/orange
|
||||
|
||||
/datum/gear/accessory/scarf/lightblue
|
||||
display_name = "scarf, light blue"
|
||||
path = /obj/item/clothing/accessory/scarf/lightblue
|
||||
|
||||
/datum/gear/accessory/scarf/white
|
||||
display_name = "scarf, white"
|
||||
path = /obj/item/clothing/accessory/scarf/white
|
||||
|
||||
/datum/gear/accessory/scarf/black
|
||||
display_name = "scarf, black"
|
||||
path = /obj/item/clothing/accessory/scarf/black
|
||||
|
||||
/datum/gear/accessory/scarf/zebra
|
||||
display_name = "scarf, zebra"
|
||||
path = /obj/item/clothing/accessory/scarf/zebra
|
||||
|
||||
/datum/gear/accessory/scarf/christmas
|
||||
display_name = "scarf, christmas"
|
||||
path = /obj/item/clothing/accessory/scarf/christmas
|
||||
|
||||
/datum/gear/accessory/scarf/stripedred
|
||||
display_name = "scarf, striped red"
|
||||
path = /obj/item/clothing/accessory/stripedredscarf
|
||||
|
||||
/datum/gear/accessory/scarf/stripedgreen
|
||||
display_name = "scarf, striped green"
|
||||
path = /obj/item/clothing/accessory/stripedgreenscarf
|
||||
|
||||
/datum/gear/accessory/scarf/stripedblue
|
||||
display_name = "scarf, striped blue"
|
||||
path = /obj/item/clothing/accessory/stripedbluescarf
|
||||
|
||||
/datum/gear/accessory/brown_vest
|
||||
display_name = "webbing, engineering"
|
||||
path = /obj/item/clothing/accessory/storage/brown_vest
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
|
||||
/datum/gear/accessory/black_vest
|
||||
display_name = "webbing, security"
|
||||
path = /obj/item/clothing/accessory/storage/black_vest
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/accessory/webbing
|
||||
display_name = "webbing, simple"
|
||||
path = /obj/item/clothing/accessory/storage/webbing
|
||||
cost = 2
|
||||
@@ -0,0 +1,16 @@
|
||||
/datum/gear/lipstick
|
||||
display_name = "lipstick, black"
|
||||
path = /obj/item/weapon/lipstick/black
|
||||
sort_category = "Cosmetics"
|
||||
|
||||
/datum/gear/lipstick/jade
|
||||
display_name = "lipstick, jade"
|
||||
path = /obj/item/weapon/lipstick/jade
|
||||
|
||||
/datum/gear/lipstick/purple
|
||||
display_name = "lipstick, purple"
|
||||
path = /obj/item/weapon/lipstick/purple
|
||||
|
||||
/datum/gear/lipstick/red
|
||||
display_name = "lipstick, red"
|
||||
path = /obj/item/weapon/lipstick
|
||||
10
code/modules/client/preference_setup/loadout/loadout_ears.dm
Normal file
10
code/modules/client/preference_setup/loadout/loadout_ears.dm
Normal file
@@ -0,0 +1,10 @@
|
||||
// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use
|
||||
// the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset.
|
||||
/datum/gear/ears
|
||||
display_name = "earmuffs"
|
||||
path = /obj/item/clothing/ears/earmuffs
|
||||
sort_category = "Earwear"
|
||||
|
||||
/datum/gear/ears/headphones
|
||||
display_name = "headphones"
|
||||
path = /obj/item/clothing/ears/earmuffs/headphones
|
||||
62
code/modules/client/preference_setup/loadout/loadout_eyes.dm
Normal file
62
code/modules/client/preference_setup/loadout/loadout_eyes.dm
Normal file
@@ -0,0 +1,62 @@
|
||||
// Eyes
|
||||
/datum/gear/eyes
|
||||
display_name = "eyepatch"
|
||||
path = /obj/item/clothing/glasses/eyepatch
|
||||
slot = slot_glasses
|
||||
sort_category = "Glasses and Eyewear"
|
||||
|
||||
/datum/gear/eyes/glasses
|
||||
display_name = "Glasses, prescription"
|
||||
path = /obj/item/clothing/glasses/regular
|
||||
|
||||
/datum/gear/eyes/glasses/green
|
||||
display_name = "Glasses, green"
|
||||
path = /obj/item/clothing/glasses/gglasses
|
||||
|
||||
/datum/gear/eyes/glasses/prescriptionhipster
|
||||
display_name = "Glasses, hipster"
|
||||
path = /obj/item/clothing/glasses/regular/hipster
|
||||
|
||||
/datum/gear/eyes/glasses/monocle
|
||||
display_name = "Monocle"
|
||||
path = /obj/item/clothing/glasses/monocle
|
||||
|
||||
/datum/gear/eyes/scanning_goggles
|
||||
display_name = "scanning goggles"
|
||||
path = /obj/item/clothing/glasses/regular/scanners
|
||||
|
||||
/datum/gear/eyes/sciencegoggles
|
||||
display_name = "Science Goggles"
|
||||
path = /obj/item/clothing/glasses/science
|
||||
|
||||
/datum/gear/eyes/security
|
||||
display_name = "Security HUD (Security)"
|
||||
path = /obj/item/clothing/glasses/hud/security
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/eyes/security/prescriptionsec
|
||||
display_name = "Security HUD, prescription (Security)"
|
||||
path = /obj/item/clothing/glasses/hud/security/prescription
|
||||
|
||||
/datum/gear/eyes/medical
|
||||
display_name = "Medical HUD (Medical)"
|
||||
path = /obj/item/clothing/glasses/hud/health
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
|
||||
|
||||
/datum/gear/eyes/medical/prescriptionmed
|
||||
display_name = "Medical HUD, prescription (Medical)"
|
||||
path = /obj/item/clothing/glasses/hud/health/prescription
|
||||
|
||||
/datum/gear/eyes/shades
|
||||
display_name = "Sunglasses, fat (Security/Command)"
|
||||
path = /obj/item/clothing/glasses/sunglasses/big
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden","Captain","Head of Personnel","Quartermaster","Internal Affairs Agent","Detective")
|
||||
|
||||
/datum/gear/eyes/glasses/fakesun
|
||||
display_name = "Sunglasses, stylish"
|
||||
path = /obj/item/clothing/glasses/fakesunglasses
|
||||
|
||||
/datum/gear/eyes/shades/prescriptionsun
|
||||
display_name = "sunglasses, presciption (Security/Command)"
|
||||
path = /obj/item/clothing/glasses/sunglasses/prescription
|
||||
cost = 2
|
||||
@@ -0,0 +1,39 @@
|
||||
/datum/gear/cane
|
||||
display_name = "cane"
|
||||
path = /obj/item/weapon/cane
|
||||
|
||||
/datum/gear/dice
|
||||
display_name = "d20"
|
||||
path = /obj/item/weapon/dice/d20
|
||||
|
||||
/datum/gear/cards
|
||||
display_name = "deck of cards"
|
||||
path = /obj/item/weapon/deck/cards
|
||||
|
||||
/datum/gear/tarot
|
||||
display_name = "deck of tarot cards"
|
||||
path = /obj/item/weapon/deck/tarot
|
||||
|
||||
/datum/gear/holder
|
||||
display_name = "card holder"
|
||||
path = /obj/item/weapon/deck/holder
|
||||
|
||||
/datum/gear/cardemon_pack
|
||||
display_name = "Cardemon booster pack"
|
||||
path = /obj/item/weapon/pack/cardemon
|
||||
|
||||
/datum/gear/spaceball_pack
|
||||
display_name = "Spaceball booster pack"
|
||||
path = /obj/item/weapon/pack/spaceball
|
||||
|
||||
/datum/gear/flask
|
||||
display_name = "flask"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
|
||||
|
||||
/datum/gear/vacflask
|
||||
display_name = "vacuum-flask"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask
|
||||
|
||||
/datum/gear/comb
|
||||
display_name = "purple comb"
|
||||
path = /obj/item/weapon/haircomb
|
||||
@@ -0,0 +1,51 @@
|
||||
// Gloves
|
||||
/datum/gear/gloves
|
||||
display_name = "gloves, black"
|
||||
path = /obj/item/clothing/gloves/black
|
||||
cost = 2
|
||||
slot = slot_gloves
|
||||
sort_category = "Gloves and Handwear"
|
||||
|
||||
/datum/gear/gloves/blue
|
||||
display_name = "gloves, blue"
|
||||
path = /obj/item/clothing/gloves/blue
|
||||
|
||||
/datum/gear/gloves/brown
|
||||
display_name = "gloves, brown"
|
||||
path = /obj/item/clothing/gloves/brown
|
||||
|
||||
/datum/gear/gloves/light_brown
|
||||
display_name = "gloves, light-brown"
|
||||
path = /obj/item/clothing/gloves/light_brown
|
||||
|
||||
/datum/gear/gloves/green
|
||||
display_name = "gloves, green"
|
||||
path = /obj/item/clothing/gloves/green
|
||||
|
||||
/datum/gear/gloves/grey
|
||||
display_name = "gloves, grey"
|
||||
path = /obj/item/clothing/gloves/grey
|
||||
|
||||
/datum/gear/gloves/latex
|
||||
display_name = "gloves, latex"
|
||||
path = /obj/item/clothing/gloves/latex
|
||||
|
||||
/datum/gear/gloves/orange
|
||||
display_name = "gloves, orange"
|
||||
path = /obj/item/clothing/gloves/orange
|
||||
|
||||
/datum/gear/gloves/purple
|
||||
display_name = "gloves, purple"
|
||||
path = /obj/item/clothing/gloves/purple
|
||||
|
||||
/datum/gear/gloves/rainbow
|
||||
display_name = "gloves, rainbow"
|
||||
path = /obj/item/clothing/gloves/rainbow
|
||||
|
||||
/datum/gear/gloves/red
|
||||
display_name = "gloves, red"
|
||||
path = /obj/item/clothing/gloves/red
|
||||
|
||||
/datum/gear/gloves/white
|
||||
display_name = "gloves, white"
|
||||
path = /obj/item/clothing/gloves/white
|
||||
271
code/modules/client/preference_setup/loadout/loadout_head.dm
Normal file
271
code/modules/client/preference_setup/loadout/loadout_head.dm
Normal file
@@ -0,0 +1,271 @@
|
||||
/datum/gear/head
|
||||
display_name = "bandana, pirate-red"
|
||||
path = /obj/item/clothing/head/bandana
|
||||
slot = slot_head
|
||||
sort_category = "Hats and Headwear"
|
||||
|
||||
/datum/gear/head/bandana_green
|
||||
display_name = "bandana, green"
|
||||
path = /obj/item/clothing/head/greenbandana
|
||||
|
||||
/datum/gear/head/bandana_orange
|
||||
display_name = "bandana, orange"
|
||||
path = /obj/item/clothing/head/orangebandana
|
||||
|
||||
/datum/gear/head/beret
|
||||
display_name = "beret, red"
|
||||
path = /obj/item/clothing/head/beret
|
||||
|
||||
/datum/gear/head/beret/bsec
|
||||
display_name = "beret, navy (officer)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/officer
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/head/beret/bsec_warden
|
||||
display_name = "beret, navy (warden)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/warden
|
||||
allowed_roles = list("Head of Security","Warden")
|
||||
|
||||
/datum/gear/head/beret/bsec_hos
|
||||
display_name = "beret, navy (hos)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/hos
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/head/beret/eng
|
||||
display_name = "beret, engie-orange"
|
||||
path = /obj/item/clothing/head/beret/engineering
|
||||
|
||||
/datum/gear/head/beret/purp
|
||||
display_name = "beret, purple"
|
||||
path = /obj/item/clothing/head/beret/purple
|
||||
|
||||
/datum/gear/head/beret/sec
|
||||
display_name = "beret, red (security)"
|
||||
path = /obj/item/clothing/head/beret/sec
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/head/cap
|
||||
display_name = "cap, black"
|
||||
path = /obj/item/clothing/head/soft/black
|
||||
|
||||
/datum/gear/head/cap/blue
|
||||
display_name = "cap, blue"
|
||||
path = /obj/item/clothing/head/soft/blue
|
||||
|
||||
/datum/gear/head/cap/mailman
|
||||
display_name = "cap, blue station"
|
||||
path = /obj/item/clothing/head/mailman
|
||||
|
||||
/datum/gear/head/cap/flat
|
||||
display_name = "cap, brown-flat"
|
||||
path = /obj/item/clothing/head/flatcap
|
||||
|
||||
/datum/gear/head/cap/corp
|
||||
display_name = "cap, corporate (Security)"
|
||||
path = /obj/item/clothing/head/soft/sec/corp
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden", "Detective")
|
||||
|
||||
/datum/gear/head/cap/green
|
||||
display_name = "cap, green"
|
||||
path = /obj/item/clothing/head/soft/green
|
||||
|
||||
/datum/gear/head/cap/grey
|
||||
display_name = "cap, grey"
|
||||
path = /obj/item/clothing/head/soft/grey
|
||||
|
||||
/datum/gear/head/cap/orange
|
||||
display_name = "cap, orange"
|
||||
path = /obj/item/clothing/head/soft/orange
|
||||
|
||||
/datum/gear/head/cap/purple
|
||||
display_name = "cap, purple"
|
||||
path = /obj/item/clothing/head/soft/purple
|
||||
|
||||
/datum/gear/head/cap/rainbow
|
||||
display_name = "cap, rainbow"
|
||||
path = /obj/item/clothing/head/soft/rainbow
|
||||
|
||||
/datum/gear/head/cap/red
|
||||
display_name = "cap, red"
|
||||
path = /obj/item/clothing/head/soft/red
|
||||
|
||||
/datum/gear/head/cap/sec
|
||||
display_name = "cap, security (Security)"
|
||||
path = /obj/item/clothing/head/soft/sec
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden", "Detective")
|
||||
|
||||
/datum/gear/head/cap/yellow
|
||||
display_name = "cap, yellow"
|
||||
path = /obj/item/clothing/head/soft/yellow
|
||||
|
||||
/datum/gear/head/cap/white
|
||||
display_name = "cap, white"
|
||||
path = /obj/item/clothing/head/soft/mime
|
||||
|
||||
/datum/gear/head/cowboy
|
||||
display_name = "cowboy, rodeo"
|
||||
path = /obj/item/clothing/head/cowboy_hat
|
||||
cost = 3
|
||||
|
||||
/datum/gear/head/hairflower
|
||||
display_name = "hair flower pin, red"
|
||||
path = /obj/item/clothing/head/hairflower
|
||||
|
||||
/datum/gear/head/hairflower/yellow
|
||||
display_name = "hair flower pin, yellow"
|
||||
path = /obj/item/clothing/head/hairflower/yellow
|
||||
|
||||
/datum/gear/head/hairflower/pink
|
||||
display_name = "hair flower pin, pink"
|
||||
path = /obj/item/clothing/head/hairflower/pink
|
||||
|
||||
/datum/gear/head/hairflower/blue
|
||||
display_name = "hair flower pin, blue"
|
||||
path = /obj/item/clothing/head/hairflower/blue
|
||||
|
||||
/datum/gear/head/hairflower/violet
|
||||
display_name = "hair flower pin, violet"
|
||||
path = /obj/item/clothing/head/hairflower/violet
|
||||
|
||||
/datum/gear/head/hairflower/orange
|
||||
display_name = "hair flower pin, orange"
|
||||
path = /obj/item/clothing/head/hairflower/orange
|
||||
|
||||
/datum/gear/head/hardhat
|
||||
display_name = "hardhat, yellow"
|
||||
path = /obj/item/clothing/head/hardhat
|
||||
cost = 2
|
||||
|
||||
/datum/gear/head/hardhat/blue
|
||||
display_name = "hardhat, blue"
|
||||
path = /obj/item/clothing/head/hardhat/dblue
|
||||
|
||||
/datum/gear/head/hardhat/orange
|
||||
display_name = "hardhat, orange"
|
||||
path = /obj/item/clothing/head/hardhat/orange
|
||||
|
||||
/datum/gear/head/hardhat/red
|
||||
display_name = "hardhat, red"
|
||||
path = /obj/item/clothing/head/hardhat/red
|
||||
|
||||
/datum/gear/head/boater
|
||||
display_name = "hat, boatsman"
|
||||
path = /obj/item/clothing/head/boaterhat
|
||||
|
||||
/datum/gear/head/bowler
|
||||
display_name = "hat, bowler"
|
||||
path = /obj/item/clothing/head/bowler
|
||||
|
||||
/datum/gear/head/fez
|
||||
display_name = "hat, fez"
|
||||
path = /obj/item/clothing/head/fez
|
||||
|
||||
/datum/gear/head/tophat
|
||||
display_name = "hat, tophat"
|
||||
path = /obj/item/clothing/head/that
|
||||
|
||||
/datum/gear/head/philosopher_wig
|
||||
display_name = "natural philosopher's wig"
|
||||
path = /obj/item/clothing/head/philosopher_wig
|
||||
|
||||
/datum/gear/head/ushanka
|
||||
display_name = "ushanka"
|
||||
path = /obj/item/clothing/head/ushanka
|
||||
|
||||
/datum/gear/head/santahat
|
||||
display_name = "santa hat, red (holiday)"
|
||||
path = /obj/item/clothing/head/santa
|
||||
cost = 11
|
||||
|
||||
/datum/gear/head/santahat/green
|
||||
display_name = "santa hat, green (holiday)"
|
||||
path = /obj/item/clothing/head/santa/green
|
||||
|
||||
/datum/gear/head/zhan_scarf
|
||||
display_name = "Zhan headscarf"
|
||||
path = /obj/item/clothing/head/tajaran/scarf
|
||||
whitelisted = "Tajara"
|
||||
|
||||
/datum/gear/head/hijab
|
||||
display_name = "Black hijab"
|
||||
path = /obj/item/clothing/head/hijab
|
||||
|
||||
/datum/gear/head/hijab/white
|
||||
display_name = "White hijab"
|
||||
path = /obj/item/clothing/head/hijab/white
|
||||
|
||||
/datum/gear/head/hijab/aqua
|
||||
display_name = "Aqua hijab"
|
||||
path = /obj/item/clothing/head/hijab/aqua
|
||||
|
||||
/datum/gear/head/hijab/blue
|
||||
display_name = "Blue hijab"
|
||||
path = /obj/item/clothing/head/hijab/blue
|
||||
|
||||
/datum/gear/head/hijab/brown
|
||||
display_name = "Brown hijab"
|
||||
path = /obj/item/clothing/head/hijab/brown
|
||||
|
||||
/datum/gear/head/hijab/darkblue
|
||||
display_name = "Dark blue hijab"
|
||||
path = /obj/item/clothing/head/hijab/darkblue
|
||||
|
||||
/datum/gear/head/hijab/darkred
|
||||
display_name = "Dark red hijab"
|
||||
path = /obj/item/clothing/head/hijab/darkred
|
||||
|
||||
/datum/gear/head/hijab/green
|
||||
display_name = "Green hijab"
|
||||
path = /obj/item/clothing/head/hijab/green
|
||||
|
||||
/datum/gear/head/hijab/green
|
||||
display_name = "Green hijab"
|
||||
path = /obj/item/clothing/head/hijab/grey
|
||||
|
||||
/datum/gear/head/hijab/lightblue
|
||||
display_name = "Light blue hijab"
|
||||
path = /obj/item/clothing/head/hijab/lightblue
|
||||
|
||||
/datum/gear/head/hijab/lightbrown
|
||||
display_name = "Light brown hijab"
|
||||
path = /obj/item/clothing/head/hijab/lightbrown
|
||||
|
||||
/datum/gear/head/hijab/lightgreen
|
||||
display_name = "Light green hijab"
|
||||
path = /obj/item/clothing/head/hijab/lightgreen
|
||||
|
||||
/datum/gear/head/hijab/lightpurple
|
||||
display_name = "Light purple hijab"
|
||||
path = /obj/item/clothing/head/hijab/lightpurple
|
||||
|
||||
/datum/gear/head/hijab/lightred
|
||||
display_name = "Light red hijab"
|
||||
path = /obj/item/clothing/head/hijab/lightred
|
||||
|
||||
/datum/gear/head/hijab/maroon
|
||||
display_name = "Maroon hijab"
|
||||
path = /obj/item/clothing/head/hijab/maroon
|
||||
|
||||
/datum/gear/head/hijab/orange
|
||||
display_name = "Orange hijab"
|
||||
path = /obj/item/clothing/head/hijab/orange
|
||||
|
||||
/datum/gear/head/hijab/pink
|
||||
display_name = "Pink hijab"
|
||||
path = /obj/item/clothing/head/hijab/pink
|
||||
|
||||
/datum/gear/head/hijab/purple
|
||||
display_name = "Purple hijab"
|
||||
path = /obj/item/clothing/head/hijab/purple
|
||||
|
||||
/datum/gear/head/hijab/red
|
||||
display_name = "Red hijab"
|
||||
path = /obj/item/clothing/head/hijab/red
|
||||
|
||||
/datum/gear/head/hijab/yellowgreen
|
||||
display_name = "Yellow green hijab"
|
||||
path = /obj/item/clothing/head/hijab/yellowgreen
|
||||
|
||||
/datum/gear/head/hijab/yellow
|
||||
display_name = "Yellow hijab"
|
||||
path = /obj/item/clothing/head/hijab/yellow
|
||||
23
code/modules/client/preference_setup/loadout/loadout_mask.dm
Normal file
23
code/modules/client/preference_setup/loadout/loadout_mask.dm
Normal file
@@ -0,0 +1,23 @@
|
||||
// Mask
|
||||
/datum/gear/mask
|
||||
display_name = "bandana, blue"
|
||||
path = /obj/item/clothing/mask/bandana/blue
|
||||
slot = slot_wear_mask
|
||||
sort_category = "Masks and Facewear"
|
||||
|
||||
/datum/gear/mask/gold
|
||||
display_name = "bandana, gold"
|
||||
path = /obj/item/clothing/mask/bandana/gold
|
||||
|
||||
/datum/gear/mask/green
|
||||
display_name = "bandana, green 2"
|
||||
path = /obj/item/clothing/mask/bandana/green
|
||||
|
||||
/datum/gear/mask/red
|
||||
display_name = "bandana, red"
|
||||
path = /obj/item/clothing/mask/bandana/red
|
||||
|
||||
/datum/gear/mask/sterile
|
||||
display_name = "sterile mask"
|
||||
path = /obj/item/clothing/mask/surgical
|
||||
cost = 2
|
||||
@@ -0,0 +1,98 @@
|
||||
// Shoelocker
|
||||
/datum/gear/shoes
|
||||
display_name = "jackboots"
|
||||
path = /obj/item/clothing/shoes/jackboots
|
||||
slot = slot_shoes
|
||||
sort_category = "Shoes and Footwear"
|
||||
|
||||
/datum/gear/shoes/toeless
|
||||
display_name = "toe-less jackboots"
|
||||
path = /obj/item/clothing/shoes/jackboots/unathi
|
||||
|
||||
/datum/gear/shoes/workboots
|
||||
display_name = "workboots"
|
||||
path = /obj/item/clothing/shoes/workboots
|
||||
|
||||
/datum/gear/shoes/sandals
|
||||
display_name = "sandals"
|
||||
path = /obj/item/clothing/shoes/sandal
|
||||
|
||||
/datum/gear/shoes/black
|
||||
display_name = "shoes, black"
|
||||
path = /obj/item/clothing/shoes/black
|
||||
|
||||
/datum/gear/shoes/blue
|
||||
display_name = "shoes, blue"
|
||||
path = /obj/item/clothing/shoes/blue
|
||||
|
||||
/datum/gear/shoes/brown
|
||||
display_name = "shoes, brown"
|
||||
path = /obj/item/clothing/shoes/brown
|
||||
|
||||
/datum/gear/shoes/lacey
|
||||
display_name = "shoes, classy"
|
||||
path = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/datum/gear/shoes/dress
|
||||
display_name = "shoes, dress"
|
||||
path = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/datum/gear/shoes/green
|
||||
display_name = "shoes, green"
|
||||
path = /obj/item/clothing/shoes/green
|
||||
|
||||
/datum/gear/shoes/leather
|
||||
display_name = "shoes, leather"
|
||||
path = /obj/item/clothing/shoes/leather
|
||||
|
||||
/datum/gear/shoes/orange
|
||||
display_name = "shoes, orange"
|
||||
path = /obj/item/clothing/shoes/orange
|
||||
|
||||
/datum/gear/shoes/purple
|
||||
display_name = "shoes, purple"
|
||||
path = /obj/item/clothing/shoes/purple
|
||||
|
||||
/datum/gear/shoes/rainbow
|
||||
display_name = "shoes, rainbow"
|
||||
path = /obj/item/clothing/shoes/rainbow
|
||||
|
||||
/datum/gear/shoes/red
|
||||
display_name = "shoes, red"
|
||||
path = /obj/item/clothing/shoes/red
|
||||
|
||||
/datum/gear/shoes/white
|
||||
display_name = "shoes, white"
|
||||
path = /obj/item/clothing/shoes/white
|
||||
|
||||
/datum/gear/shoes/yellow
|
||||
display_name = "shoes, yellow"
|
||||
path = /obj/item/clothing/shoes/yellow
|
||||
|
||||
/datum/gear/shoes/flats
|
||||
display_name = "flats, black"
|
||||
path = /obj/item/clothing/shoes/flats
|
||||
|
||||
/datum/gear/shoes/flats/blue
|
||||
display_name = "flats, blue"
|
||||
path = /obj/item/clothing/shoes/flats/blue
|
||||
|
||||
/datum/gear/shoes/flats/brown
|
||||
display_name = "flats, brown"
|
||||
path = /obj/item/clothing/shoes/flats/brown
|
||||
|
||||
/datum/gear/shoes/flats/orange
|
||||
display_name = "flats, orange"
|
||||
path = /obj/item/clothing/shoes/flats/orange
|
||||
|
||||
/datum/gear/shoes/flats/purple
|
||||
display_name = "flats, purple"
|
||||
path = /obj/item/clothing/shoes/flats/purple
|
||||
|
||||
/datum/gear/shoes/flats/red
|
||||
display_name = "flats, red"
|
||||
path = /obj/item/clothing/shoes/flats/red
|
||||
|
||||
/datum/gear/shoes/flats/white
|
||||
display_name = "flats, white"
|
||||
path = /obj/item/clothing/shoes/flats/white
|
||||
@@ -0,0 +1,19 @@
|
||||
/datum/gear/smokingpipe
|
||||
display_name = "pipe, smoking"
|
||||
path = /obj/item/clothing/mask/smokable/pipe
|
||||
|
||||
/datum/gear/cornpipe
|
||||
display_name = "pipe, corn"
|
||||
path = /obj/item/clothing/mask/smokable/pipe/cobpipe
|
||||
|
||||
/datum/gear/matchbook
|
||||
display_name = "matchbook"
|
||||
path = /obj/item/weapon/storage/box/matches
|
||||
|
||||
/datum/gear/zippo
|
||||
display_name = "zippo"
|
||||
path = /obj/item/weapon/flame/lighter/zippo
|
||||
|
||||
/datum/gear/ashtray
|
||||
display_name = "ashtray, plastic"
|
||||
path = /obj/item/weapon/material/ashtray/plastic
|
||||
208
code/modules/client/preference_setup/loadout/loadout_suit.dm
Normal file
208
code/modules/client/preference_setup/loadout/loadout_suit.dm
Normal file
@@ -0,0 +1,208 @@
|
||||
// Suit slot
|
||||
/datum/gear/suit
|
||||
display_name = "apron, blue"
|
||||
path = /obj/item/clothing/suit/apron
|
||||
slot = slot_wear_suit
|
||||
sort_category = "Suits and Overwear"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/suit/leather_coat
|
||||
display_name = "leather coat"
|
||||
path = /obj/item/clothing/suit/leathercoat
|
||||
|
||||
/datum/gear/suit/puffer_coat
|
||||
display_name = "puffer coat"
|
||||
path = /obj/item/clothing/suit/jacket/puffer
|
||||
|
||||
/datum/gear/suit/puffer_vest
|
||||
display_name = "puffer vest"
|
||||
path = /obj/item/clothing/suit/jacket/puffer/vest
|
||||
|
||||
/datum/gear/suit/bomber
|
||||
display_name = "bomber jacket"
|
||||
path = /obj/item/clothing/suit/storage/toggle/bomber
|
||||
|
||||
/datum/gear/suit/bomber_alt
|
||||
display_name = "bomber jacket 2"
|
||||
path = /obj/item/clothing/suit/storage/bomber/alt
|
||||
|
||||
/datum/gear/suit/leather_jacket
|
||||
display_name = "leather jacket, black"
|
||||
path = /obj/item/clothing/suit/storage/leather_jacket
|
||||
|
||||
/datum/gear/suit/leather_jacket_alt
|
||||
display_name = "leather jacket 2, black"
|
||||
path = /obj/item/clothing/suit/storage/leather_jacket/alt
|
||||
|
||||
/datum/gear/suit/leather_jacket_nt
|
||||
display_name = "leather jacket, corporate, black"
|
||||
path = /obj/item/clothing/suit/storage/leather_jacket/nanotrasen
|
||||
|
||||
/datum/gear/suit/brown_jacket
|
||||
display_name = "leather jacket, brown"
|
||||
path = /obj/item/clothing/suit/storage/toggle/brown_jacket
|
||||
|
||||
/datum/gear/suit/brown_jacket_nt
|
||||
display_name = "leather jacket, corporate, brown"
|
||||
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
|
||||
|
||||
/datum/gear/suit/mil
|
||||
display_name = "military jacket"
|
||||
path = /obj/item/clothing/suit/storage/miljacket
|
||||
|
||||
/datum/gear/suit/mil/alt
|
||||
display_name = "military jacket, alt"
|
||||
path = /obj/item/clothing/suit/storage/miljacket/alt
|
||||
|
||||
/datum/gear/suit/hazard_vest
|
||||
display_name = "hazard vest"
|
||||
path = /obj/item/clothing/suit/storage/hazardvest
|
||||
|
||||
/datum/gear/suit/hoodie
|
||||
display_name = "hoodie, grey"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie
|
||||
|
||||
/datum/gear/suit/hoodie/red
|
||||
display_name = "hoodie, red"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/red
|
||||
|
||||
/datum/gear/suit/hoodie/blue
|
||||
display_name = "hoodie, blue"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/blue
|
||||
|
||||
/datum/gear/suit/hoodie/yellow
|
||||
display_name = "hoodie, yellow"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/yellow
|
||||
|
||||
/datum/gear/suit/hoodie/green
|
||||
display_name = "hoodie, green"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/green
|
||||
|
||||
/datum/gear/suit/hoodie/orange
|
||||
display_name = "hoodie, orange"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/orange
|
||||
|
||||
/datum/gear/suit/hoodie/black
|
||||
display_name = "hoodie, black"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/black
|
||||
|
||||
/datum/gear/suit/hoodie/cti
|
||||
display_name = "hoodie, CTI"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/cti
|
||||
|
||||
/datum/gear/suit/hoodie/mu
|
||||
display_name = "hoodie, MU"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/mu
|
||||
|
||||
/datum/gear/suit/hoodie/nt
|
||||
display_name = "hoodie, NT"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/nt
|
||||
|
||||
/datum/gear/suit/labcoat
|
||||
display_name = "labcoat"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
|
||||
/datum/gear/suit/labcoat/blue
|
||||
display_name = "labcoat, blue"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/blue
|
||||
|
||||
/datum/gear/suit/labcoat/green
|
||||
display_name = "labcoat, green"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/green
|
||||
|
||||
/datum/gear/suit/labcoat/orange
|
||||
display_name = "labcoat, orange"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/orange
|
||||
|
||||
/datum/gear/suit/labcoat/purple
|
||||
display_name = "labcoat, purple"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/purple
|
||||
|
||||
/datum/gear/suit/labcoat/pink
|
||||
display_name = "labcoat, pink"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/pink
|
||||
|
||||
/datum/gear/suit/labcoat/red
|
||||
display_name = "labcoat, red"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/red
|
||||
|
||||
/datum/gear/suit/labcoat/yellow
|
||||
display_name = "labcoat, yellow"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/yellow
|
||||
|
||||
/datum/gear/suit/labcoat/emt
|
||||
display_name = "labcoat, EMT (Medical)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
|
||||
|
||||
/datum/gear/suit/overalls
|
||||
display_name = "overalls"
|
||||
path = /obj/item/clothing/suit/apron/overalls
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
display_name = "poncho, tan"
|
||||
path = /obj/item/clothing/suit/poncho
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/poncho/blue
|
||||
display_name = "poncho, blue"
|
||||
path = /obj/item/clothing/suit/poncho/blue
|
||||
|
||||
/datum/gear/suit/poncho/green
|
||||
display_name = "poncho, green"
|
||||
path = /obj/item/clothing/suit/poncho/green
|
||||
|
||||
/datum/gear/suit/poncho/purple
|
||||
display_name = "poncho, purple"
|
||||
path = /obj/item/clothing/suit/poncho/purple
|
||||
|
||||
/datum/gear/suit/poncho/red
|
||||
display_name = "poncho, red"
|
||||
path = /obj/item/clothing/suit/poncho/red
|
||||
|
||||
/datum/gear/suit/unathi_robe
|
||||
display_name = "roughspun robe"
|
||||
path = /obj/item/clothing/suit/unathi/robe
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/black_lawyer_jacket
|
||||
display_name = "suit jacket, black"
|
||||
path = /obj/item/clothing/suit/storage/toggle/internalaffairs
|
||||
|
||||
/datum/gear/suit/blue_lawyer_jacket
|
||||
display_name = "suit jacket, blue"
|
||||
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
|
||||
|
||||
/datum/gear/suit/purple_lawyer_jacket
|
||||
display_name = "suit jacket, purple"
|
||||
path = /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket
|
||||
|
||||
/datum/gear/suit/suspenders
|
||||
display_name = "suspenders"
|
||||
path = /obj/item/clothing/suit/suspenders
|
||||
|
||||
/datum/gear/suit/wcoat
|
||||
display_name = "waistcoat"
|
||||
path = /obj/item/clothing/suit/wcoat
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/forensics
|
||||
display_name = "forensics long, red"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red/long
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/suit/forensics/blue
|
||||
display_name = "forensics long, blue"
|
||||
path = /obj/item/clothing/suit/storage/forensics/blue/long
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/suit/forensics/blue/short
|
||||
display_name = "forensics, blue"
|
||||
path = /obj/item/clothing/suit/storage/forensics/blue
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/suit/forensics/red/short
|
||||
display_name = "forensics, red"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red
|
||||
allowed_roles = list("Detective")
|
||||
441
code/modules/client/preference_setup/loadout/loadout_uniform.dm
Normal file
441
code/modules/client/preference_setup/loadout/loadout_uniform.dm
Normal file
@@ -0,0 +1,441 @@
|
||||
// Uniform slot
|
||||
/datum/gear/uniform
|
||||
display_name = "blazer, blue"
|
||||
path = /obj/item/clothing/under/blazer
|
||||
slot = slot_w_uniform
|
||||
sort_category = "Uniforms and Casual Dress"
|
||||
|
||||
/datum/gear/uniform/cheongsam
|
||||
display_name = "cheongsam, white"
|
||||
path = /obj/item/clothing/under/cheongsam
|
||||
|
||||
/datum/gear/uniform/kilt
|
||||
display_name = "kilt"
|
||||
path = /obj/item/clothing/under/kilt
|
||||
|
||||
/datum/gear/uniform/croptop
|
||||
display_name = "croptop, NT"
|
||||
path = /obj/item/clothing/under/croptop
|
||||
|
||||
/datum/gear/uniform/croptop/grey
|
||||
display_name = "croptop, grey"
|
||||
path = /obj/item/clothing/under/croptop/grey
|
||||
|
||||
/datum/gear/uniform/croptop/red
|
||||
display_name = "croptop, red"
|
||||
path = /obj/item/clothing/under/croptop/red
|
||||
|
||||
/datum/gear/uniform/cuttop
|
||||
display_name = "cut top, grey"
|
||||
path = /obj/item/clothing/under/cuttop
|
||||
|
||||
/datum/gear/uniform/cuttop/red
|
||||
display_name = "cut top, red"
|
||||
path = /obj/item/clothing/under/cuttop/red
|
||||
|
||||
/datum/gear/uniform/jumpskirt
|
||||
display_name = "jumpskirt, black"
|
||||
path = /obj/item/clothing/under/blackjumpskirt
|
||||
|
||||
/datum/gear/uniform/jumpsuit
|
||||
display_name = "jumpsuit, rainbow"
|
||||
path = /obj/item/clothing/under/rainbow
|
||||
|
||||
/datum/gear/uniform/jumpsuit/black
|
||||
display_name = "jumpsuit, black"
|
||||
path = /obj/item/clothing/under/color/black
|
||||
|
||||
/datum/gear/uniform/jumpsuit/blackfemale
|
||||
display_name = "jumpsuit, female-black"
|
||||
path = /obj/item/clothing/under/color/blackf
|
||||
|
||||
/datum/gear/uniform/jumpsuit/blue
|
||||
display_name = "jumpsuit, blue"
|
||||
path = /obj/item/clothing/under/color/blue
|
||||
|
||||
/datum/gear/uniform/jumpsuit/green
|
||||
display_name = "jumpsuit, green"
|
||||
path = /obj/item/clothing/under/color/green
|
||||
|
||||
/datum/gear/uniform/jumpsuit/grey
|
||||
display_name = "jumpsuit, grey"
|
||||
path = /obj/item/clothing/under/color/grey
|
||||
|
||||
/datum/gear/uniform/jumpsuit/pink
|
||||
display_name = "jumpsuit, pink"
|
||||
path = /obj/item/clothing/under/color/pink
|
||||
|
||||
/datum/gear/uniform/jumpsuit/white
|
||||
display_name = "jumpsuit, white"
|
||||
path = /obj/item/clothing/under/color/white
|
||||
|
||||
/datum/gear/uniform/jumpsuit/yellow
|
||||
display_name = "jumpsuit, yellow"
|
||||
path = /obj/item/clothing/under/color/yellow
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightblue
|
||||
display_name = "jumpsuit, lightblue"
|
||||
path = /obj/item/clothing/under/lightblue
|
||||
|
||||
/datum/gear/uniform/jumpsuit/red
|
||||
display_name = "jumpsuit, red"
|
||||
path = /obj/item/clothing/under/color/red
|
||||
|
||||
/datum/gear/uniform/jumpsuit/aqua
|
||||
display_name = "jumpsuit, aqua"
|
||||
path = /obj/item/clothing/under/aqua
|
||||
|
||||
/datum/gear/uniform/jumpsuit/purple
|
||||
display_name = "jumpsuit, purple"
|
||||
path = /obj/item/clothing/under/purple
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightpurple
|
||||
display_name = "jumpsuit, lightpurple"
|
||||
path = /obj/item/clothing/under/lightpurple
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightgreen
|
||||
display_name = "jumpsuit, lightgreen"
|
||||
path = /obj/item/clothing/under/lightgreen
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightbrown
|
||||
display_name = "jumpsuit, lightbrown"
|
||||
path = /obj/item/clothing/under/lightbrown
|
||||
|
||||
/datum/gear/uniform/jumpsuit/brown
|
||||
display_name = "jumpsuit, brown"
|
||||
path = /obj/item/clothing/under/brown
|
||||
|
||||
/datum/gear/uniform/jumpsuit/yellowgreen
|
||||
display_name = "jumpsuit, yellowgreen"
|
||||
path = /obj/item/clothing/under/yellowgreen
|
||||
|
||||
/datum/gear/uniform/jumpsuit/darkblue
|
||||
display_name = "jumpsuit, darkblue"
|
||||
path = /obj/item/clothing/under/darkblue
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightred
|
||||
display_name = "jumpsuit, lightred"
|
||||
path = /obj/item/clothing/under/lightred
|
||||
|
||||
/datum/gear/uniform/jumpsuit/darkred
|
||||
display_name = "jumpsuit, darkred"
|
||||
path = /obj/item/clothing/under/darkred
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
display_name = "plaid skirt, blue"
|
||||
path = /obj/item/clothing/under/dress/plaid_blue
|
||||
|
||||
/datum/gear/uniform/skirt/purple
|
||||
display_name = "plaid skirt, purple"
|
||||
path = /obj/item/clothing/under/dress/plaid_purple
|
||||
|
||||
/datum/gear/uniform/skirt/red
|
||||
display_name = "plaid skirt, red"
|
||||
path = /obj/item/clothing/under/dress/plaid_red
|
||||
|
||||
/datum/gear/uniform/skirt/black
|
||||
display_name = "skirt, black"
|
||||
path = /obj/item/clothing/under/blackskirt
|
||||
|
||||
/datum/gear/uniform/skirt/ce
|
||||
display_name = "skirt, ce"
|
||||
path = /obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/atmos
|
||||
display_name = "skirt, atmos"
|
||||
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/eng
|
||||
display_name = "skirt, engineer"
|
||||
path = /obj/item/clothing/under/rank/engineer/skirt
|
||||
allowed_roles = list("Chief Engineer","Station Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/roboticist
|
||||
display_name = "skirt, roboticist"
|
||||
path = /obj/item/clothing/under/rank/roboticist/skirt
|
||||
allowed_roles = list("Research Director","Roboticist")
|
||||
|
||||
/datum/gear/uniform/skirt/cmo
|
||||
display_name = "skirt, cmo"
|
||||
path = /obj/item/clothing/under/rank/chief_medical_officer
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/uniform/skirt/chem
|
||||
display_name = "skirt, chemist"
|
||||
path = /obj/item/clothing/under/rank/chemist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Chemist")
|
||||
|
||||
/datum/gear/uniform/skirt/viro
|
||||
display_name = "skirt, virologist"
|
||||
path = /obj/item/clothing/under/rank/virologist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/uniform/skirt/med
|
||||
display_name = "skirt, medical"
|
||||
path = /obj/item/clothing/under/rank/medical/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
|
||||
|
||||
/datum/gear/uniform/skirt/sci
|
||||
display_name = "skirt, scientist"
|
||||
path = /obj/item/clothing/under/rank/scientist/skirt
|
||||
allowed_roles = list("Research Director","Scientist")
|
||||
|
||||
/datum/gear/uniform/skirt/cargo
|
||||
display_name = "skirt, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/skirt
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/qm
|
||||
display_name = "skirt, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/skirt
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_qm
|
||||
display_name = "jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_qmf
|
||||
display_name = "female jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans/female
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/jeans_cargo
|
||||
display_name = "jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/jeans_cargof
|
||||
display_name = "female jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/pants
|
||||
display_name = "pants, white"
|
||||
path = /obj/item/clothing/under/pants/white
|
||||
|
||||
/datum/gear/uniform/pants/red
|
||||
display_name = "pants, red"
|
||||
path = /obj/item/clothing/under/pants/red
|
||||
|
||||
/datum/gear/uniform/pants/black
|
||||
display_name = "pants, black"
|
||||
path = /obj/item/clothing/under/pants/black
|
||||
|
||||
/datum/gear/uniform/pants/tan
|
||||
display_name = "pants, tan"
|
||||
path = /obj/item/clothing/under/pants/tan
|
||||
|
||||
/datum/gear/uniform/pants/track
|
||||
display_name = "pants, track"
|
||||
path = /obj/item/clothing/under/pants/track
|
||||
|
||||
/datum/gear/uniform/pants/khaki
|
||||
display_name = "pants, khaki"
|
||||
path = /obj/item/clothing/under/pants/khaki
|
||||
|
||||
/datum/gear/uniform/pants/camo
|
||||
display_name = "pants, camo"
|
||||
path = /obj/item/clothing/under/pants/camo
|
||||
|
||||
/datum/gear/uniform/pants/jeans
|
||||
display_name = "pants, jeans"
|
||||
path = /obj/item/clothing/under/pants/jeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/classic
|
||||
display_name = "pants, classic jeans"
|
||||
path = /obj/item/clothing/under/pants/classicjeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/mustang
|
||||
display_name = "pants, mustang jeans"
|
||||
path = /obj/item/clothing/under/pants/mustangjeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/black
|
||||
display_name = "pants, black jeans"
|
||||
path = /obj/item/clothing/under/pants/blackjeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/youngfolks
|
||||
display_name = "pants, young folks jeans"
|
||||
path = /obj/item/clothing/under/pants/youngfolksjeans
|
||||
|
||||
/datum/gear/uniform/jeans
|
||||
display_name = "shorts, jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans
|
||||
|
||||
/datum/gear/uniform/jeans/classic
|
||||
display_name = "shorts, classic jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/classic
|
||||
|
||||
/datum/gear/uniform/jeans/mustang
|
||||
display_name = "shorts, mustang jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/mustang
|
||||
|
||||
/datum/gear/uniform/jeans/youngfolks
|
||||
display_name = "shorts, young folks jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/youngfolks
|
||||
|
||||
/datum/gear/uniform/jeans/black
|
||||
display_name = "shorts, black jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/black
|
||||
|
||||
/datum/gear/uniform/jeans/female
|
||||
display_name = "shorts, female, jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/female
|
||||
|
||||
/datum/gear/uniform/jeans/classic/female
|
||||
display_name = "shorts, female, classic jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/classic/female
|
||||
|
||||
/datum/gear/uniform/jeans/mustang/female
|
||||
display_name = "shorts, female, mustang jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/mustang/female
|
||||
|
||||
/datum/gear/uniform/jeans/youngfolks/female
|
||||
display_name = "shorts, female, young folks jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/youngfolks/female
|
||||
|
||||
/datum/gear/uniform/jeans/black/female
|
||||
display_name = "shorts, female, black jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/black/female
|
||||
|
||||
/datum/gear/uniform/khaki
|
||||
display_name = "shorts, khaki"
|
||||
path = /obj/item/clothing/under/shorts/khaki
|
||||
|
||||
/datum/gear/uniform/khaki/female
|
||||
display_name = "shorts, female, khaki"
|
||||
path = /obj/item/clothing/under/shorts/khaki/female
|
||||
|
||||
/datum/gear/uniform/suit //amish
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
|
||||
/datum/gear/uniform/suit/black
|
||||
display_name = "suit, black"
|
||||
path = /obj/item/clothing/under/suit_jacket
|
||||
|
||||
/datum/gear/uniform/suit/shinyblack
|
||||
display_name = "suit, shiny-black"
|
||||
path = /obj/item/clothing/under/lawyer/black
|
||||
|
||||
/datum/gear/uniform/suit/blue
|
||||
display_name = "suit, blue"
|
||||
path = /obj/item/clothing/under/lawyer/blue
|
||||
|
||||
/datum/gear/uniform/suit/burgundy
|
||||
display_name = "suit, burgundy"
|
||||
path = /obj/item/clothing/under/suit_jacket/burgundy
|
||||
|
||||
/datum/gear/uniform/suit/checkered
|
||||
display_name = "suit, checkered"
|
||||
path = /obj/item/clothing/under/suit_jacket/checkered
|
||||
|
||||
/datum/gear/uniform/suit/charcoal
|
||||
display_name = "suit, charcoal"
|
||||
path = /obj/item/clothing/under/suit_jacket/charcoal
|
||||
|
||||
/datum/gear/uniform/suit/exec
|
||||
display_name = "suit, executive"
|
||||
path = /obj/item/clothing/under/suit_jacket/really_black
|
||||
|
||||
/datum/gear/uniform/suit/femaleexec
|
||||
display_name = "suit, female-executive"
|
||||
path = /obj/item/clothing/under/suit_jacket/female
|
||||
|
||||
/datum/gear/uniform/suit/gentle
|
||||
display_name = "suit, gentlemen"
|
||||
path = /obj/item/clothing/under/gentlesuit
|
||||
|
||||
/datum/gear/uniform/suit/navy
|
||||
display_name = "suit, navy"
|
||||
path = /obj/item/clothing/under/suit_jacket/navy
|
||||
|
||||
/datum/gear/uniform/suit/red
|
||||
display_name = "suit, red"
|
||||
path = /obj/item/clothing/under/suit_jacket/red
|
||||
|
||||
/datum/gear/uniform/suit/redlawyer
|
||||
display_name = "suit, lawyer-red"
|
||||
path = /obj/item/clothing/under/lawyer/red
|
||||
|
||||
/datum/gear/uniform/suit/oldman
|
||||
display_name = "suit, old-man"
|
||||
path = /obj/item/clothing/under/lawyer/oldman
|
||||
|
||||
/datum/gear/uniform/suit/purple
|
||||
display_name = "suit, purple"
|
||||
path = /obj/item/clothing/under/lawyer/purpsuit
|
||||
|
||||
/datum/gear/uniform/suit/tan
|
||||
display_name = "suit, tan"
|
||||
path = /obj/item/clothing/under/suit_jacket/tan
|
||||
|
||||
/datum/gear/uniform/suit/white
|
||||
display_name = "suit, white"
|
||||
path = /obj/item/clothing/under/scratch
|
||||
|
||||
/datum/gear/uniform/suit/whiteblue
|
||||
display_name = "suit, white-blue"
|
||||
path = /obj/item/clothing/under/lawyer/bluesuit
|
||||
|
||||
/datum/gear/uniform/scrubs
|
||||
display_name = "scrubs, black"
|
||||
path = /obj/item/clothing/under/rank/medical/black
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
|
||||
|
||||
/datum/gear/uniform/scrubs/blue
|
||||
display_name = "scrubs, blue"
|
||||
path = /obj/item/clothing/under/rank/medical/blue
|
||||
|
||||
/datum/gear/uniform/scrubs/purple
|
||||
display_name = "scrubs, purple"
|
||||
path = /obj/item/clothing/under/rank/medical/purple
|
||||
|
||||
/datum/gear/uniform/scrubs/green
|
||||
display_name = "scrubs, green"
|
||||
path = /obj/item/clothing/under/rank/medical/green
|
||||
|
||||
/datum/gear/uniform/sundress
|
||||
display_name = "sundress"
|
||||
path = /obj/item/clothing/under/sundress
|
||||
|
||||
/datum/gear/uniform/sundress/white
|
||||
display_name = "sundress, white"
|
||||
path = /obj/item/clothing/under/sundress_white
|
||||
|
||||
/datum/gear/uniform/dress_fire
|
||||
display_name = "flame dress"
|
||||
path = /obj/item/clothing/under/dress/dress_fire
|
||||
|
||||
/datum/gear/uniform/uniform_captain
|
||||
display_name = "uniform, captain's dress"
|
||||
path = /obj/item/clothing/under/dress/dress_cap
|
||||
allowed_roles = list("Captain")
|
||||
|
||||
/datum/gear/uniform/corpdetsuit
|
||||
display_name = "uniform, corporate (Detective)"
|
||||
path = /obj/item/clothing/under/det/corporate
|
||||
allowed_roles = list("Detective","Head of Security")
|
||||
|
||||
/datum/gear/uniform/corpsecsuit
|
||||
display_name = "uniform, corporate (Security)"
|
||||
path = /obj/item/clothing/under/rank/security/corp
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/uniform/uniform_hop
|
||||
display_name = "uniform, HoP's dress"
|
||||
path = /obj/item/clothing/under/dress/dress_hop
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/uniform/uniform_hr
|
||||
display_name = "uniform, HR director (HoP)"
|
||||
path = /obj/item/clothing/under/dress/dress_hr
|
||||
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/uniform/navysecsuit
|
||||
display_name = "uniform, navyblue (Security)"
|
||||
path = /obj/item/clothing/under/rank/security/navyblue
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
@@ -0,0 +1,37 @@
|
||||
// "Useful" items - I'm guessing things that might be used at work?
|
||||
/datum/gear/utility
|
||||
display_name = "briefcase"
|
||||
path = /obj/item/weapon/storage/briefcase
|
||||
sort_category = "Utility"
|
||||
|
||||
/datum/gear/utility/clipboard
|
||||
display_name = "clipboard"
|
||||
path = /obj/item/weapon/clipboard
|
||||
|
||||
/datum/gear/utility/communicator
|
||||
display_name = "personal communicator"
|
||||
path = /obj/item/device/communicator
|
||||
|
||||
/datum/gear/utility/folder_blue
|
||||
display_name = "folder, blue"
|
||||
path = /obj/item/weapon/folder/blue
|
||||
|
||||
/datum/gear/utility/folder_grey
|
||||
display_name = "folder, grey"
|
||||
path = /obj/item/weapon/folder
|
||||
|
||||
/datum/gear/utility/folder_red
|
||||
display_name = "folder, red"
|
||||
path = /obj/item/weapon/folder/red
|
||||
|
||||
/datum/gear/utility/folder_white
|
||||
display_name = "folder, white"
|
||||
path = /obj/item/weapon/folder/white
|
||||
|
||||
/datum/gear/utility/folder_yellow
|
||||
display_name = "folder, yellow"
|
||||
path = /obj/item/weapon/folder/yellow
|
||||
|
||||
/datum/gear/utility/paicard
|
||||
display_name = "personal AI device"
|
||||
path = /obj/item/device/paicard
|
||||
99
code/modules/client/preference_setup/loadout/loadout_xeno.dm
Normal file
99
code/modules/client/preference_setup/loadout/loadout_xeno.dm
Normal file
@@ -0,0 +1,99 @@
|
||||
// Alien clothing.
|
||||
/datum/gear/suit/zhan_furs
|
||||
display_name = "Zhan-Khazan furs (Tajara)"
|
||||
path = /obj/item/clothing/suit/tajaran/furs
|
||||
whitelisted = "Tajara"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/suit/unathi_mantle
|
||||
display_name = "hide mantle (Unathi)"
|
||||
path = /obj/item/clothing/suit/unathi/mantle
|
||||
cost = 1
|
||||
whitelisted = "Unathi"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/ears/skrell
|
||||
display_name = "headtail-wear, female, chain (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/plate
|
||||
display_name = "headtail-wear, male, bands (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/band
|
||||
|
||||
/datum/gear/ears/skrell/cloth //male/red
|
||||
display_name = "headtail-wear, male, red, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male //black
|
||||
display_name = "headtail-wear, male, black, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/black
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/blue
|
||||
display_name = "headtail-wear, male, blue, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/blue
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/green
|
||||
display_name = "headtail-wear, male, green, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/green
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/pink
|
||||
display_name = "headtail-wear, male, pink, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/pink
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female
|
||||
display_name = "headtail-wear, female, red, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/black
|
||||
display_name = "headtail-wear, female, black, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/black
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/blue
|
||||
display_name = "headtail-wear, female, blue, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/blue
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/green
|
||||
display_name = "headtail-wear, female, green, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/green
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/pink
|
||||
display_name = "headtail-wear, female, pink, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/pink
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari
|
||||
display_name = "smock, grey (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi
|
||||
whitelisted = "Teshari"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/yellow
|
||||
display_name = "smock, yellow (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/yellow
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/red
|
||||
display_name = "smock, red (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/red
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/white
|
||||
display_name = "smock, white (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/white
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/medical
|
||||
display_name = "smock, Medical (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/medical
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/rainbow
|
||||
display_name = "smock, rainbow (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/rainbow
|
||||
|
||||
/datum/gear/mask/ipc_monitor
|
||||
display_name = "display monitor (Full Body Prosthetic)"
|
||||
path = /obj/item/clothing/mask/monitor
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/harness
|
||||
display_name = "gear harness (Full Body Prosthetic, Diona)"
|
||||
path = /obj/item/clothing/under/harness
|
||||
sort_category = "Xenowear"
|
||||
@@ -23,9 +23,14 @@
|
||||
sort_order = 4
|
||||
category_item_type = /datum/category_item/player_setup_item/antagonism
|
||||
|
||||
/datum/category_group/player_setup_category/loadout_preferences
|
||||
name = "Loadout"
|
||||
sort_order = 5
|
||||
category_item_type = /datum/category_item/player_setup_item/loadout
|
||||
|
||||
/datum/category_group/player_setup_category/global_preferences
|
||||
name = "Global"
|
||||
sort_order = 5
|
||||
sort_order = 6
|
||||
category_item_type = /datum/category_item/player_setup_item/player_global
|
||||
|
||||
/****************************
|
||||
|
||||
@@ -368,4 +368,4 @@ datum/preferences
|
||||
user << browse(dat, "window=saves;size=300x390")
|
||||
|
||||
/datum/preferences/proc/close_load_dialog(mob/user)
|
||||
user << browse(null, "window=saves")
|
||||
user << browse(null, "window=saves")
|
||||
@@ -25,7 +25,7 @@ var/global/list/home_system_choices = list(
|
||||
"Vir",
|
||||
"Nyx",
|
||||
"Tau Ceti",
|
||||
"Epsilon Ursae Majoris",
|
||||
"Epsilon Ursae Minoris",
|
||||
"S'randarr"
|
||||
)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -90,4 +90,4 @@
|
||||
return 1
|
||||
|
||||
#undef SAVEFILE_VERSION_MAX
|
||||
#undef SAVEFILE_VERSION_MIN
|
||||
#undef SAVEFILE_VERSION_MIN
|
||||
@@ -11,6 +11,7 @@
|
||||
while sprite_sheets should be used for "flexible" clothing items that do not need to be refitted (e.g. vox wearing jumpsuits).
|
||||
*/
|
||||
var/list/sprite_sheets_refit = null
|
||||
var/ear_protection = 0
|
||||
|
||||
//Updates the icons of the mob wearing the clothing item, if any.
|
||||
/obj/item/clothing/proc/update_clothing_icon()
|
||||
@@ -101,7 +102,7 @@
|
||||
w_class = 1.0
|
||||
throwforce = 2
|
||||
slot_flags = SLOT_EARS
|
||||
sprite_sheets = list("Seromi" = 'icons/mob/species/seromi/ears.dmi')
|
||||
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ears.dmi')
|
||||
|
||||
/obj/item/clothing/ears/attack_hand(mob/user as mob)
|
||||
if (!user) return
|
||||
@@ -162,6 +163,7 @@
|
||||
icon_state = "earmuffs"
|
||||
item_state = "earmuffs"
|
||||
slot_flags = SLOT_EARS | SLOT_TWOEARS
|
||||
ear_protection = 2
|
||||
|
||||
/obj/item/clothing/ears/earmuffs/headphones
|
||||
name = "headphones"
|
||||
@@ -189,37 +191,6 @@
|
||||
|
||||
update_clothing_icon()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Glasses
|
||||
/*
|
||||
SEE_SELF // can see self, no matter what
|
||||
SEE_MOBS // can see all mobs, no matter what
|
||||
SEE_OBJS // can see all objs, no matter what
|
||||
SEE_TURFS // can see all turfs (and areas), no matter what
|
||||
SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
|
||||
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
|
||||
BLIND // can't see anything
|
||||
*/
|
||||
/obj/item/clothing/glasses
|
||||
name = "glasses"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
w_class = 2.0
|
||||
body_parts_covered = EYES
|
||||
slot_flags = SLOT_EYES
|
||||
var/vision_flags = 0
|
||||
var/darkness_view = 0//Base human is 2
|
||||
var/see_invisible = -1
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/eyes.dmi',
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/update_clothing_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_glasses()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Gloves
|
||||
/obj/item/clothing/gloves
|
||||
name = "gloves"
|
||||
@@ -236,7 +207,7 @@ BLIND // can't see anything
|
||||
species_restricted = list("exclude","Unathi","Tajara", "Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/gloves.dmi',
|
||||
"Teshari" = 'icons/mob/species/seromi/gloves.dmi',
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/update_clothing_icon()
|
||||
@@ -294,7 +265,7 @@ BLIND // can't see anything
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/head.dmi'
|
||||
"Teshari" = 'icons/mob/species/seromi/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/attack_self(mob/user)
|
||||
@@ -393,7 +364,7 @@ BLIND // can't see anything
|
||||
body_parts_covered = FACE|EYES
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/masks.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/masks.dmi',
|
||||
"Teshari" = 'icons/mob/species/seromi/masks.dmi',
|
||||
)
|
||||
|
||||
var/voicechange = 0
|
||||
@@ -426,10 +397,10 @@ BLIND // can't see anything
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
force = 2
|
||||
var/overshoes = 0
|
||||
species_restricted = list("exclude","Seromi", "Unathi","Tajara","Vox")
|
||||
species_restricted = list("exclude","Teshari", "Unathi","Tajara","Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/shoes.dmi',
|
||||
"Teshari" = 'icons/mob/species/seromi/shoes.dmi',
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/proc/draw_knife()
|
||||
@@ -504,7 +475,7 @@ BLIND // can't see anything
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/suit.dmi'
|
||||
"Teshari" = 'icons/mob/species/seromi/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/update_clothing_icon()
|
||||
@@ -538,9 +509,10 @@ BLIND // can't see anything
|
||||
var/list/accessories = list()
|
||||
var/displays_id = 1
|
||||
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/uniform.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/uniform.dmi'
|
||||
"Teshari" = 'icons/mob/species/seromi/uniform.dmi'
|
||||
)
|
||||
|
||||
//convenience var for defining the icon state for the overlay used when the clothing is worn.
|
||||
@@ -584,6 +556,29 @@ BLIND // can't see anything
|
||||
rolled_down = -1
|
||||
if(H) update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/proc/update_rollsleeves_status()
|
||||
var/mob/living/carbon/human/H
|
||||
if(istype(src.loc, /mob/living/carbon/human))
|
||||
H = src.loc
|
||||
|
||||
var/icon/under_icon
|
||||
if(icon_override)
|
||||
under_icon = icon_override
|
||||
else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()])
|
||||
under_icon = sprite_sheets[H.species.get_bodytype()]
|
||||
else if(item_icons && item_icons[slot_w_uniform_str])
|
||||
under_icon = item_icons[slot_w_uniform_str]
|
||||
else
|
||||
under_icon = INV_W_UNIFORM_DEF_ICON
|
||||
|
||||
// The _s is because the icon update procs append it.
|
||||
if(("[worn_state]_r_s") in icon_states(under_icon))
|
||||
if(rolled_sleeves != 1)
|
||||
rolled_sleeves = 0
|
||||
else
|
||||
rolled_sleeves = -1
|
||||
if(H) update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/update_clothing_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
@@ -729,14 +724,45 @@ BLIND // can't see anything
|
||||
if(rolled_down == -1)
|
||||
usr << "<span class='notice'>You cannot roll down [src]!</span>"
|
||||
return
|
||||
if((rolled_sleeves == 1) && !(rolled_down))
|
||||
rolled_sleeves = 0
|
||||
|
||||
rolled_down = !rolled_down
|
||||
if(rolled_down)
|
||||
body_parts_covered &= LOWER_TORSO|LEGS|FEET
|
||||
body_parts_covered = initial(body_parts_covered)
|
||||
body_parts_covered &= ~(UPPER_TORSO|ARMS)
|
||||
item_state_slots[slot_w_uniform_str] = "[worn_state]_d"
|
||||
usr << "<span class='notice'>You roll down your [src].</span>"
|
||||
else
|
||||
body_parts_covered = initial(body_parts_covered)
|
||||
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
||||
usr << "<span class='notice'>You roll up your [src].</span>"
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/verb/rollsleeves()
|
||||
set name = "Roll Up Sleeves"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
update_rollsleeves_status()
|
||||
if(rolled_sleeves == -1)
|
||||
usr << "<span class='notice'>You cannot roll up your [src]'s sleeves!</span>"
|
||||
return
|
||||
if(rolled_down == 1)
|
||||
usr << "<span class='notice'>You must roll up your [src] first!</span>"
|
||||
return
|
||||
|
||||
rolled_sleeves = !rolled_sleeves
|
||||
if(rolled_sleeves)
|
||||
body_parts_covered &= ~(ARMS)
|
||||
item_state_slots[slot_w_uniform_str] = "[worn_state]_r"
|
||||
usr << "<span class='notice'>You roll up your [src]'s sleeves.</span>"
|
||||
else
|
||||
body_parts_covered = initial(body_parts_covered)
|
||||
item_state_slots[slot_w_uniform_str] = "[worn_state]"
|
||||
usr << "<span class='notice'>You roll down your [src]'s sleeves.</span>"
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
|
||||
@@ -1,11 +1,24 @@
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Glasses
|
||||
/*
|
||||
SEE_SELF // can see self, no matter what
|
||||
SEE_MOBS // can see all mobs, no matter what
|
||||
SEE_OBJS // can see all objs, no matter what
|
||||
SEE_TURFS // can see all turfs (and areas), no matter what
|
||||
SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
|
||||
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
|
||||
BLIND // can't see anything
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/clothing/glasses
|
||||
name = "glasses"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
//w_class = 2.0
|
||||
//slot_flags = SLOT_EYES
|
||||
//var/vision_flags = 0
|
||||
//var/darkness_view = 0//Base human is 2
|
||||
w_class = 2.0
|
||||
slot_flags = SLOT_EYES
|
||||
var/vision_flags = 0
|
||||
var/darkness_view = 0//Base human is 2
|
||||
var/see_invisible = -1
|
||||
var/prescription = 0
|
||||
var/toggleable = 0
|
||||
var/off_state = "degoggles"
|
||||
@@ -13,6 +26,16 @@
|
||||
var/activation_sound = 'sound/items/goggles_charge.ogg'
|
||||
var/obj/screen/overlay = null
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Teshari" = 'icons/mob/species/seromi/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/update_clothing_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_glasses()
|
||||
|
||||
/obj/item/clothing/glasses/attack_self(mob/user)
|
||||
if(toggleable)
|
||||
if(active)
|
||||
@@ -82,6 +105,21 @@
|
||||
icon_state = "eyepatch"
|
||||
item_state = "eyepatch"
|
||||
body_parts_covered = 0
|
||||
var/eye = null
|
||||
|
||||
/obj/item/clothing/glasses/eyepatch/verb/switcheye()
|
||||
set name = "Switch Eyepatch"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
eye = !eye
|
||||
if(eye)
|
||||
icon_state = "[icon_state]_r"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/glasses/monocle
|
||||
name = "monocle"
|
||||
@@ -146,6 +184,7 @@
|
||||
icon_state = "welding-g"
|
||||
item_state = "welding-g"
|
||||
action_button_name = "Flip Welding Goggles"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 1000)
|
||||
var/up = 0
|
||||
|
||||
/obj/item/clothing/glasses/welding/attack_self()
|
||||
@@ -203,6 +242,12 @@
|
||||
icon_state = "bigsunglasses"
|
||||
item_state = "bigsunglasses"
|
||||
|
||||
/obj/item/clothing/glasses/fakesunglasses //Sunglasses without flash immunity
|
||||
desc = "A pair of designer sunglasses. Doesn't seem like it'll block flashes."
|
||||
name = "stylish sunglasses"
|
||||
icon_state = "sun"
|
||||
item_state = "sunglasses"
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud
|
||||
name = "HUDSunglasses"
|
||||
desc = "Sunglasses with a HUD."
|
||||
@@ -262,6 +307,8 @@
|
||||
name = "Thermoncle"
|
||||
desc = "A monocle thermal."
|
||||
icon_state = "thermoncle"
|
||||
toggleable = 1
|
||||
action_button_name = "Toggle Monocle"
|
||||
flags = null //doesn't protect eyes because it's a monocle, duh
|
||||
|
||||
body_parts_covered = 0
|
||||
@@ -272,6 +319,8 @@
|
||||
icon_state = "eyepatch"
|
||||
item_state = "eyepatch"
|
||||
body_parts_covered = 0
|
||||
toggleable = 1
|
||||
action_button_name = "Toggle Eyepatch"
|
||||
|
||||
/obj/item/clothing/glasses/thermal/plain/jensen
|
||||
name = "Optical Thermal Implants"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
icon_state = "petehat"
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/head.dmi'
|
||||
"Teshari" = 'icons/mob/species/seromi/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.7
|
||||
w_class = 3
|
||||
ear_protection = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/riot
|
||||
name = "riot helmet"
|
||||
|
||||
@@ -272,3 +272,112 @@
|
||||
desc = "An orange piece of cloth, worn on the head."
|
||||
icon_state = "orange_bandana"
|
||||
body_parts_covered = 0
|
||||
|
||||
//Hijabs
|
||||
|
||||
/obj/item/clothing/head/hijab
|
||||
name = "black hijab"
|
||||
desc = "A black veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_black"
|
||||
body_parts_covered = 0
|
||||
flags_inv = BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/hijab/white
|
||||
name = "white hijab"
|
||||
desc = "A white veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_white"
|
||||
|
||||
/obj/item/clothing/head/hijab/aqua
|
||||
name = "aqua hijab"
|
||||
desc = "An aqua veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_aqua"
|
||||
|
||||
/obj/item/clothing/head/hijab/blue
|
||||
name = "blue hijab"
|
||||
desc = "A blue veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_blue"
|
||||
|
||||
/obj/item/clothing/head/hijab/brown
|
||||
name = "brown hijab"
|
||||
desc = "A brown veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_brown"
|
||||
|
||||
/obj/item/clothing/head/hijab/darkblue
|
||||
name = "bark blue hijab"
|
||||
desc = "A dark blue veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_darkblue"
|
||||
|
||||
/obj/item/clothing/head/hijab/darkred
|
||||
name = "dark red hijab"
|
||||
desc = "A dark red veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_darkred"
|
||||
|
||||
/obj/item/clothing/head/hijab/green
|
||||
name = "green hijab"
|
||||
desc = "A green veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_green"
|
||||
|
||||
/obj/item/clothing/head/hijab/grey
|
||||
name = "grey hijab"
|
||||
desc = "A grey veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_grey"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightblue
|
||||
name = "light blue hijab"
|
||||
desc = "A light blue veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightblue"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightbrown
|
||||
name = "light brown hijab"
|
||||
desc = "A light brown veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightbrown"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightgreen
|
||||
name = "light green hijab"
|
||||
desc = "A light green veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightgreen"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightpurple
|
||||
name = "light purple hijab"
|
||||
desc = "A light purple veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightpurple"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightred
|
||||
name = "light red hijab"
|
||||
desc = "A light red veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightred"
|
||||
|
||||
/obj/item/clothing/head/hijab/maroon
|
||||
name = "maroon hijab"
|
||||
desc = "A maroon veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_maroon"
|
||||
|
||||
/obj/item/clothing/head/hijab/orange
|
||||
name = "orange hijab"
|
||||
desc = "An orange veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_orange"
|
||||
|
||||
/obj/item/clothing/head/hijab/pink
|
||||
name = "pink hijab"
|
||||
desc = "A pink veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_pink"
|
||||
|
||||
/obj/item/clothing/head/hijab/purple
|
||||
name = "purple hijab"
|
||||
desc = "A purple veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_purple"
|
||||
|
||||
/obj/item/clothing/head/hijab/red
|
||||
name = "red hijab"
|
||||
desc = "A red veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_red"
|
||||
|
||||
/obj/item/clothing/head/hijab/yellowgreen
|
||||
name = "yellow green hijab"
|
||||
desc = "A yellow green veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_yellowgreen"
|
||||
|
||||
/obj/item/clothing/head/hijab/yellow
|
||||
name = "yellow hijab"
|
||||
desc = "A yellow veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_yellow"
|
||||
@@ -21,7 +21,7 @@
|
||||
name = "mounted grenade launcher"
|
||||
desc = "A shoulder-mounted micro-explosive dispenser."
|
||||
selectable = 1
|
||||
icon_state = "grenade"
|
||||
icon_state = "grenadelauncher"
|
||||
|
||||
interface_name = "integrated grenade launcher"
|
||||
interface_desc = "Discharges loaded grenades against the wearer's location."
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
if(!target)
|
||||
gun.attack_self(holder.wearer)
|
||||
return 1
|
||||
return
|
||||
|
||||
gun.Fire(target,holder.wearer)
|
||||
return 1
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
interface_desc = "A self-sustaining plasma arc capable of cutting through walls."
|
||||
suit_overlay_active = "plasmacutter"
|
||||
suit_overlay_inactive = "plasmacutter"
|
||||
use_power_cost = 0.5
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/plasmacutter
|
||||
|
||||
@@ -58,6 +59,7 @@
|
||||
interface_desc = "A diamond-tipped industrial drill."
|
||||
suit_overlay_active = "mounted-drill"
|
||||
suit_overlay_inactive = "mounted-drill"
|
||||
use_power_cost = 0.1
|
||||
|
||||
device_type = /obj/item/weapon/pickaxe/diamonddrill
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/clothing/head/helmet/space/rig/ert
|
||||
light_overlay = "helmet_light_dual"
|
||||
camera_networks = list("ERT")
|
||||
camera_networks = list(NETWORK_ERT)
|
||||
|
||||
/obj/item/weapon/rig/ert
|
||||
name = "ERT-C hardsuit control module"
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
airtight = 0
|
||||
seal_delay = 5 //not being vaccum-proof has an upside I guess
|
||||
|
||||
|
||||
helm_type = /obj/item/clothing/head/lightrig/hacker
|
||||
chest_type = /obj/item/clothing/suit/lightrig/hacker
|
||||
glove_type = /obj/item/clothing/gloves/lightrig/hacker
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
/obj/item/clothing/head/helmet/space/rig/industrial
|
||||
camera_networks = list("Mine")
|
||||
camera_networks = list(NETWORK_MINE)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ce
|
||||
camera_networks = list("Engineering")
|
||||
camera_networks = list(NETWORK_ENGINEERING)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/eva
|
||||
light_overlay = "helmet_light_dual"
|
||||
camera_networks = list("Engineering")
|
||||
camera_networks = list(NETWORK_ENGINEERING)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/hazmat
|
||||
light_overlay = "hardhat_light"
|
||||
camera_networks = list("Research")
|
||||
camera_networks = list(NETWORK_RESEARCH)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/medical
|
||||
camera_networks = list("Medbay")
|
||||
camera_networks = list(NETWORK_MEDICAL)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/hazard
|
||||
light_overlay = "helmet_light_dual"
|
||||
camera_networks = list("Security")
|
||||
camera_networks = list(NETWORK_SECURITY)
|
||||
|
||||
/obj/item/weapon/rig/internalaffairs
|
||||
name = "augmented tie"
|
||||
|
||||
@@ -57,11 +57,12 @@
|
||||
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
|
||||
var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any.
|
||||
var/obj/item/weapon/tank/tank = null // Deployable tank, if any.
|
||||
var/obj/item/device/suit_cooling_unit/cooler = null// Cooling unit, for FBPs. Cannot be installed alongside a tank.
|
||||
|
||||
/obj/item/clothing/suit/space/void/examine(user)
|
||||
..(user)
|
||||
var/list/part_list = new
|
||||
for(var/obj/item/I in list(helmet,boots,tank))
|
||||
for(var/obj/item/I in list(helmet,boots,tank,cooler))
|
||||
part_list += "\a [I]"
|
||||
user << "\The [src] has [english_list(part_list)] installed."
|
||||
if(tank && in_range(src,user))
|
||||
@@ -102,6 +103,13 @@
|
||||
M << "The valve on your suit's installed tank safely engages."
|
||||
tank.canremove = 0
|
||||
|
||||
if(cooler)
|
||||
if(H.s_store) //Ditto
|
||||
M << "Alarmingly, the cooling unit installed into your suit fails to deploy."
|
||||
else if (H.equip_to_slot_if_possible(cooler, slot_s_store))
|
||||
M << "Your suit's cooling unit deploys."
|
||||
cooler.canremove = 0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/void/dropped()
|
||||
..()
|
||||
@@ -128,6 +136,10 @@
|
||||
tank.canremove = 1
|
||||
tank.forceMove(src)
|
||||
|
||||
if(cooler)
|
||||
cooler.canremove = 1
|
||||
cooler.forceMove(src)
|
||||
|
||||
/obj/item/clothing/suit/space/void/verb/toggle_helmet()
|
||||
|
||||
set name = "Toggle Helmet"
|
||||
@@ -163,14 +175,14 @@
|
||||
|
||||
/obj/item/clothing/suit/space/void/verb/eject_tank()
|
||||
|
||||
set name = "Eject Voidsuit Tank"
|
||||
set name = "Eject Voidsuit Tank/Cooler"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!istype(src.loc,/mob/living)) return
|
||||
|
||||
if(!tank)
|
||||
usr << "There is no tank inserted."
|
||||
if(!tank && !cooler)
|
||||
usr << "There is no tank or cooling unit inserted."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = usr
|
||||
@@ -179,10 +191,16 @@
|
||||
if(H.stat) return
|
||||
if(H.wear_suit != src) return
|
||||
|
||||
H << "<span class='info'>You press the emergency release, ejecting \the [tank] from your suit.</span>"
|
||||
tank.canremove = 1
|
||||
H.drop_from_inventory(tank)
|
||||
src.tank = null
|
||||
var/obj/item/removing = null
|
||||
if(tank)
|
||||
removing = tank
|
||||
tank = null
|
||||
else
|
||||
removing = cooler
|
||||
cooler = null
|
||||
H << "<span class='info'>You press the emergency release, ejecting \the [removing] from your suit.</span>"
|
||||
removing.canremove = 1
|
||||
H.drop_from_inventory(removing)
|
||||
|
||||
/obj/item/clothing/suit/space/void/attackby(obj/item/W as obj, mob/user as mob)
|
||||
|
||||
@@ -194,13 +212,17 @@
|
||||
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
if(helmet || boots || tank)
|
||||
var/choice = input("What component would you like to remove?") as null|anything in list(helmet,boots,tank)
|
||||
var/choice = input("What component would you like to remove?") as null|anything in list(helmet,boots,tank,cooler)
|
||||
if(!choice) return
|
||||
|
||||
if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead
|
||||
user << "You pop \the [tank] out of \the [src]'s storage compartment."
|
||||
tank.forceMove(get_turf(src))
|
||||
src.tank = null
|
||||
else if(choice == cooler)
|
||||
user << "You pop \the [cooler] out of \the [src]'s storage compartment."
|
||||
cooler.forceMove(get_turf(src))
|
||||
src.cooler = null
|
||||
else if(choice == helmet)
|
||||
user << "You detatch \the [helmet] from \the [src]'s helmet mount."
|
||||
helmet.forceMove(get_turf(src))
|
||||
@@ -233,6 +255,8 @@
|
||||
else if(istype(W,/obj/item/weapon/tank))
|
||||
if(tank)
|
||||
user << "\The [src] already has an airtank installed."
|
||||
else if(cooler)
|
||||
user << "\The [src]'s suit cooling unit is in the way. Remove it first."
|
||||
else if(istype(W,/obj/item/weapon/tank/phoron))
|
||||
user << "\The [W] cannot be inserted into \the [src]'s storage compartment."
|
||||
else
|
||||
@@ -241,5 +265,16 @@
|
||||
W.forceMove(src)
|
||||
tank = W
|
||||
return
|
||||
else if(istype(W,/obj/item/device/suit_cooling_unit))
|
||||
if(cooler)
|
||||
user << "\The [src] already has a suit cooling unit installed."
|
||||
else if(tank)
|
||||
user << "\The [src]'s airtank is in the way. Remove it first."
|
||||
else
|
||||
user << "You insert \the [W] into \the [src]'s storage compartment."
|
||||
user.drop_item()
|
||||
W.forceMove(src)
|
||||
cooler = W
|
||||
return
|
||||
|
||||
..()
|
||||
@@ -277,6 +277,15 @@
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
item_flags = THICKMATERIAL
|
||||
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO
|
||||
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO
|
||||
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/officer
|
||||
name = "officer armor vest"
|
||||
desc = "A simple kevlar plate carrier. This one has a security holobadge clipped to the chest."
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
//Lawyer
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
|
||||
name = "Blue Suit Jacket"
|
||||
name = "blue suit jacket"
|
||||
desc = "A snappy dress jacket."
|
||||
icon_state = "suitjacket_blue_open"
|
||||
item_state = "suitjacket_blue_open"
|
||||
@@ -155,17 +155,19 @@
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/lawyer/purpjacket
|
||||
name = "Purple Suit Jacket"
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket
|
||||
name = "purple suit jacket"
|
||||
desc = "A snappy dress jacket."
|
||||
icon_state = "suitjacket_purp"
|
||||
item_state = "suitjacket_purp"
|
||||
icon_state = "suitjacket_purp_open"
|
||||
item_state = "suitjacket_purp_open"
|
||||
icon_open = "suitjacket_purp_open"
|
||||
icon_closed = "suitjacket_purp"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
//Internal Affairs
|
||||
/obj/item/clothing/suit/storage/toggle/internalaffairs
|
||||
name = "Internal Affairs Jacket"
|
||||
name = "black suit jacket"
|
||||
desc = "A smooth black jacket."
|
||||
icon_state = "ia_jacket_open"
|
||||
item_state = "ia_jacket"
|
||||
|
||||
@@ -97,20 +97,34 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/clothing/accessory/badge/warden
|
||||
name = "warden's badge"
|
||||
/obj/item/clothing/accessory/badge/holo/warden
|
||||
name = "warden's holobadge"
|
||||
desc = "A silver corporate security badge. Stamped with the words 'Warden.'"
|
||||
icon_state = "silverbadge"
|
||||
slot_flags = SLOT_TIE | SLOT_BELT
|
||||
|
||||
/obj/item/clothing/accessory/badge/hos
|
||||
name = "head of security's badge"
|
||||
/obj/item/clothing/accessory/badge/holo/hos
|
||||
name = "head of security's holobadge"
|
||||
desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'"
|
||||
icon_state = "goldbadge"
|
||||
slot_flags = SLOT_TIE | SLOT_BELT
|
||||
|
||||
/obj/item/clothing/accessory/badge/detective
|
||||
name = "detective's badge"
|
||||
/obj/item/clothing/accessory/badge/holo/detective
|
||||
name = "detective's holobadge"
|
||||
desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'"
|
||||
icon_state = "marshalbadge"
|
||||
slot_flags = SLOT_TIE | SLOT_BELT
|
||||
slot_flags = SLOT_TIE | SLOT_BELT
|
||||
|
||||
/obj/item/weapon/storage/box/holobadge/hos
|
||||
name = "holobadge box"
|
||||
desc = "A box claiming to contain holobadges."
|
||||
New()
|
||||
new /obj/item/clothing/accessory/badge/holo(src)
|
||||
new /obj/item/clothing/accessory/badge/holo(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/warden(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/detective(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/detective(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/cord(src)
|
||||
..()
|
||||
return
|
||||
@@ -3,6 +3,7 @@
|
||||
icon_state = "black"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "black"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/blackf
|
||||
name = "feminine black jumpsuit"
|
||||
@@ -16,18 +17,21 @@
|
||||
icon_state = "blue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "blue"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/green
|
||||
name = "green jumpsuit"
|
||||
icon_state = "green"
|
||||
item_state = "g_suit"
|
||||
worn_state = "green"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/grey
|
||||
name = "grey jumpsuit"
|
||||
icon_state = "grey"
|
||||
item_state = "gy_suit"
|
||||
worn_state = "grey"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/orange
|
||||
name = "orange jumpsuit"
|
||||
@@ -37,30 +41,35 @@
|
||||
worn_state = "orange"
|
||||
has_sensor = 2
|
||||
sensor_mode = 3
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/pink
|
||||
name = "pink jumpsuit"
|
||||
icon_state = "pink"
|
||||
item_state = "p_suit"
|
||||
worn_state = "pink"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/red
|
||||
name = "red jumpsuit"
|
||||
icon_state = "red"
|
||||
item_state = "r_suit"
|
||||
worn_state = "red"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/white
|
||||
name = "white jumpsuit"
|
||||
icon_state = "white"
|
||||
item_state = "w_suit"
|
||||
worn_state = "white"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/yellow
|
||||
name = "yellow jumpsuit"
|
||||
icon_state = "yellow"
|
||||
item_state = "y_suit"
|
||||
worn_state = "yellow"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/psyche
|
||||
name = "psychedelic jumpsuit"
|
||||
@@ -75,6 +84,7 @@
|
||||
icon_state = "lightblue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "lightblue"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/aqua
|
||||
name = "aqua jumpsuit"
|
||||
@@ -82,6 +92,7 @@
|
||||
icon_state = "aqua"
|
||||
item_state = "b_suit"
|
||||
worn_state = "aqua"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/purple
|
||||
name = "purple jumpsuit"
|
||||
@@ -89,6 +100,7 @@
|
||||
icon_state = "purple"
|
||||
item_state = "p_suit"
|
||||
worn_state = "purple"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightpurple
|
||||
name = "lightpurple jumpsuit"
|
||||
@@ -96,6 +108,7 @@
|
||||
icon_state = "lightpurple"
|
||||
item_state = "p_suit"
|
||||
worn_state = "lightpurple"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightgreen
|
||||
name = "lightgreen jumpsuit"
|
||||
@@ -103,6 +116,7 @@
|
||||
icon_state = "lightgreen"
|
||||
item_state = "g_suit"
|
||||
worn_state = "lightgreen"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightbrown
|
||||
name = "lightbrown jumpsuit"
|
||||
@@ -110,6 +124,7 @@
|
||||
icon_state = "lightbrown"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "lightbrown"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/brown
|
||||
name = "brown jumpsuit"
|
||||
@@ -117,6 +132,7 @@
|
||||
icon_state = "brown"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "brown"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/yellowgreen
|
||||
name = "yellowgreen jumpsuit"
|
||||
@@ -124,6 +140,7 @@
|
||||
icon_state = "yellowgreen"
|
||||
item_state = "y_suit"
|
||||
worn_state = "yellowgreen"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/darkblue
|
||||
name = "darkblue jumpsuit"
|
||||
@@ -131,6 +148,7 @@
|
||||
icon_state = "darkblue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "darkblue"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightred
|
||||
name = "lightred jumpsuit"
|
||||
@@ -138,6 +156,7 @@
|
||||
icon_state = "lightred"
|
||||
item_state = "r_suit"
|
||||
worn_state = "lightred"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/darkred
|
||||
name = "darkred jumpsuit"
|
||||
@@ -145,3 +164,4 @@
|
||||
icon_state = "darkred"
|
||||
item_state = "r_suit"
|
||||
worn_state = "darkred"
|
||||
rolled_sleeves = 0
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon_state = "ba_suit"
|
||||
item_state = "ba_suit"
|
||||
worn_state = "ba_suit"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
|
||||
@@ -14,6 +15,7 @@
|
||||
icon_state = "captain"
|
||||
item_state = "b_suit"
|
||||
worn_state = "captain"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/cargo
|
||||
@@ -22,6 +24,7 @@
|
||||
icon_state = "qm"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "qm"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/skirt
|
||||
name = "quartermaster's jumpskirt"
|
||||
@@ -29,6 +32,7 @@
|
||||
icon_state = "qmf"
|
||||
worn_state = "qmf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/jeans
|
||||
name = "quartermaster's jumpjeans"
|
||||
@@ -41,6 +45,7 @@
|
||||
desc = "Jeeeaaans! They're comfy!"
|
||||
icon_state = "qmjf"
|
||||
worn_state = "qmjf"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech
|
||||
name = "cargo technician's jumpsuit"
|
||||
@@ -49,18 +54,21 @@
|
||||
item_state = "lb_suit"
|
||||
worn_state = "cargo"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/skirt
|
||||
name = "cargo technician's jumpskirt"
|
||||
desc = "Skirrrrrts! They're comfy and easy to wear!"
|
||||
icon_state = "cargof"
|
||||
worn_state = "cargof"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/jeans
|
||||
name = "cargo technician's jumpjeans"
|
||||
desc = "Jeeeaaans! They're comfy!"
|
||||
icon_state = "cargoj"
|
||||
worn_state = "cargoj"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
name = "cargo technician's jumpjeans"
|
||||
@@ -75,6 +83,7 @@
|
||||
icon_state = "chaplain"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "chapblack"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/chef
|
||||
@@ -83,6 +92,7 @@
|
||||
icon_state = "chef"
|
||||
item_state = "w_suit"
|
||||
worn_state = "chef"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/clown
|
||||
@@ -91,6 +101,7 @@
|
||||
icon_state = "clown"
|
||||
item_state = "clown"
|
||||
worn_state = "clown"
|
||||
rolled_sleeves = -1
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_personnel
|
||||
@@ -99,6 +110,7 @@
|
||||
icon_state = "hop"
|
||||
item_state = "b_suit"
|
||||
worn_state = "hop"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_personnel_whimsy
|
||||
desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does."
|
||||
@@ -106,6 +118,7 @@
|
||||
icon_state = "hopwhimsy"
|
||||
item_state = "b_suit"
|
||||
worn_state = "hopwhimsy"
|
||||
rolled_sleeves = -1
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/hydroponics
|
||||
@@ -115,6 +128,7 @@
|
||||
item_state = "g_suit"
|
||||
worn_state = "hydroponics"
|
||||
permeability_coefficient = 0.50
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/internalaffairs
|
||||
@@ -123,6 +137,7 @@
|
||||
icon_state = "internalaffairs"
|
||||
item_state = "ba_suit"
|
||||
worn_state = "internalaffairs"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/janitor
|
||||
@@ -132,6 +147,7 @@
|
||||
worn_state = "janitor"
|
||||
item_state = "janitor"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer
|
||||
@@ -209,3 +225,4 @@
|
||||
icon_state = "miner"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "miner"
|
||||
rolled_sleeves = 0
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
item_state = "g_suit"
|
||||
worn_state = "chief"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding."
|
||||
@@ -13,6 +14,7 @@
|
||||
icon_state = "chieff"
|
||||
worn_state = "chieff"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician
|
||||
desc = "It's a jumpsuit worn by atmospheric technicians."
|
||||
@@ -20,6 +22,7 @@
|
||||
icon_state = "atmos"
|
||||
item_state = "atmos_suit"
|
||||
worn_state = "atmos"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
desc = "It's a jumpskirt worn by atmospheric technicians."
|
||||
@@ -27,6 +30,7 @@
|
||||
icon_state = "atmosf"
|
||||
worn_state = "atmosf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/engineer
|
||||
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
|
||||
@@ -35,6 +39,7 @@
|
||||
item_state = "engi_suit"
|
||||
worn_state = "engine"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/skirt
|
||||
desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding."
|
||||
@@ -42,6 +47,7 @@
|
||||
icon_state = "enginef"
|
||||
worn_state = "enginef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist
|
||||
desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work."
|
||||
@@ -49,9 +55,11 @@
|
||||
icon_state = "robotics"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "robotics"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/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"
|
||||
rolled_sleeves = -1
|
||||
|
||||
@@ -34,12 +34,14 @@
|
||||
worn_state = "sciencewhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/scientist/skirt
|
||||
name = "scientist's jumpskirt"
|
||||
icon_state = "sciencewhitef"
|
||||
worn_state = "sciencewhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/chemist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
|
||||
@@ -49,12 +51,14 @@
|
||||
worn_state = "chemistrywhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chemist/skirt
|
||||
name = "chemist's jumpskirt"
|
||||
icon_state = "chemistrywhitef"
|
||||
worn_state = "chemistrywhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/*
|
||||
* Medical
|
||||
@@ -67,6 +71,7 @@
|
||||
worn_state = "cmo"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/skirt
|
||||
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
|
||||
@@ -74,6 +79,7 @@
|
||||
icon_state = "cmof"
|
||||
worn_state = "cmof"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
|
||||
@@ -83,12 +89,14 @@
|
||||
worn_state = "geneticswhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist/skirt
|
||||
name = "geneticist's jumpskirt"
|
||||
icon_state = "geneticswhitef"
|
||||
worn_state = "geneticswhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/virologist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
|
||||
@@ -98,12 +106,14 @@
|
||||
worn_state = "virologywhite"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/virologist/skirt
|
||||
name = "virologist's jumpskirt"
|
||||
icon_state = "virologywhitef"
|
||||
worn_state = "virologywhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/nursesuit
|
||||
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
|
||||
@@ -114,6 +124,7 @@
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/nurse
|
||||
desc = "A dress commonly worn by the nursing staff in the medical department."
|
||||
@@ -124,6 +135,7 @@
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/orderly
|
||||
desc = "A white suit to be worn by medical attendants."
|
||||
@@ -133,6 +145,7 @@
|
||||
worn_state = "orderly"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/medical
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
|
||||
@@ -142,12 +155,14 @@
|
||||
worn_state = "medical"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/medical/skirt
|
||||
name = "medical doctor's jumpskirt"
|
||||
icon_state = "medicalf"
|
||||
worn_state = "medicalf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic
|
||||
name = "short sleeve medical jumpsuit"
|
||||
@@ -155,13 +170,15 @@
|
||||
icon_state = "medical_short"
|
||||
item_state = "medical_short"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/blue
|
||||
/obj/item/clothing/under/rank/medical/blue //Why are these not /obj/item/clothing/under/rank/medical/scrubs/ ?
|
||||
name = "medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
|
||||
icon_state = "scrubsblue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "scrubsblue"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/green
|
||||
name = "medical scrubs"
|
||||
@@ -169,6 +186,7 @@
|
||||
icon_state = "scrubsgreen"
|
||||
item_state = "g_suit"
|
||||
worn_state = "scrubsgreen"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/purple
|
||||
name = "medical scrubs"
|
||||
@@ -176,6 +194,7 @@
|
||||
icon_state = "scrubspurple"
|
||||
item_state = "p_suit"
|
||||
worn_state = "scrubspurple"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/black
|
||||
name = "medical scrubs"
|
||||
@@ -183,6 +202,7 @@
|
||||
icon_state = "scrubsblack"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "scrubsblack"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/psych
|
||||
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
|
||||
@@ -197,6 +217,7 @@
|
||||
icon_state = "psychturtle"
|
||||
item_state = "b_suit"
|
||||
worn_state = "psychturtle"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/*
|
||||
@@ -210,6 +231,7 @@
|
||||
worn_state = "genetics_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chemist_new
|
||||
desc = "It's made of a special fiber which provides minor protection against biohazards."
|
||||
@@ -219,6 +241,7 @@
|
||||
worn_state = "chemist_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/scientist_new
|
||||
desc = "Made of a special fiber that gives special protection against biohazards and small explosions."
|
||||
@@ -228,6 +251,7 @@
|
||||
worn_state = "scientist_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/virologist_new
|
||||
desc = "Made of a special fiber that gives increased protection against biohazards."
|
||||
@@ -236,4 +260,5 @@
|
||||
item_state = "w_suit"
|
||||
worn_state = "virologist_new"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
@@ -16,6 +16,7 @@
|
||||
worn_state = "warden"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/warden
|
||||
name = "warden's hat"
|
||||
@@ -31,6 +32,7 @@
|
||||
worn_state = "secred"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/dispatch
|
||||
name = "dispatcher's uniform"
|
||||
@@ -50,16 +52,19 @@
|
||||
worn_state = "redshirt2"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/security/corp
|
||||
icon_state = "sec_corporate"
|
||||
//item_state = "sec_corporate"
|
||||
worn_state = "sec_corporate"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/warden/corp
|
||||
icon_state = "warden_corporate"
|
||||
//item_state = "warden_corporate"
|
||||
worn_state = "warden_corporate"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/tactical
|
||||
name = "tactical jumpsuit"
|
||||
@@ -69,6 +74,7 @@
|
||||
worn_state = "swatunder"
|
||||
armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = -1
|
||||
|
||||
/*
|
||||
* Detective
|
||||
@@ -81,7 +87,9 @@
|
||||
worn_state = "detective"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
|
||||
/*
|
||||
/obj/item/clothing/under/det/verb/rollup()
|
||||
set name = "Roll Suit Sleeves"
|
||||
set category = "Object"
|
||||
@@ -91,7 +99,7 @@
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_w_uniform(1)
|
||||
H << "<span class='notice'>You roll the sleeves of your shirt [unrolled ? "up" : "down"]</span>"
|
||||
|
||||
*/
|
||||
/obj/item/clothing/under/det/grey
|
||||
icon_state = "detective2"
|
||||
worn_state = "detective2"
|
||||
@@ -119,6 +127,7 @@
|
||||
icon_state = "detective2_waistcoat"
|
||||
worn_state = "detective2_waistcoat"
|
||||
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
|
||||
|
||||
|
||||
/obj/item/clothing/head/det
|
||||
name = "fedora"
|
||||
@@ -149,11 +158,13 @@
|
||||
worn_state = "hosred"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.8
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/corp
|
||||
icon_state = "hos_corporate"
|
||||
//item_state = "hos_corporate"
|
||||
worn_state = "hos_corporate"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
name = "Head of Security Hat"
|
||||
@@ -186,6 +197,7 @@
|
||||
item_state = "jensen"
|
||||
worn_state = "jensen"
|
||||
siemens_coefficient = 0.6
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/suit/armor/hos/jensen
|
||||
name = "armored trenchcoat"
|
||||
@@ -206,6 +218,7 @@
|
||||
icon_state = "officerblueclothes"
|
||||
item_state = "ba_suit"
|
||||
worn_state = "officerblueclothes"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/navyblue
|
||||
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
|
||||
@@ -213,6 +226,7 @@
|
||||
icon_state = "hosblueclothes"
|
||||
item_state = "ba_suit"
|
||||
worn_state = "hosblueclothes"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/warden/navyblue
|
||||
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
|
||||
@@ -220,3 +234,4 @@
|
||||
icon_state = "wardenblueclothes"
|
||||
item_state = "ba_suit"
|
||||
worn_state = "wardenblueclothes"
|
||||
rolled_sleeves = 0
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
icon_state = "sl_suit"
|
||||
worn_state = "sl_suit"
|
||||
item_state = "sl_suit"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/waiter
|
||||
name = "waiter's outfit"
|
||||
@@ -39,6 +40,7 @@
|
||||
icon_state = "waiter"
|
||||
item_state = "waiter"
|
||||
worn_state = "waiter"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/mailman
|
||||
name = "mailman's jumpsuit"
|
||||
@@ -46,6 +48,7 @@
|
||||
icon_state = "mailman"
|
||||
item_state = "b_suit"
|
||||
worn_state = "mailman"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/sexyclown
|
||||
name = "sexy-clown suit"
|
||||
@@ -54,6 +57,7 @@
|
||||
item_state = "clown"
|
||||
worn_state = "sexyclown"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
rolled_sleeves = -1 //Please never
|
||||
|
||||
/obj/item/clothing/under/rank/vice
|
||||
name = "vice officer's jumpsuit"
|
||||
@@ -106,6 +110,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/acj
|
||||
name = "administrative cybernetic jumpsuit"
|
||||
@@ -162,6 +167,7 @@
|
||||
icon_state = "gentlesuit"
|
||||
item_state = "gy_suit"
|
||||
worn_state = "gentlesuit"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/gimmick/rank/captain/suit
|
||||
name = "captain's suit"
|
||||
@@ -265,6 +271,7 @@
|
||||
item_state = "w_suit"
|
||||
worn_state = "sexymime"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
rolled_sleeves = -1 //Please never
|
||||
|
||||
/obj/item/clothing/under/gladiator
|
||||
name = "gladiator uniform"
|
||||
@@ -551,6 +558,7 @@
|
||||
icon_state = "mechanic"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "mechanic"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/cheongsam
|
||||
name = "white cheongsam"
|
||||
|
||||
@@ -25,5 +25,4 @@
|
||||
item_state = "bl_suit"
|
||||
worn_state = "tactifool"
|
||||
siemens_coefficient = 1
|
||||
|
||||
|
||||
rolled_sleeves = 0
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
icon = 'icons/obj/clothing/species/seromi/uniform.dmi'
|
||||
icon_state = "seromi_grey"
|
||||
worn_state = "seromi_grey"
|
||||
species_restricted = list("Seromi")
|
||||
species_restricted = list("Teshari")
|
||||
body_parts_covered = 0 // It's a thin piece of cloth with a neck hole.
|
||||
|
||||
/obj/item/clothing/under/seromi/white
|
||||
name = "small white smock"
|
||||
@@ -24,7 +25,7 @@
|
||||
/obj/item/clothing/under/seromi/medical
|
||||
name = "small Medical uniform"
|
||||
icon_state = "seromi_medical"
|
||||
worn_state = "Seromi_medical"
|
||||
worn_state = "Teshari_medical"
|
||||
|
||||
/obj/item/clothing/under/seromi/rainbow
|
||||
name = "small rainbow smock"
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
return
|
||||
|
||||
if(!on_fire && istype(A) && (src in user))
|
||||
if(A.is_open_container())
|
||||
if(A.is_open_container() && !(A in user))
|
||||
remove_contents(user, A)
|
||||
else if(!ismob(A)) //mobs are handled in attack() - this prevents us from wiping down people while smothering them.
|
||||
wipe_down(A, user)
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
/obj/item/weapon/storage/box/evidence
|
||||
name = "evidence bag box"
|
||||
desc = "A box claiming to contain evidence bags."
|
||||
storage_slots = 6
|
||||
|
||||
/obj/item/weapon/storage/box/evidence/New()
|
||||
..()
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
item_state = "electronic"
|
||||
action_button_name = "Toggle UV light"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
|
||||
|
||||
@@ -20,33 +20,24 @@
|
||||
if(istype(W, /obj/item/weapon/spacecash))
|
||||
if(istype(W, /obj/item/weapon/spacecash/ewallet)) return 0
|
||||
|
||||
var/obj/item/weapon/spacecash/bundle/bundle
|
||||
if(!istype(W, /obj/item/weapon/spacecash/bundle))
|
||||
var/obj/item/weapon/spacecash/cash = W
|
||||
user.drop_from_inventory(cash)
|
||||
bundle = new (src.loc)
|
||||
bundle.worth += cash.worth
|
||||
qdel(cash)
|
||||
else //is bundle
|
||||
bundle = W
|
||||
bundle.worth += src.worth
|
||||
bundle.update_icon()
|
||||
var/obj/item/weapon/spacecash/SC = W
|
||||
SC.worth += src.worth
|
||||
SC.update_icon()
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/h_user = user
|
||||
h_user.drop_from_inventory(src)
|
||||
h_user.drop_from_inventory(bundle)
|
||||
h_user.put_in_hands(bundle)
|
||||
user << "<span class='notice'>You add [src.worth] Thalers worth of money to the bundles.<br>It holds [bundle.worth] Thalers now.</span>"
|
||||
h_user.drop_from_inventory(SC)
|
||||
h_user.put_in_hands(SC)
|
||||
user << "<span class='notice'>You combine the Thalers to a bundle of [SC.worth] Thalers.</span>"
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/spacecash/bundle
|
||||
name = "pile of thalers"
|
||||
icon_state = ""
|
||||
desc = "They are worth 0 Thalers."
|
||||
worth = 0
|
||||
|
||||
/obj/item/weapon/spacecash/bundle/update_icon()
|
||||
/obj/item/weapon/spacecash/update_icon()
|
||||
overlays.Cut()
|
||||
name = "[worth] Thaler\s"
|
||||
if(worth in list(1000,500,200,100,50,20,10,1))
|
||||
icon_state = "spacecash[worth]"
|
||||
desc = "It's worth [worth] Thalers."
|
||||
return
|
||||
var/sum = src.worth
|
||||
var/num = 0
|
||||
for(var/i in list(1000,500,200,100,50,20,10,1))
|
||||
@@ -68,7 +59,7 @@
|
||||
src.overlays += banknote
|
||||
src.desc = "They are worth [worth] Thalers."
|
||||
|
||||
/obj/item/weapon/spacecash/bundle/attack_self()
|
||||
/obj/item/weapon/spacecash/attack_self()
|
||||
var/amount = input(usr, "How many Thalers do you want to take? (0 to [src.worth])", "Take Money", 20) as num
|
||||
amount = round(Clamp(amount, 0, src.worth))
|
||||
if(amount==0) return 0
|
||||
@@ -82,10 +73,10 @@
|
||||
var/obj/cash = new cashtype (usr.loc)
|
||||
usr.put_in_hands(cash)
|
||||
else
|
||||
var/obj/item/weapon/spacecash/bundle/bundle = new (usr.loc)
|
||||
bundle.worth = amount
|
||||
bundle.update_icon()
|
||||
usr.put_in_hands(bundle)
|
||||
var/obj/item/weapon/spacecash/SC = new (usr.loc)
|
||||
SC.worth = amount
|
||||
SC.update_icon()
|
||||
usr.put_in_hands(SC)
|
||||
if(!worth)
|
||||
qdel(src)
|
||||
|
||||
@@ -138,17 +129,11 @@
|
||||
worth = 1000
|
||||
|
||||
proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
if(sum in list(1000,500,200,100,50,20,10,1))
|
||||
var/cash_type = text2path("/obj/item/weapon/spacecash/c[sum]")
|
||||
var/obj/cash = new cash_type (usr.loc)
|
||||
if(ishuman(human_user) && !human_user.get_active_hand())
|
||||
human_user.put_in_hands(cash)
|
||||
else
|
||||
var/obj/item/weapon/spacecash/bundle/bundle = new (spawnloc)
|
||||
bundle.worth = sum
|
||||
bundle.update_icon()
|
||||
if (ishuman(human_user) && !human_user.get_active_hand())
|
||||
human_user.put_in_hands(bundle)
|
||||
var/obj/item/weapon/spacecash/SC = new (spawnloc)
|
||||
SC.worth = sum
|
||||
SC.update_icon()
|
||||
if (ishuman(human_user) && !human_user.get_active_hand())
|
||||
human_user.put_in_hands(SC)
|
||||
return
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet
|
||||
@@ -156,6 +141,9 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
icon_state = "efundcard"
|
||||
desc = "A card that holds an amount of money."
|
||||
var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions.
|
||||
attack_self() return //Don't act
|
||||
attackby() return //like actual
|
||||
update_icon() return //space cash
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet/examine(mob/user)
|
||||
..(user)
|
||||
|
||||
471
code/modules/economy/cash_register.dm
Normal file
471
code/modules/economy/cash_register.dm
Normal file
@@ -0,0 +1,471 @@
|
||||
/obj/machinery/cash_register
|
||||
name = "cash register"
|
||||
desc = "Swipe your ID card to make purchases electronically."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "register_idle"
|
||||
flags = NOBLUDGEON
|
||||
req_access = list(access_heads)
|
||||
anchored = 1
|
||||
|
||||
var/locked = 1
|
||||
var/cash_locked = 1
|
||||
var/cash_open = 0
|
||||
var/machine_id = ""
|
||||
var/transaction_amount = 0 // cumulatd amount of money to pay in a single purchase
|
||||
var/transaction_purpose = null // text that gets used in ATM transaction logs
|
||||
var/list/transaction_logs = list() // list of strings using html code to visualise data
|
||||
var/list/item_list = list() // entities and according
|
||||
var/list/price_list = list() // prices for each purchase
|
||||
var/manipulating = 0
|
||||
|
||||
var/cash_stored = 0
|
||||
var/obj/item/confirm_item
|
||||
var/datum/money_account/linked_account
|
||||
var/account_to_connect = null
|
||||
|
||||
|
||||
// Claim machine ID
|
||||
/obj/machinery/cash_register/New()
|
||||
machine_id = "[station_name()] RETAIL #[num_financial_terminals++]"
|
||||
cash_stored = rand(10, 70)*10
|
||||
transaction_devices += src // Global reference list to be properly set up by /proc/setup_economy()
|
||||
|
||||
|
||||
/obj/machinery/cash_register/examine(mob/user as mob)
|
||||
..(user)
|
||||
if(cash_open)
|
||||
if(cash_stored)
|
||||
user << "It holds [cash_stored] Thaler\s of money."
|
||||
else
|
||||
user << "It's completely empty."
|
||||
|
||||
|
||||
/obj/machinery/cash_register/attack_hand(mob/user as mob)
|
||||
// Don't be accessible from the wrong side of the machine
|
||||
if(get_dir(src, user) & reverse_dir[src.dir]) return
|
||||
|
||||
if(cash_open)
|
||||
if(cash_stored)
|
||||
spawn_money(cash_stored, loc, user)
|
||||
cash_stored = 0
|
||||
overlays -= "register_cash"
|
||||
else
|
||||
open_cash_box()
|
||||
// Reset if necessary
|
||||
else if(transaction_amount)
|
||||
reset_memory()
|
||||
user << "<span class='notice'>You reset the machine's memory.</span>"
|
||||
else
|
||||
custom_interface(user)
|
||||
|
||||
|
||||
/obj/machinery/cash_register/AltClick(mob/user)
|
||||
if(Adjacent(user))
|
||||
open_cash_box()
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/custom_interface(mob/user as mob)
|
||||
var/dat = "<h2>Retail Scanner<hr></h2>"
|
||||
if (locked)
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Unlock</a><br>"
|
||||
dat += "Linked account: <b>[linked_account ? linked_account.owner_name : "None"]</b><br>"
|
||||
dat += "<b>[cash_locked? "Unlock" : "Lock"] Cash Box</b> | "
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Lock</a><br>"
|
||||
dat += "Linked account: <a href='?src=\ref[src];choice=link_account'>[linked_account ? linked_account.owner_name : "None"]</a><br>"
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_cash_lock'>[cash_locked? "Unlock" : "Lock"] Cash Box</a> | "
|
||||
dat += "<a href='?src=\ref[src];choice=custom_order'>Custom Order</a><hr>"
|
||||
for(var/i=1, i<=transaction_logs.len, i++)
|
||||
dat += "[transaction_logs[i]]<br>"
|
||||
|
||||
if(transaction_logs.len)
|
||||
dat += locked ? "<br>" : "<a href='?src=\ref[src];choice=reset_log'>Reset Log</a><br>"
|
||||
dat += "<br>"
|
||||
dat += "<i>Device ID:</i> [machine_id]"
|
||||
user << browse(dat, "window=retail;size=350x500")
|
||||
|
||||
|
||||
/obj/machinery/cash_register/Topic(var/href, var/href_list)
|
||||
if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("toggle_lock")
|
||||
if(allowed(usr))
|
||||
locked = !locked
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Insufficient access.</span>"
|
||||
if("toggle_cash_lock")
|
||||
cash_locked = !cash_locked
|
||||
if("link_account")
|
||||
var/attempt_account_num = input("Enter account number", "New account number") as num
|
||||
var/attempt_pin = input("Enter PIN", "Account PIN") as num
|
||||
linked_account = attempt_account_access(attempt_account_num, attempt_pin, 1)
|
||||
if(linked_account)
|
||||
if(linked_account.suspended)
|
||||
linked_account = null
|
||||
src.visible_message("\icon[src]<span class='warning'>Account has been suspended.</span>")
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Account not found.</span>"
|
||||
if("custom_order")
|
||||
var/t_purpose = sanitize(input("Enter purpose", "New purpose") as text)
|
||||
if (!t_purpose || !Adjacent(usr)) return
|
||||
transaction_purpose = t_purpose
|
||||
item_list += t_purpose
|
||||
var/t_amount = input("Enter price", "New price") as num
|
||||
if (!t_amount || !Adjacent(usr)) return
|
||||
transaction_amount += t_amount
|
||||
price_list += t_amount
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 25)
|
||||
src.visible_message("\icon[src][transaction_purpose]: [transaction_amount] Thaler\s.")
|
||||
if("reset_log")
|
||||
transaction_logs.Cut()
|
||||
usr << "\icon[src]<span class='notice'>Transaction log reset.</span>"
|
||||
custom_interface(usr)
|
||||
|
||||
|
||||
|
||||
/obj/machinery/cash_register/attackby(obj/O as obj, user as mob)
|
||||
// Check for a method of paying (ID, PDA, e-wallet, cash, ect.)
|
||||
var/obj/item/weapon/card/id/I = O.GetID()
|
||||
if(I)
|
||||
scan_card(I, O)
|
||||
else if (istype(O, /obj/item/weapon/spacecash/ewallet))
|
||||
var/obj/item/weapon/spacecash/ewallet/E = O
|
||||
scan_wallet(E)
|
||||
else if (istype(O, /obj/item/weapon/spacecash))
|
||||
var/obj/item/weapon/spacecash/SC = O
|
||||
if(cash_open)
|
||||
user << "You neatly sort the cash into the box."
|
||||
cash_stored += SC.worth
|
||||
overlays |= "register_cash"
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.drop_from_inventory(SC)
|
||||
qdel(SC)
|
||||
else
|
||||
scan_cash(SC)
|
||||
else if(istype(O, /obj/item/weapon/card/emag))
|
||||
return ..()
|
||||
else if(istype(O, /obj/item/weapon/wrench))
|
||||
var/obj/item/weapon/wrench/W = O
|
||||
toggle_anchors(W, user)
|
||||
// Not paying: Look up price and add it to transaction_amount
|
||||
else
|
||||
scan_item_price(O)
|
||||
|
||||
|
||||
/obj/machinery/cash_register/MouseDrop_T(atom/dropping, mob/user)
|
||||
if(Adjacent(dropping) && Adjacent(user) && !user.stat)
|
||||
attackby(dropping, user)
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/confirm(obj/item/I)
|
||||
if(confirm_item == I)
|
||||
return 1
|
||||
else
|
||||
confirm_item = I
|
||||
src.visible_message("\icon[src]<b>Total price:</b> [transaction_amount] Thaler\s. Swipe again to confirm.")
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 25)
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/scan_card(obj/item/weapon/card/id/I, obj/item/ID_container)
|
||||
if (!transaction_amount)
|
||||
return
|
||||
|
||||
if(!confirm(I))
|
||||
return
|
||||
|
||||
if (!linked_account)
|
||||
usr.visible_message("\icon[src]<span class='warning'>Unable to connect to linked account.</span>")
|
||||
return
|
||||
|
||||
if (cash_open)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 25)
|
||||
usr << "\icon[src]<span class='warning'>The cash box is open.</span>"
|
||||
return
|
||||
|
||||
// Access account for transaction
|
||||
if(check_account())
|
||||
var/datum/money_account/D = get_account(I.associated_account_number)
|
||||
var/attempt_pin = ""
|
||||
if(D && D.security_level)
|
||||
attempt_pin = input("Enter PIN", "Transaction") as num
|
||||
D = null
|
||||
D = attempt_account_access(I.associated_account_number, attempt_pin, 2)
|
||||
|
||||
if(!D)
|
||||
src.visible_message("\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>")
|
||||
else
|
||||
if(D.suspended)
|
||||
src.visible_message("\icon[src]<span class='warning'>Your account has been suspended.</span>")
|
||||
else
|
||||
if(transaction_amount > D.money)
|
||||
src.visible_message("\icon[src]<span class='warning'>Not enough funds.</span>")
|
||||
else
|
||||
// Transfer the money
|
||||
D.money -= transaction_amount
|
||||
linked_account.money += transaction_amount
|
||||
|
||||
// Create log entry in client's account
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[linked_account.owner_name]"
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "([transaction_amount])"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
D.transaction_log.Add(T)
|
||||
|
||||
// Create log entry in owner's account
|
||||
T = new()
|
||||
T.target_name = D.owner_name
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "[transaction_amount]"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
linked_account.transaction_log.Add(T)
|
||||
|
||||
// Save log
|
||||
add_transaction_log(I.registered_name ? I.registered_name : "n/A", "ID Card", transaction_amount)
|
||||
|
||||
// Confirm and reset
|
||||
transaction_complete()
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/scan_wallet(obj/item/weapon/spacecash/ewallet/E)
|
||||
if (!transaction_amount)
|
||||
return
|
||||
|
||||
if(!confirm(E))
|
||||
return
|
||||
|
||||
if (cash_open)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 25)
|
||||
usr << "\icon[src]<span class='warning'>The cash box is open.</span>"
|
||||
return
|
||||
|
||||
// Access account for transaction
|
||||
if(check_account())
|
||||
if(transaction_amount > E.worth)
|
||||
src.visible_message("\icon[src]<span class='warning'>Not enough funds.</span>")
|
||||
else
|
||||
// Transfer the money
|
||||
E.worth -= transaction_amount
|
||||
linked_account.money += transaction_amount
|
||||
|
||||
// Create log entry in owner's account
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = E.owner_name
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "[transaction_amount]"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
linked_account.transaction_log.Add(T)
|
||||
|
||||
// Save log
|
||||
add_transaction_log(E.owner_name, "E-Wallet", transaction_amount)
|
||||
|
||||
// Confirm and reset
|
||||
transaction_complete()
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/scan_cash(obj/item/weapon/spacecash/SC)
|
||||
if (!transaction_amount)
|
||||
return
|
||||
|
||||
if(!confirm(SC))
|
||||
return
|
||||
|
||||
if (cash_open)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 25)
|
||||
usr << "\icon[src]<span class='warning'>The cash box is open.</span>"
|
||||
return
|
||||
|
||||
if(transaction_amount > SC.worth)
|
||||
src.visible_message("\icon[src]<span class='warning'>Not enough money.</span>")
|
||||
else
|
||||
// Insert cash into magical slot
|
||||
SC.worth -= transaction_amount
|
||||
SC.update_icon()
|
||||
if(!SC.worth)
|
||||
if(ishuman(SC.loc))
|
||||
var/mob/living/carbon/human/H = SC.loc
|
||||
H.drop_from_inventory(SC)
|
||||
qdel(SC)
|
||||
cash_stored += transaction_amount
|
||||
|
||||
// Save log
|
||||
add_transaction_log("n/A", "Cash", transaction_amount)
|
||||
|
||||
// Confirm and reset
|
||||
transaction_complete()
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/scan_item_price(obj/O)
|
||||
if(!istype(O)) return
|
||||
if (cash_open)
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 25)
|
||||
usr << "\icon[src]<span class='warning'>The cash box is open.</span>"
|
||||
return
|
||||
|
||||
// First check if item has a valid price
|
||||
var/price = O.get_item_cost()
|
||||
if(isnull(price))
|
||||
src.visible_message("\icon[src]<span class='warning'>Unable to find item in database.</span>")
|
||||
return
|
||||
// Call out item cost
|
||||
src.visible_message("\icon[src]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].")
|
||||
// Note the transaction purpose for later use
|
||||
if(transaction_purpose)
|
||||
transaction_purpose += "<br>"
|
||||
transaction_purpose += "[O]: [price] Thaler\s"
|
||||
transaction_amount += price
|
||||
item_list += "[O]"
|
||||
price_list += "[price] þ"
|
||||
// Animation and sound
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 25)
|
||||
// Reset confirmation
|
||||
confirm_item = null
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/add_transaction_log(var/c_name, var/p_method, var/t_amount)
|
||||
var/dat = {"
|
||||
<head><style>
|
||||
.tx-table {border: 1px solid black;}
|
||||
.tx-title {text-align: center; background-color:#ddddff; font-weight: bold}
|
||||
.tx-name {background-color: #bbbbee}
|
||||
.tx-data {text-align: right; background-color: #ccccff;}
|
||||
</head></style>
|
||||
<table width=300>
|
||||
<tr><td colspan="2" class="tx-title">Transaction #[transaction_logs.len+1]</td></tr>
|
||||
<tr></tr>
|
||||
<tr><td class="tx-name">Customer</td><td class="tx-data">[c_name]</td></tr>
|
||||
<tr><td class="tx-name">Pay Method</td><td class="tx-data">[p_method]</td></tr>
|
||||
<tr><td class="tx-name">Station Time</td><td class="tx-data">[worldtime2text()]</td></tr>
|
||||
</table>
|
||||
<table width=300>
|
||||
"}
|
||||
for(var/i=1, i<=item_list.len, i++)
|
||||
dat += "<tr><td class=\"tx-name\">[item_list[i]]</td><td class=\"tx-data\" width=50>[price_list[i]]</td></tr>"
|
||||
dat += "<tr></tr><tr><td colspan=\"2\" class=\"tx-name\" style='text-align: right'><b>Total Amount: [transaction_amount] þ</b></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
transaction_logs += dat
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/check_account()
|
||||
if (!linked_account)
|
||||
usr.visible_message("\icon[src]<span class='warning'>Unable to connect to linked account.</span>")
|
||||
return 0
|
||||
|
||||
if(linked_account.suspended)
|
||||
src.visible_message("\icon[src]<span class='warning'>Connected account has been suspended.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/transaction_complete()
|
||||
/// Visible confirmation
|
||||
playsound(src, 'sound/machines/chime.ogg', 25)
|
||||
src.visible_message("\icon[src]<span class='notice'>Transaction complete.</span>")
|
||||
flick("register_approve", src)
|
||||
reset_memory()
|
||||
|
||||
/obj/machinery/cash_register/proc/reset_memory()
|
||||
transaction_amount = null
|
||||
transaction_purpose = ""
|
||||
item_list.Cut()
|
||||
price_list.Cut()
|
||||
confirm_item = null
|
||||
|
||||
|
||||
/obj/machinery/cash_register/verb/open_cash_box()
|
||||
set category = "Object"
|
||||
set name = "Open Cash Box"
|
||||
set desc = "Open/closes the register's cash box."
|
||||
set src in view(1)
|
||||
|
||||
if(usr.stat) return
|
||||
|
||||
if(cash_locked)
|
||||
usr << "<span class='warning'>The cash box is locked.</span>"
|
||||
else if(cash_open)
|
||||
cash_open = 0
|
||||
overlays -= "register_approve"
|
||||
overlays -= "register_open"
|
||||
overlays -= "register_cash"
|
||||
else
|
||||
cash_open = 1
|
||||
overlays += "register_approve"
|
||||
overlays += "register_open"
|
||||
if(cash_stored)
|
||||
overlays += "register_cash"
|
||||
|
||||
|
||||
/obj/machinery/cash_register/proc/toggle_anchors(obj/item/weapon/wrench/W, mob/user)
|
||||
if(manipulating) return
|
||||
manipulating = 1
|
||||
if(!anchored)
|
||||
user.visible_message("\The [user] begins securing \the [src] to the floor.",
|
||||
"You begin securing \the [src] to the floor.")
|
||||
else
|
||||
user.visible_message("<span class='warning'>\The [user] begins unsecuring \the [src] from the floor.</span>",
|
||||
"You begin unsecuring \the [src] from the floor.")
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(!do_after(user, 20))
|
||||
manipulating = 0
|
||||
return
|
||||
if(!anchored)
|
||||
user.visible_message("<span class='notice'>\The [user] has secured \the [src] to the floor.</span>",
|
||||
"<span class='notice'>You have secured \the [src] to the floor.</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>\The [user] has unsecured \the [src] from the floor.</span>",
|
||||
"<span class='notice'>You have unsecured \the [src] from the floor.</span>")
|
||||
anchored = !anchored
|
||||
manipulating = 0
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/cash_register/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(!emagged)
|
||||
src.visible_message("<span class='danger'>The [src]'s cash box springs open as [user] swipes the card through the scanner!</span>")
|
||||
playsound(src, "sparks", 50, 1)
|
||||
req_access = list()
|
||||
emagged = 1
|
||||
locked = 0
|
||||
cash_locked = 0
|
||||
open_cash_box()
|
||||
|
||||
|
||||
//--Premades--//
|
||||
|
||||
/obj/machinery/cash_register/command
|
||||
account_to_connect = "Command"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/medical
|
||||
account_to_connect = "Medical"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/engineering
|
||||
account_to_connect = "Engineering"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/science
|
||||
account_to_connect = "Science"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/security
|
||||
account_to_connect = "Security"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/cargo
|
||||
account_to_connect = "Cargo"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/civilian
|
||||
account_to_connect = "Civilian"
|
||||
..()
|
||||
@@ -50,6 +50,7 @@
|
||||
/var/list/economic_species_modifier = list(
|
||||
/datum/species/human = 10,
|
||||
/datum/species/skrell = 12,
|
||||
/datum/species/teshari = 9, // Skrell sponsored!
|
||||
/datum/species/tajaran = 7,
|
||||
/datum/species/unathi = 7,
|
||||
/datum/species/vox = 1
|
||||
@@ -80,6 +81,7 @@ var/global/list/datum/money_account/department_accounts = list()
|
||||
var/global/num_financial_terminals = 1
|
||||
var/global/next_account_number = 0
|
||||
var/global/list/all_money_accounts = list()
|
||||
var/global/list/transaction_devices = list()
|
||||
var/global/economy_init = 0
|
||||
|
||||
/proc/setup_economy()
|
||||
@@ -101,6 +103,13 @@ var/global/economy_init = 0
|
||||
create_department_account("Vendor")
|
||||
vendor_account = department_accounts["Vendor"]
|
||||
|
||||
for(var/obj/item/device/retail_scanner/RS in transaction_devices)
|
||||
if(RS.account_to_connect)
|
||||
RS.linked_account = department_accounts[RS.account_to_connect]
|
||||
for(var/obj/machinery/cash_register/CR in transaction_devices)
|
||||
if(CR.account_to_connect)
|
||||
CR.linked_account = department_accounts[CR.account_to_connect]
|
||||
|
||||
current_date_string = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [game_year]"
|
||||
|
||||
economy_init = 1
|
||||
|
||||
811
code/modules/economy/price_list.dm
Normal file
811
code/modules/economy/price_list.dm
Normal file
@@ -0,0 +1,811 @@
|
||||
// For convenience and easier comparing and maintaining of item prices,
|
||||
// all these will be defined here and sorted in different sections.
|
||||
|
||||
// The item price in thalers. atom/movable so we can also assign a price to animals and other things.
|
||||
/atom/movable/var/price_tag = null
|
||||
|
||||
// The proc that is called when the price is being asked for. Use this to refer to another object if necessary.
|
||||
/atom/movable/proc/get_item_cost()
|
||||
return price_tag
|
||||
|
||||
|
||||
//***************//
|
||||
//---Beverages---//
|
||||
//***************//
|
||||
|
||||
/datum/reagent/var/price_tag = null
|
||||
|
||||
|
||||
// Juices, soda and similar //
|
||||
|
||||
/datum/reagent/drink/juice
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/toxin/poisonberryjuice
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/drink/milk
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/drink/soda
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/drink/doctor_delight
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/drink/nothing
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/drink/milkshake
|
||||
price_tag = 2
|
||||
|
||||
|
||||
// Beer //
|
||||
|
||||
/datum/reagent/drink/ethanol/ale
|
||||
price_tag = 2
|
||||
|
||||
/datum/reagent/drink/ethanol/beer
|
||||
price_tag = 2
|
||||
|
||||
|
||||
|
||||
// Hot Drinks //
|
||||
|
||||
/datum/reagent/drink/rewriter
|
||||
price_tag = 3
|
||||
|
||||
/datum/reagent/drink/tea
|
||||
price_tag = 3
|
||||
|
||||
/datum/reagent/drink/coffee
|
||||
price_tag = 3
|
||||
|
||||
/datum/reagent/drink/hot_coco
|
||||
price_tag = 3
|
||||
|
||||
|
||||
// Spirituous liquors //
|
||||
|
||||
/datum/reagent/drink/ethanol/irish_cream
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/absinthe
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/bluecuracao
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/deadrum
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/gin
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/coffee/kahlua
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/melonliquor
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/rum
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/tequilla
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/thirteenloko
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/vodka
|
||||
price_tag = 5
|
||||
|
||||
/datum/reagent/drink/ethanol/whiskey
|
||||
price_tag = 5
|
||||
|
||||
|
||||
// Wines //
|
||||
|
||||
/datum/reagent/drink/ethanol/wine
|
||||
price_tag = 8
|
||||
|
||||
/datum/reagent/drink/ethanol/cognac
|
||||
price_tag = 8
|
||||
|
||||
/datum/reagent/drink/ethanol/sake
|
||||
price_tag = 8
|
||||
|
||||
/datum/reagent/drink/ethanol/vermouth
|
||||
price_tag = 8
|
||||
|
||||
/datum/reagent/drink/ethanol/pwine
|
||||
price_tag = 8
|
||||
|
||||
|
||||
// Cocktails //
|
||||
|
||||
/datum/reagent/drink/ethanol/acid_spit
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/alliescocktail
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/aloe
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/amasec
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/andalusia
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/antifreeze
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/atomicbomb
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/coffee/b52
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/bahama_mama
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/barefoot
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/beepsky_smash
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/bilk
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/black_russian
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/bloody_mary
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/booger
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/brave_bull
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/changeling_sting
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/martini
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/cuba_libre
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/demonsblood
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/devilskiss
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/driestmartini
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/ginfizz
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/grog
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/erikasurprise
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/gargleblaster
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/gintonic
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/goldschlager
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/hippies_delight
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/hooch
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/iced_beer
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/irishcarbomb
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/coffee/irishcoffee
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/longislandicedtea
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/manhattan
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/manhattan_proj
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/manly_dorf
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/margarita
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/mead
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/moonshine
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/neurotoxin
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/patron
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/red_mead
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/sbiten
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/screwdrivercocktail
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/silencer
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/singulo
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/snowwhite
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/suidream
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/syndicatebomb
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/tequillasunrise
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/threemileisland
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/toxins_special
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/vodkamartini
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/vodkatonic
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/white_russian
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/whiskey_cola
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/whiskeysoda
|
||||
price_tag = 4
|
||||
|
||||
/datum/reagent/drink/ethanol/specialwhiskey
|
||||
price_tag = 4
|
||||
|
||||
|
||||
// Cocktails without alcohol //
|
||||
|
||||
/datum/reagent/drink/ethanol/bananahonk
|
||||
price_tag = 3
|
||||
|
||||
|
||||
// From the machine //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/cola
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice
|
||||
price_tag = 1
|
||||
|
||||
|
||||
//***************//
|
||||
//---Foodstuff---//
|
||||
//***************//
|
||||
|
||||
|
||||
// Snacks //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sosjerky
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/no_raisin
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chips
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
|
||||
price_tag = 5
|
||||
|
||||
|
||||
// Burger //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/brainburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/ghostburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/human/burger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheeseburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofuburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/roburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/roburgerbig
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/xenoburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/clownburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mimeburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/spellburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/jellyburger
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/superbiteburger
|
||||
price_tag = 8
|
||||
|
||||
|
||||
// Sandwiches //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sandwich
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grilledcheese
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich
|
||||
price_tag = 3
|
||||
|
||||
|
||||
// Cookies and Candies //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy_corn
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/popcorn
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candiedapple
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cracker
|
||||
price_tag = 1
|
||||
|
||||
|
||||
// Full meals //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/friedegg
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofurkey
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/omelette
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/waffles
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/eggplantparm
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/kabob
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeykabob
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofukabob
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cubancarp
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fries
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/spagetti
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/enchiladas
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishandchips
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/stew
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/boiledrice
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/ricepudding
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/pastatomato
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/spesslaw
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carrotfries
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/appletart
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/margheritaslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/
|
||||
|
||||
|
||||
// Baked Goods //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/baguette
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/twobread
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/breadslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice
|
||||
price_tag = 1
|
||||
|
||||
|
||||
// Soups //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatballsoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slimesoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/clownstears
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/nettlesoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wishsoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hotchili
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/coldchili
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tomatosoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/milosoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
|
||||
price_tag = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/beetsoup
|
||||
price_tag = 3
|
||||
|
||||
|
||||
// Pies //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/pie
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatpie
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tofupie
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/plump_pie
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/xemeatpie
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/applepie
|
||||
price_tag = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cherrypie
|
||||
price_tag = 4
|
||||
|
||||
|
||||
// Cakes //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/braincakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/limecakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/applecakeslice
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
|
||||
price_tag = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice
|
||||
price_tag = 1
|
||||
|
||||
|
||||
// Misc //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/boiledegg
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donkpocket
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sausage
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/muffin
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tossedsalad
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/validsalad
|
||||
price_tag = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dionaroast
|
||||
price_tag = 25
|
||||
|
||||
/obj/item/pizzabox
|
||||
get_item_cost()
|
||||
return get_item_cost(pizza)
|
||||
345
code/modules/economy/retail_scanner.dm
Normal file
345
code/modules/economy/retail_scanner.dm
Normal file
@@ -0,0 +1,345 @@
|
||||
/obj/item/device/retail_scanner
|
||||
name = "retail scanner"
|
||||
desc = "Swipe your ID card to make purchases electronically."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "retail_idle"
|
||||
flags = NOBLUDGEON
|
||||
req_access = list(access_heads)
|
||||
|
||||
var/locked = 1
|
||||
var/emagged = 0
|
||||
var/machine_id = ""
|
||||
var/transaction_amount = 0 // cumulatd amount of money to pay in a single purchase
|
||||
var/transaction_purpose = null // text that gets used in ATM transaction logs
|
||||
var/list/transaction_logs = list() // list of strings using html code to visualise data
|
||||
var/list/item_list = list() // entities and according
|
||||
var/list/price_list = list() // prices for each purchase
|
||||
|
||||
var/obj/item/confirm_item
|
||||
var/datum/money_account/linked_account
|
||||
var/account_to_connect = null
|
||||
|
||||
|
||||
// Claim machine ID
|
||||
/obj/item/device/retail_scanner/New()
|
||||
machine_id = "[station_name()] RETAIL #[num_financial_terminals++]"
|
||||
if(locate(/obj/structure/table) in loc)
|
||||
pixel_y = 3
|
||||
transaction_devices += src // Global reference list to be properly set up by /proc/setup_economy()
|
||||
|
||||
|
||||
// Always face the user when put on a table
|
||||
/obj/item/device/retail_scanner/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(AM, /obj/structure/table))
|
||||
src.pixel_y = 3 // Shift it up slightly to look better on table
|
||||
src.dir = get_dir(src, user)
|
||||
else
|
||||
scan_item_price(AM)
|
||||
|
||||
// Reset dir when picked back up
|
||||
/obj/item/device/retail_scanner/pickup(mob/user)
|
||||
src.dir = SOUTH
|
||||
src.pixel_y = 0
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/attack_self(mob/user as mob)
|
||||
// Reset if necessary
|
||||
if(transaction_amount)
|
||||
reset_memory()
|
||||
user << "<span class='notice'>You reset the device.</span>"
|
||||
else
|
||||
custom_interface(user)
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/AltClick(var/mob/user)
|
||||
if(Adjacent(user))
|
||||
custom_interface(user)
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/custom_interface(mob/user as mob)
|
||||
var/dat = "<h2>Retail Scanner<hr></h2>"
|
||||
if (locked)
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Unlock</a><br>"
|
||||
dat += "Linked account: <b>[linked_account ? linked_account.owner_name : "None"]</b><br>"
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Lock</a><br>"
|
||||
dat += "Linked account: <a href='?src=\ref[src];choice=link_account'>[linked_account ? linked_account.owner_name : "None"]</a><br>"
|
||||
dat += "<a href='?src=\ref[src];choice=custom_order'>Custom Order</a><hr>"
|
||||
for(var/i=1, i<=transaction_logs.len, i++)
|
||||
dat += "[transaction_logs[i]]<br>"
|
||||
|
||||
if(transaction_logs.len)
|
||||
dat += locked ? "<br>" : "<a href='?src=\ref[src];choice=reset_log'>Reset Log</a><br>"
|
||||
dat += "<br>"
|
||||
dat += "<i>Device ID:</i> [machine_id]"
|
||||
user << browse(dat, "window=retail;size=350x500")
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/Topic(var/href, var/href_list)
|
||||
if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("toggle_lock")
|
||||
if(allowed(usr))
|
||||
locked = !locked
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Insufficient access.</span>"
|
||||
if("link_account")
|
||||
var/attempt_account_num = input("Enter account number", "New account number") as num
|
||||
var/attempt_pin = input("Enter PIN", "Account PIN") as num
|
||||
linked_account = attempt_account_access(attempt_account_num, attempt_pin, 1)
|
||||
if(linked_account)
|
||||
if(linked_account.suspended)
|
||||
linked_account = null
|
||||
src.visible_message("\icon[src]<span class='warning'>Account has been suspended.</span>")
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Account not found.</span>"
|
||||
if("custom_order")
|
||||
var/t_purpose = sanitize(input("Enter purpose", "New purpose") as text)
|
||||
if (!t_purpose || !Adjacent(usr)) return
|
||||
transaction_purpose = t_purpose
|
||||
item_list += t_purpose
|
||||
var/t_amount = input("Enter price", "New price") as num
|
||||
if (!t_amount || !Adjacent(usr)) return
|
||||
transaction_amount += t_amount
|
||||
price_list += t_amount
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 25)
|
||||
src.visible_message("\icon[src][transaction_purpose]: [transaction_amount] Thaler\s.")
|
||||
if("reset_log")
|
||||
transaction_logs.Cut()
|
||||
usr << "\icon[src]<span class='notice'>Transaction log reset.</span>"
|
||||
custom_interface(usr)
|
||||
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/attackby(obj/O as obj, user as mob)
|
||||
// Check for a method of paying (ID, PDA, e-wallet, cash, ect.)
|
||||
var/obj/item/weapon/card/id/I = O.GetID()
|
||||
if(I)
|
||||
scan_card(I, O)
|
||||
else if (istype(O, /obj/item/weapon/spacecash/ewallet))
|
||||
var/obj/item/weapon/spacecash/ewallet/E = O
|
||||
scan_wallet(E)
|
||||
else if (istype(O, /obj/item/weapon/spacecash))
|
||||
usr << "<span class='warning'>This device does not accept cash.</span>"
|
||||
|
||||
else if(istype(O, /obj/item/weapon/card/emag))
|
||||
return ..()
|
||||
// Not paying: Look up price and add it to transaction_amount
|
||||
else
|
||||
scan_item_price(O)
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/confirm(var/obj/item/I)
|
||||
if(confirm_item == I)
|
||||
return 1
|
||||
else
|
||||
confirm_item = I
|
||||
src.visible_message("\icon[src]<b>Total price:</b> [transaction_amount] Thaler\s. Swipe again to confirm.")
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 25)
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/scan_card(var/obj/item/weapon/card/id/I, var/obj/item/ID_container)
|
||||
if (!transaction_amount)
|
||||
return
|
||||
|
||||
if(!confirm(I))
|
||||
return
|
||||
|
||||
if (!linked_account)
|
||||
usr.visible_message("\icon[src]<span class='warning'>Unable to connect to linked account.</span>")
|
||||
return
|
||||
|
||||
// Access account for transaction
|
||||
if(check_account())
|
||||
var/datum/money_account/D = get_account(I.associated_account_number)
|
||||
var/attempt_pin = ""
|
||||
if(D && D.security_level)
|
||||
attempt_pin = input("Enter PIN", "Transaction") as num
|
||||
D = null
|
||||
D = attempt_account_access(I.associated_account_number, attempt_pin, 2)
|
||||
|
||||
if(!D)
|
||||
src.visible_message("\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>")
|
||||
else
|
||||
if(D.suspended)
|
||||
src.visible_message("\icon[src]<span class='warning'>Your account has been suspended.</span>")
|
||||
else
|
||||
if(transaction_amount > D.money)
|
||||
src.visible_message("\icon[src]<span class='warning'>Not enough funds.</span>")
|
||||
else
|
||||
// Transfer the money
|
||||
D.money -= transaction_amount
|
||||
linked_account.money += transaction_amount
|
||||
|
||||
// Create log entry in client's account
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[linked_account.owner_name]"
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "([transaction_amount])"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
D.transaction_log.Add(T)
|
||||
|
||||
// Create log entry in owner's account
|
||||
T = new()
|
||||
T.target_name = D.owner_name
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "[transaction_amount]"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
linked_account.transaction_log.Add(T)
|
||||
|
||||
// Save log
|
||||
add_transaction_log(I.registered_name ? I.registered_name : "n/A", "ID Card", transaction_amount)
|
||||
|
||||
// Confirm and reset
|
||||
transaction_complete()
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/scan_wallet(var/obj/item/weapon/spacecash/ewallet/E)
|
||||
if (!transaction_amount)
|
||||
return
|
||||
|
||||
if(!confirm(E))
|
||||
return
|
||||
|
||||
// Access account for transaction
|
||||
if(check_account())
|
||||
if(transaction_amount > E.worth)
|
||||
src.visible_message("\icon[src]<span class='warning'>Not enough funds.</span>")
|
||||
else
|
||||
// Transfer the money
|
||||
E.worth -= transaction_amount
|
||||
linked_account.money += transaction_amount
|
||||
|
||||
// Create log entry in owner's account
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = E.owner_name
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "[transaction_amount]"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
linked_account.transaction_log.Add(T)
|
||||
|
||||
// Save log
|
||||
add_transaction_log(E.owner_name, "E-Wallet", transaction_amount)
|
||||
|
||||
// Confirm and reset
|
||||
transaction_complete()
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/scan_item_price(var/obj/O)
|
||||
if(!istype(O)) return
|
||||
// First check if item has a valid price
|
||||
var/price = O.get_item_cost()
|
||||
if(isnull(price))
|
||||
src.visible_message("\icon[src]<span class='warning'>Unable to find item in database.</span>")
|
||||
return
|
||||
// Call out item cost
|
||||
src.visible_message("\icon[src]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].")
|
||||
// Note the transaction purpose for later use
|
||||
if(transaction_purpose)
|
||||
transaction_purpose += "<br>"
|
||||
transaction_purpose += "[O]: [price] Thaler\s"
|
||||
transaction_amount += price
|
||||
item_list += "[O]"
|
||||
price_list += "[price] þ"
|
||||
// Animation and sound
|
||||
flick("retail_scan", src)
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 25)
|
||||
// Reset confirmation
|
||||
confirm_item = null
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/add_transaction_log(var/c_name, var/p_method, var/t_amount)
|
||||
var/dat = {"
|
||||
<head><style>
|
||||
.tx-table {border: 1px solid black;}
|
||||
.tx-title {text-align: center; background-color:#ddddff; font-weight: bold}
|
||||
.tx-name {background-color: #bbbbee}
|
||||
.tx-data {text-align: right; background-color: #ccccff;}
|
||||
</head></style>
|
||||
<table width=300>
|
||||
<tr><td colspan="2" class="tx-title">Transaction #[transaction_logs.len+1]</td></tr>
|
||||
<tr></tr>
|
||||
<tr><td class="tx-name">Customer</td><td class="tx-data">[c_name]</td></tr>
|
||||
<tr><td class="tx-name">Pay Method</td><td class="tx-data">[p_method]</td></tr>
|
||||
<tr><td class="tx-name">Station Time</td><td class="tx-data">[worldtime2text()]</td></tr>
|
||||
</table>
|
||||
<table width=300>
|
||||
"}
|
||||
for(var/i=1, i<=item_list.len, i++)
|
||||
dat += "<tr><td class=\"tx-name\">[item_list[i]]</td><td class=\"tx-data\" width=50>[price_list[i]]</td></tr>"
|
||||
dat += "<tr></tr><tr><td colspan=\"2\" class=\"tx-name\" style='text-align: right'><b>Total Amount: [transaction_amount] þ</b></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
transaction_logs += dat
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/check_account()
|
||||
if (!linked_account)
|
||||
usr.visible_message("\icon[src]<span class='warning'>Unable to connect to linked account.</span>")
|
||||
return 0
|
||||
|
||||
if(linked_account.suspended)
|
||||
src.visible_message("\icon[src]<span class='warning'>Connected account has been suspended.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/proc/transaction_complete()
|
||||
/// Visible confirmation
|
||||
playsound(src, 'sound/machines/chime.ogg', 25)
|
||||
src.visible_message("\icon[src]<span class='notice'>Transaction complete.</span>")
|
||||
flick("retail_approve", src)
|
||||
reset_memory()
|
||||
|
||||
/obj/item/device/retail_scanner/proc/reset_memory()
|
||||
transaction_amount = null
|
||||
transaction_purpose = ""
|
||||
item_list.Cut()
|
||||
price_list.Cut()
|
||||
confirm_item = null
|
||||
|
||||
|
||||
/obj/item/device/retail_scanner/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(!emagged)
|
||||
user << "<span class='danger'>You stealthily swipe the cryptographic sequencer through \the [src].</span>"
|
||||
playsound(src, "sparks", 50, 1)
|
||||
req_access = list()
|
||||
emagged = 1
|
||||
|
||||
//--Premades--//
|
||||
|
||||
/obj/item/device/retail_scanner/command
|
||||
account_to_connect = "Command"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/medical
|
||||
account_to_connect = "Medical"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/engineering
|
||||
account_to_connect = "Engineering"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/science
|
||||
account_to_connect = "Science"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/security
|
||||
account_to_connect = "Security"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/cargo
|
||||
account_to_connect = "Cargo"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/civilian
|
||||
account_to_connect = "Civilian"
|
||||
..()
|
||||
@@ -1,44 +0,0 @@
|
||||
/datum/event/disease_outbreak
|
||||
announceWhen = 15
|
||||
|
||||
|
||||
/datum/event/disease_outbreak/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
|
||||
/datum/event/disease_outbreak/setup()
|
||||
announceWhen = rand(15, 30)
|
||||
|
||||
/datum/event/disease_outbreak/start()
|
||||
var/virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis)
|
||||
|
||||
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
|
||||
var/foundAlready = 0 // don't infect someone that already has the virus
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
continue
|
||||
if(isNotStationLevel(T.z))
|
||||
continue
|
||||
for(var/datum/disease/D in H.viruses)
|
||||
foundAlready = 1
|
||||
if(H.stat == 2 || foundAlready)
|
||||
continue
|
||||
|
||||
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
|
||||
if((!H.dna) || (H.sdisabilities & BLIND)) //A blindness disease would be the worst.
|
||||
continue
|
||||
var/datum/disease/dnaspread/D = new
|
||||
D.strain_data["name"] = H.real_name
|
||||
D.strain_data["UI"] = H.dna.UI.Copy()
|
||||
D.strain_data["SE"] = H.dna.SE.Copy()
|
||||
D.carrier = 1
|
||||
D.holder = H
|
||||
D.affected_mob = H
|
||||
H.viruses += D
|
||||
break
|
||||
else
|
||||
var/datum/disease/D = new virus_type
|
||||
D.carrier = 1
|
||||
D.holder = H
|
||||
D.affected_mob = H
|
||||
H.viruses += D
|
||||
break
|
||||
@@ -1,13 +1,4 @@
|
||||
/datum/event/spontaneous_appendicitis/start()
|
||||
for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) if(H.client && H.stat != DEAD)
|
||||
var/foundAlready = 0 //don't infect someone that already has the virus
|
||||
for(var/datum/disease/D in H.viruses)
|
||||
foundAlready = 1
|
||||
if(H.stat == 2 || foundAlready)
|
||||
continue
|
||||
|
||||
var/datum/disease/D = new /datum/disease/appendicitis
|
||||
D.holder = H
|
||||
D.affected_mob = H
|
||||
H.viruses += D
|
||||
break
|
||||
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
|
||||
if(H.client && H.appendicitis())
|
||||
break
|
||||
|
||||
@@ -49,10 +49,30 @@
|
||||
if(flags & STOPPRESSUREDAMAGE)
|
||||
armor_stats += "Wearing this will protect you from the vacuum of space. \n"
|
||||
|
||||
if(flags & THICKMATERIAL)
|
||||
armor_stats += "The material is exceptionally thick. \n"
|
||||
|
||||
if(max_heat_protection_temperature == FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE)
|
||||
armor_stats += "It provides very good protection against fire and heat. \n"
|
||||
|
||||
if(min_cold_protection_temperature == SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE)
|
||||
armor_stats += "It provides very good protection against very cold temperatures. \n"
|
||||
|
||||
var/list/covers = list()
|
||||
var/list/slots = list()
|
||||
|
||||
for(var/name in string_part_flags)
|
||||
if(body_parts_covered & string_part_flags[name])
|
||||
covers += name
|
||||
|
||||
for(var/name in string_slot_flags)
|
||||
if(slot_flags & string_slot_flags[name])
|
||||
slots += name
|
||||
|
||||
if(covers.len)
|
||||
armor_stats += "It covers the [english_list(covers)]. \n"
|
||||
|
||||
if(slots.len)
|
||||
armor_stats += "It can be worn on your [english_list(slots)]. \n"
|
||||
|
||||
return armor_stats
|
||||
@@ -39,4 +39,26 @@
|
||||
You can also inject common medicines directly into their bloodstream.\
|
||||
<br>\
|
||||
Right-click the cell and click 'Eject Occupant' to remove them. You can enter the cell yourself by right clicking and selecting 'Enter Sleeper'. \
|
||||
Note that you cannot control the sleeper while inside of it."
|
||||
Note that you cannot control the sleeper while inside of it."
|
||||
|
||||
/obj/item/bodybag/cryobag
|
||||
description_info = "This stasis bag will preserve the occupant, stopping most forms of harm from occuring, such as from oxygen \
|
||||
deprivation, irradiation, shock, and chemicals inside the occupant, at least until the bag is opened again.<br>\
|
||||
<br>\
|
||||
Stasis bags can only be used once, and are rather costly, so use them well. They are ideal for situations where someone may die \
|
||||
before being able to bring them back to safety, or if they are in a hostile enviroment, such as in vacuum or in a phoron leak, as \
|
||||
the bag will protect the occupant from most outside enviromental hazards. If you open a bag by mistake, closing the bag with no \
|
||||
occupant will not use up the bag, and you can pick it back up.<br>\
|
||||
<br>\
|
||||
You can use a health analyzer to scan the occupant's vitals without opening the bag by clicking the occupied bag with the analyzer."
|
||||
|
||||
/obj/structure/closet/body_bag/cryobag
|
||||
description_info = "This stasis bag will preserve the occupant, stopping most forms of harm from occuring, such as from oxygen \
|
||||
deprivation, irradiation, shock, and chemicals inside the occupant, at least until the bag is opened again.<br>\
|
||||
<br>\
|
||||
Stasis bags can only be used once, and are rather costly, so use them well. They are ideal for situations where someone may die \
|
||||
before being able to bring them back to safety, or if they are in a hostile enviroment, such as in vacuum or in a phoron leak, as \
|
||||
the bag will protect the occupant from most outside enviromental hazards. If you open a bag by mistake, closing the bag with no \
|
||||
occupant will not use up the bag, and you can pick it back up.<br>\
|
||||
<br>\
|
||||
You can use a health analyzer to scan the occupant's vitals without opening the bag by clicking the occupied bag with the analyzer."
|
||||
32
code/modules/games/cah.dm
Normal file
32
code/modules/games/cah.dm
Normal file
@@ -0,0 +1,32 @@
|
||||
// This is a parody of Cards Against Humanity (https://en.wikipedia.org/wiki/Cards_Against_Humanity)
|
||||
// which is licensed under CC BY-NC-SA 2.0, the full text of which can be found at the following URL:
|
||||
// https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode
|
||||
|
||||
/obj/item/weapon/deck/cah
|
||||
name = "\improper CAG deck (white)"
|
||||
desc = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the white deck."
|
||||
icon_state = "cag_white"
|
||||
var/blanks = 5
|
||||
|
||||
/obj/item/weapon/deck/cah/black
|
||||
name = "\improper CAG deck (black)"
|
||||
desc = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the black deck."
|
||||
icon_state = "cag_black"
|
||||
blanks = 0
|
||||
|
||||
/obj/item/weapon/deck/cah/New()
|
||||
..()
|
||||
var/datum/playingcard/P
|
||||
for(var/cardtext in card_text_list)
|
||||
P = new()
|
||||
P.name = "[cardtext]"
|
||||
P.card_icon = "[icon_state]_card"
|
||||
P.back_icon = "[icon_state]_card_back"
|
||||
cards += P
|
||||
if(!blanks)
|
||||
return
|
||||
for(var/x=1 to blanks)
|
||||
P = new()
|
||||
P.name = "Blank Card"
|
||||
P.card_icon = "[icon_state]_card_back"
|
||||
P.back_icon = "[icon_state]_card_back"
|
||||
37
code/modules/games/cah_black_cards.dm
Normal file
37
code/modules/games/cah_black_cards.dm
Normal file
@@ -0,0 +1,37 @@
|
||||
// Black cards.
|
||||
/obj/item/weapon/deck/cah/black/card_text_list = list(
|
||||
"Why am I itchy?",
|
||||
"Today, Security shot ____.",
|
||||
"The Chaplain this shift is worshiping _____.",
|
||||
"Cargo ordered a crate full of _____.",
|
||||
"An ERT was called due to ______.",
|
||||
"Alert! The Captain has armed themselves with _____.",
|
||||
"Current Laws: ________ is your master.",
|
||||
"Current Laws: ________ is the enemy.",
|
||||
"_____ vented the entirety of Cargo.",
|
||||
"Today, science found an anomaly that made people ____ and ____.",
|
||||
"There was a rap battle between ____ and ____.",
|
||||
"Caution, ______ have been detected in collision course with the station.",
|
||||
"Today's kitchen menu includes _______.",
|
||||
"What did the mercenaries want when they attacked the station?",
|
||||
"I think the Captain is insane. He just demanded ______ in his office.",
|
||||
"Fuckin' scientists, they just turned Misc. Research into _______ .",
|
||||
"What's my fetish?",
|
||||
"Hello, _______ here with _______",
|
||||
"No one else was at _______, they wouldn't understand the ______",
|
||||
"Why am I shivering?",
|
||||
"What is this world coming to? First, ________, now _______",
|
||||
"NanoTrasen's labor union decided to use _______ to raise employee morale.",
|
||||
"The Chemist's drug of choice is ______",
|
||||
"It is common practice for _______ to ______ on Moghes.",
|
||||
"Mercurial Colonies are _____.",
|
||||
"The Skrell are celebrating _____ today.",
|
||||
"_____ is/are why I'm afraid of the maintenance tunnels.",
|
||||
"_____ used ____ to create their newest invention, _____!",
|
||||
"Scientists are not allowed to make Gatling _____.",
|
||||
"It's not a party until the ____ arrive.",
|
||||
"No matter how many Tajara you have, _____ is never acceptable.",
|
||||
"No, the AI's first law is NOT to serve _____.",
|
||||
"The robots are not disposal bins for your _____.",
|
||||
"You can never have too many _____ on shift.",
|
||||
)
|
||||
75
code/modules/games/cah_white_cards.dm
Normal file
75
code/modules/games/cah_white_cards.dm
Normal file
@@ -0,0 +1,75 @@
|
||||
// White cards.
|
||||
/obj/item/weapon/deck/cah/var/list/card_text_list = list(
|
||||
"Those motherfucking carp",
|
||||
"Having sex in the maintenance tunnels",
|
||||
"Space 'Nam",
|
||||
"Space lesbians",
|
||||
"The Gardener getting SUPER high",
|
||||
"The Captain thinking they're a badass",
|
||||
"Being in a cult",
|
||||
"Racially biased lawsets",
|
||||
"An Unathi who WON'T STOP FIGHTING",
|
||||
"Tajara fetishists",
|
||||
"Bald thirty-year-olds",
|
||||
"A Chief Engineer who can't setup the engine",
|
||||
"Being sucked out into space",
|
||||
"Officer Beepsky",
|
||||
"Engineering",
|
||||
"The grey tide.",
|
||||
"The Research Director",
|
||||
"Fucking synths",
|
||||
"Man-eating purple pod plants",
|
||||
"Chemical sprayers filled with lube",
|
||||
"Librarians",
|
||||
"Squids",
|
||||
"Cats",
|
||||
"Lizards",
|
||||
"Apes",
|
||||
"Trees",
|
||||
"Supermatter undergarments",
|
||||
"Bluespace",
|
||||
"Five hundred rabid spiders",
|
||||
"Five hundred rabid diona nymphs",
|
||||
"Cable ties",
|
||||
"Rampant vending machines",
|
||||
"Positronic drink coasters",
|
||||
"Kitchen utensil anomalies",
|
||||
"Locked lockers",
|
||||
"Energy spatulas",
|
||||
"Flashbang gauntlets",
|
||||
"Carp",
|
||||
"Space whales",
|
||||
"Blu-sharks",
|
||||
"Fax machines",
|
||||
"Exquisite Pens",
|
||||
"Dr. Maxman's male enhancements",
|
||||
"Gyrating slimes",
|
||||
"Forehead-mounted laser weaponry",
|
||||
"Pelvis-mounted laser weaponry",
|
||||
"Cardboard cutouts",
|
||||
"An obscene amount of rubber ducks",
|
||||
"Brain cakes",
|
||||
"A drone's game of life.",
|
||||
"Anomaly suits",
|
||||
"A gardener smoking reishi",
|
||||
"Military-grade baseball bats",
|
||||
"Barricading the bar",
|
||||
"An irritatingly chipper robot",
|
||||
"Androids hanging out in the bar drinking beer",
|
||||
"Gear harnesses",
|
||||
"A seventeen-year-old Captain",
|
||||
"The throbbing erection that the HoS gets at the thought of shooting something",
|
||||
"Trying to stab someone and hugging them instead",
|
||||
"Waking up naked in the maintenance tunnels",
|
||||
"Horrible cloning accidents",
|
||||
"Licking the supermatter due to a dare",
|
||||
"A Quartermaster who WON'T STOP ordering guns",
|
||||
"Teaching a synthetic the Birds and the Bees",
|
||||
"Unnecessary surgery",
|
||||
"My addiction to spiders",
|
||||
"wetskrell.nt",
|
||||
"DOCTOR MAXMAN!",
|
||||
"A group of Skrell getting their squish on",
|
||||
"Enough soporific to put the entire station down",
|
||||
"Delicious Vietnamese cuisine"
|
||||
)
|
||||
@@ -4,6 +4,7 @@
|
||||
icon_state = "card_pack_cardemon"
|
||||
|
||||
/obj/item/weapon/pack/cardemon/New()
|
||||
..()
|
||||
var/datum/playingcard/P
|
||||
var/i
|
||||
for(i=0; i<5; i++)
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
|
||||
/obj/item/weapon/deck/cards/New()
|
||||
..()
|
||||
|
||||
var/datum/playingcard/P
|
||||
for(var/suit in list("spades","clubs","diamonds","hearts"))
|
||||
|
||||
@@ -44,7 +43,6 @@
|
||||
P.back_icon = "card_back"
|
||||
cards += P
|
||||
|
||||
|
||||
for(var/i = 0,i<2,i++)
|
||||
P = new()
|
||||
P.name = "joker"
|
||||
@@ -135,7 +133,19 @@
|
||||
H.throw_at(get_step(target,target.dir),10,1,H)
|
||||
|
||||
/obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob)
|
||||
if(istype(O,/obj/item/weapon/hand))
|
||||
if(cards.len == 1 && istype(O, /obj/item/weapon/pen))
|
||||
var/datum/playingcard/P = cards[1]
|
||||
if(P.name != "Blank Card")
|
||||
user << "You cannot write on that card."
|
||||
return
|
||||
var/cardtext = sanitize(input(user, "What do you wish to write on the card?", "Card Editing") as text|null, MAX_BOOK_MESSAGE_LEN)
|
||||
if(!cardtext)
|
||||
return
|
||||
P.name = cardtext
|
||||
// SNOWFLAKE FOR CAG, REMOVE IF OTHER CARDS ARE ADDED THAT USE THIS.
|
||||
P.card_icon = "cag_white_card"
|
||||
update_icon()
|
||||
else if(istype(O,/obj/item/weapon/hand))
|
||||
var/obj/item/weapon/hand/H = O
|
||||
for(var/datum/playingcard/P in cards)
|
||||
H.cards += P
|
||||
@@ -214,7 +224,7 @@
|
||||
if(!discarding || !to_discard[discarding] || !usr || !src) return
|
||||
|
||||
var/datum/playingcard/card = to_discard[discarding]
|
||||
qdel(to_discard)
|
||||
to_discard.Cut()
|
||||
|
||||
var/obj/item/weapon/hand/H = new(src.loc)
|
||||
H.cards += card
|
||||
@@ -238,7 +248,7 @@
|
||||
if((!concealed || src.loc == user) && cards.len)
|
||||
user << "It contains: "
|
||||
for(var/datum/playingcard/P in cards)
|
||||
user << "The [P.name]."
|
||||
user << "\The [P.name]."
|
||||
|
||||
/obj/item/weapon/hand/update_icon(var/direction = 0)
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
icon_state = "card_pack_spaceball"
|
||||
|
||||
/obj/item/weapon/pack/spaceball/New()
|
||||
..()
|
||||
var/datum/playingcard/P
|
||||
var/i
|
||||
var/year = 554 + text2num(time2text(world.timeofday, "YYYY"))
|
||||
@@ -20,4 +21,4 @@
|
||||
P.card_icon = "spaceball_standard"
|
||||
P.back_icon = "card_back_spaceball"
|
||||
|
||||
cards += P
|
||||
cards += P
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
P.back_icon = "card_back_tarot"
|
||||
cards += P
|
||||
for(var/suit in list("wands","pentacles","cups","swords"))
|
||||
|
||||
|
||||
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten","page","knight","queen","king"))
|
||||
P = new()
|
||||
P.name = "[number] of [suit]"
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
bee_count = 20
|
||||
B.empty()
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] puts bees and larvae from \the [src] into \the [I].</span>", "<span class='notice'>You put puts bees and larvae from \the [src] into \the [I].</span>")
|
||||
user.visible_message("<span class='notice'>[user] puts bees and larvae from \the [src] into \the [I].</span>", "<span class='notice'>You put bees and larvae from \the [src] into \the [I].</span>")
|
||||
bee_count /= 2
|
||||
B.fill()
|
||||
update_icon()
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
return
|
||||
|
||||
name = "[seed.seed_name]"
|
||||
trash = seed.get_trash_type()
|
||||
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -69,6 +69,9 @@
|
||||
/datum/seed/proc/get_trait(var/trait)
|
||||
return traits["[trait]"]
|
||||
|
||||
/datum/seed/proc/get_trash_type()
|
||||
return trash_type
|
||||
|
||||
/datum/seed/proc/set_trait(var/trait,var/nval,var/ubound,var/lbound, var/degrade)
|
||||
if(!isnull(degrade)) nval *= degrade
|
||||
if(!isnull(ubound)) nval = min(nval,ubound)
|
||||
@@ -153,7 +156,6 @@
|
||||
|
||||
if(!body_coverage)
|
||||
return
|
||||
|
||||
target << "<span class='danger'>You are stung by \the [fruit]!</span>"
|
||||
for(var/rid in chems)
|
||||
var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/5))
|
||||
@@ -178,9 +180,20 @@
|
||||
for(var/mob/living/M in T.contents)
|
||||
if(!M.reagents)
|
||||
continue
|
||||
for(var/chem in chems)
|
||||
var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3))
|
||||
M.reagents.add_reagent(chem,injecting)
|
||||
var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
for(var/obj/item/clothing/clothes in M)
|
||||
if(M.l_hand == clothes || M.r_hand == clothes)
|
||||
continue
|
||||
body_coverage &= ~(clothes.body_parts_covered)
|
||||
if(!body_coverage)
|
||||
continue
|
||||
var/datum/reagents/R = M.reagents
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
R = H.touching
|
||||
if(istype(R))
|
||||
for(var/chem in chems)
|
||||
R.add_reagent(chem,min(5,max(1,get_trait(TRAIT_POTENCY)/3)))
|
||||
|
||||
//Applies an effect to a target atom.
|
||||
/datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target, var/force_explode)
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
)
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/AltClick()
|
||||
if(mechanical && !usr.stat && !usr.lying && Adjacent(usr))
|
||||
if(mechanical && !usr.incapacitated() && Adjacent(usr))
|
||||
close_lid(usr)
|
||||
return 1
|
||||
return ..()
|
||||
@@ -217,7 +217,7 @@
|
||||
if(reagents.total_volume <= 0)
|
||||
return
|
||||
|
||||
reagents.trans_to(temp_chem_holder, min(reagents.total_volume,rand(1,3)))
|
||||
reagents.trans_to_obj(temp_chem_holder, min(reagents.total_volume,rand(1,3)))
|
||||
|
||||
for(var/datum/reagent/R in temp_chem_holder.reagents.reagent_list)
|
||||
|
||||
@@ -357,12 +357,15 @@
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(labelled)
|
||||
usr << "You remove the label."
|
||||
labelled = null
|
||||
update_icon()
|
||||
else
|
||||
usr << "There is no label to remove."
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
if(labelled)
|
||||
usr << "You remove the label."
|
||||
labelled = null
|
||||
update_icon()
|
||||
else
|
||||
usr << "There is no label to remove."
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/verb/setlight()
|
||||
@@ -370,10 +373,14 @@
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
var/new_light = input("Specify a light level.") as null|anything in list(0,1,2,3,4,5,6,7,8,9,10)
|
||||
if(new_light)
|
||||
tray_light = new_light
|
||||
usr << "You set the tray to a light level of [tray_light] lumens."
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
var/new_light = input("Specify a light level.") as null|anything in list(0,1,2,3,4,5,6,7,8,9,10)
|
||||
if(new_light)
|
||||
tray_light = new_light
|
||||
usr << "You set the tray to a light level of [tray_light] lumens."
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/check_level_sanity()
|
||||
//Make sure various values are sane.
|
||||
@@ -560,11 +567,10 @@
|
||||
|
||||
..()
|
||||
|
||||
if(!seed)
|
||||
if(seed)
|
||||
usr << "<span class='notice'>[seed.display_name] are growing here.</span>"
|
||||
else
|
||||
usr << "[src] is empty."
|
||||
return
|
||||
|
||||
usr << "<span class='notice'>[seed.display_name] are growing here.</span>"
|
||||
|
||||
if(!Adjacent(usr))
|
||||
return
|
||||
@@ -572,29 +578,30 @@
|
||||
usr << "Water: [round(waterlevel,0.1)]/100"
|
||||
usr << "Nutrient: [round(nutrilevel,0.1)]/10"
|
||||
|
||||
if(weedlevel >= 5)
|
||||
usr << "\The [src] is <span class='danger'>infested with weeds</span>!"
|
||||
if(pestlevel >= 5)
|
||||
usr << "\The [src] is <span class='danger'>infested with tiny worms</span>!"
|
||||
|
||||
if(dead)
|
||||
usr << "<span class='danger'>The plant is dead.</span>"
|
||||
else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2))
|
||||
usr << "The plant looks <span class='danger'>unhealthy</span>."
|
||||
if(seed)
|
||||
if(weedlevel >= 5)
|
||||
usr << "\The [src] is <span class='danger'>infested with weeds</span>!"
|
||||
if(pestlevel >= 5)
|
||||
usr << "\The [src] is <span class='danger'>infested with tiny worms</span>!"
|
||||
if(dead)
|
||||
usr << "<span class='danger'>The plant is dead.</span>"
|
||||
else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2))
|
||||
usr << "The plant looks <span class='danger'>unhealthy</span>."
|
||||
|
||||
if(mechanical)
|
||||
var/turf/T = loc
|
||||
var/datum/gas_mixture/environment
|
||||
|
||||
if(closed_system && (connected_port || holding))
|
||||
var/environment_type
|
||||
if(closed_system && (connected_port || holding) && air_contents)
|
||||
environment = air_contents
|
||||
|
||||
if(!environment)
|
||||
environment_type = "connected"
|
||||
else
|
||||
if(istype(T))
|
||||
environment = T.return_air()
|
||||
|
||||
if(!environment) //We're in a crate or nullspace, bail out.
|
||||
return
|
||||
if(!environment) //We're in a crate or nullspace, bail out.
|
||||
return
|
||||
environment_type = "surrounding"
|
||||
|
||||
var/light_string
|
||||
if(closed_system && mechanical)
|
||||
@@ -608,18 +615,20 @@
|
||||
light_available = 5
|
||||
light_string = "a light level of [light_available] lumens"
|
||||
|
||||
usr << "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K."
|
||||
usr << "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K at [environment.return_pressure()] kPa in the [environment_type] environment"
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb()
|
||||
set name = "Toggle Tray Lid"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
close_lid(usr)
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/close_lid(var/mob/living/user)
|
||||
if(!user || user.stat || user.restrained())
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
close_lid(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/close_lid(var/mob/living/user)
|
||||
closed_system = !closed_system
|
||||
user << "You [closed_system ? "close" : "open"] the tray's lid."
|
||||
update_icon()
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
dat += "<br>This sample contains: "
|
||||
for(var/datum/reagent/R in grown_reagents.reagent_list)
|
||||
dat += "<br>- [R.id], [grown_reagents.get_reagent_amount(R.id)] unit(s)"
|
||||
dat += "<br>- [R.name], [grown_reagents.get_reagent_amount(R.id)] unit(s)"
|
||||
|
||||
dat += "<h2>Other Data</h2>"
|
||||
|
||||
@@ -175,8 +175,12 @@
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_PARASITE))
|
||||
dat += "<br>It is capable of parisitizing and gaining sustenance from tray weeds."
|
||||
|
||||
/*
|
||||
There's currently no code that actually changes the temperature of the local environment, so let's not show it until there is.
|
||||
if(grown_seed.get_trait(TRAIT_ALTER_TEMP))
|
||||
dat += "<br>It will periodically alter the local temperature by [grown_seed.get_trait(TRAIT_ALTER_TEMP)] degrees Kelvin."
|
||||
*/
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_BIOLUM))
|
||||
dat += "<br>It is [grown_seed.get_trait(TRAIT_BIOLUM_COLOUR) ? "<font color='[grown_seed.get_trait(TRAIT_BIOLUM_COLOUR)]'>bio-luminescent</font>" : "bio-luminescent"]."
|
||||
@@ -197,18 +201,24 @@
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_TELEPORTING))
|
||||
dat += "<br>The fruit is temporal/spatially unstable."
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_EXUDE_GASSES))
|
||||
dat += "<br>It will release gas into the environment."
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_CONSUME_GASSES))
|
||||
dat += "<br>It will remove gas from the environment."
|
||||
if(grown_seed.exude_gasses && grown_seed.exude_gasses.len)
|
||||
for(var/gas in grown_seed.exude_gasses)
|
||||
var/amount = ""
|
||||
if (grown_seed.exude_gasses[gas] > 7)
|
||||
amount = "large amounts of "
|
||||
else if (grown_seed.exude_gasses[gas] < 5)
|
||||
amount = "small amounts of "
|
||||
dat += "<br>It will release [amount][gas_data.name[gas]] into the environment."
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_EXUDE_GASSES))
|
||||
dat += "<br>It will release gas into the environment."
|
||||
|
||||
if(grown_seed.get_trait(TRAIT_CONSUME_GASSES))
|
||||
dat += "<br>It will remove gas from the environment."
|
||||
if(grown_seed.consume_gasses && grown_seed.consume_gasses.len)
|
||||
for(var/gas in grown_seed.consume_gasses)
|
||||
var/amount = ""
|
||||
if (grown_seed.consume_gasses[gas] > 7)
|
||||
amount = "large amounts of "
|
||||
else if (grown_seed.consume_gasses[gas] < 5)
|
||||
amount = "small amounts of "
|
||||
dat += "<br>It will consume [amount][gas_data.name[gas]] from the environment."
|
||||
|
||||
if(dat)
|
||||
last_data = dat
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
if(integrity>=100)
|
||||
if(integrity>=50)
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
@@ -571,7 +571,7 @@ var/list/name_to_material
|
||||
name = "wood"
|
||||
stack_type = /obj/item/stack/material/wood
|
||||
icon_colour = "#824B28"
|
||||
integrity = 25
|
||||
integrity = 50
|
||||
icon_base = "solid"
|
||||
explosion_resistance = 2
|
||||
shard_type = SHARD_SPLINTER
|
||||
|
||||
@@ -151,6 +151,8 @@ Works together with spawning an observer, noted above.
|
||||
ghost.can_reenter_corpse = can_reenter_corpse
|
||||
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
|
||||
ghost.key = key
|
||||
if(ghost.client)
|
||||
ghost.client.time_died_as_mouse = ghost.timeofdeath
|
||||
if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
|
||||
return ghost
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
animation.master = src
|
||||
|
||||
flick(anim, animation)
|
||||
if(do_gibs) gibs(loc, viruses, dna)
|
||||
if(do_gibs) gibs(loc, dna)
|
||||
|
||||
spawn(15)
|
||||
if(animation) qdel(animation)
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
//m_type == 1 --> visual.
|
||||
//m_type == 2 --> audible
|
||||
/mob/proc/custom_emote(var/m_type=1,var/message = null)
|
||||
|
||||
if(stat || !use_me && usr == src)
|
||||
usr << "You are unable to emote."
|
||||
src << "You are unable to emote."
|
||||
return
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
|
||||
@@ -65,14 +65,9 @@
|
||||
if(istype(usr, /mob/living/silicon/ai))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
if(AI.eyeobj && AI.client.eye == AI.eyeobj)
|
||||
AI.eyeobj.setLoc(src)
|
||||
|
||||
// Return to the Core.
|
||||
/mob/living/silicon/ai/proc/core()
|
||||
set category = "AI Commands"
|
||||
set name = "AI Core"
|
||||
|
||||
view_core()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
AI.eyeobj.setLoc(T)
|
||||
|
||||
/mob/living/silicon/ai/proc/view_core()
|
||||
camera = null
|
||||
@@ -88,7 +83,7 @@
|
||||
src.eyeobj.setLoc(src)
|
||||
|
||||
/mob/living/silicon/ai/proc/toggle_acceleration()
|
||||
set category = "AI Commands"
|
||||
set category = "AI Settings"
|
||||
set name = "Toggle Camera Acceleration"
|
||||
|
||||
if(!eyeobj)
|
||||
|
||||
@@ -10,7 +10,7 @@ var/list/holder_mob_icon_cache = list()
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Seromi" = 'icons/mob/species/seromi/head.dmi'
|
||||
"Teshari" = 'icons/mob/species/seromi/head.dmi'
|
||||
)
|
||||
|
||||
origin_tech = null
|
||||
@@ -98,8 +98,9 @@ var/list/holder_mob_icon_cache = list()
|
||||
|
||||
/mob/living/MouseDrop(var/atom/over_object)
|
||||
var/mob/living/carbon/human/H = over_object
|
||||
if(holder_type && istype(H) && !H.lying && !issmall(H) && Adjacent(H))
|
||||
get_scooped(H, (usr == src))
|
||||
if(holder_type && istype(H) && !H.lying && Adjacent(H) && (src.a_intent == I_HELP && H.a_intent == I_HELP))
|
||||
if(!issmall(H) || !istype(src, /mob/living/carbon/human))
|
||||
get_scooped(H, (usr == src))
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -103,64 +103,34 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success.
|
||||
/mob/proc/put_in_l_hand(var/obj/item/W)
|
||||
if(lying) return 0
|
||||
if(!istype(W)) return 0
|
||||
if(!l_hand)
|
||||
W.forceMove(src) //TODO: move to equipped?
|
||||
l_hand = W
|
||||
W.layer = 20 //TODO: move to equipped?
|
||||
// l_hand.screen_loc = ui_lhand
|
||||
W.equipped(src,slot_l_hand)
|
||||
if(client) client.screen |= W
|
||||
if(pulling == W) stop_pulling()
|
||||
update_inv_l_hand()
|
||||
return 1
|
||||
return 0
|
||||
if(lying || !istype(W))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
//Puts the item into your r_hand if possible and calls all necessary triggers/updates. returns 1 on success.
|
||||
/mob/proc/put_in_r_hand(var/obj/item/W)
|
||||
if(lying) return 0
|
||||
if(!istype(W)) return 0
|
||||
if(!r_hand)
|
||||
W.forceMove(src)
|
||||
r_hand = W
|
||||
W.layer = 20
|
||||
// r_hand.screen_loc = ui_rhand
|
||||
W.equipped(src,slot_r_hand)
|
||||
if(client) client.screen |= W
|
||||
if(pulling == W) stop_pulling()
|
||||
update_inv_r_hand()
|
||||
return 1
|
||||
return 0
|
||||
if(lying || !istype(W))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
//Puts the item into our active hand if possible. returns 1 on success.
|
||||
/mob/proc/put_in_active_hand(var/obj/item/W)
|
||||
if(hand) return put_in_l_hand(W)
|
||||
else return put_in_r_hand(W)
|
||||
return 0 // Moved to human procs because only they need to use hands.
|
||||
|
||||
//Puts the item into our inactive hand if possible. returns 1 on success.
|
||||
/mob/proc/put_in_inactive_hand(var/obj/item/W)
|
||||
if(hand) return put_in_r_hand(W)
|
||||
else return put_in_l_hand(W)
|
||||
return 0 // As above.
|
||||
|
||||
//Puts the item our active hand if possible. Failing that it tries our inactive hand. Returns 1 on success.
|
||||
//If both fail it drops it on the floor and returns 0.
|
||||
//This is probably the main one you need to know :)
|
||||
/mob/proc/put_in_hands(var/obj/item/W)
|
||||
if(!W) return 0
|
||||
if(put_in_active_hand(W))
|
||||
update_inv_l_hand()
|
||||
update_inv_r_hand()
|
||||
return 1
|
||||
else if(put_in_inactive_hand(W))
|
||||
update_inv_l_hand()
|
||||
update_inv_r_hand()
|
||||
return 1
|
||||
else
|
||||
W.forceMove(get_turf(src))
|
||||
W.layer = initial(W.layer)
|
||||
W.dropped()
|
||||
if(!W)
|
||||
return 0
|
||||
W.forceMove(get_turf(src))
|
||||
W.layer = initial(W.layer)
|
||||
W.dropped()
|
||||
return 0
|
||||
|
||||
// Removes an item from inventory and places it in the target atom.
|
||||
// If canremove or other conditions need to be checked then use unEquip instead.
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/datum/language/seromi
|
||||
name = "Schechi"
|
||||
desc = "A trilling language spoken by the diminutive Seromi."
|
||||
desc = "A trilling language spoken by the diminutive Teshari."
|
||||
speech_verb = "chirps"
|
||||
ask_verb = "chirrups"
|
||||
exclaim_verb = "trills"
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
var/blood = 1
|
||||
var/list/target_types = list()
|
||||
|
||||
var/maximum_search_range = 7
|
||||
|
||||
/mob/living/bot/cleanbot/New()
|
||||
..()
|
||||
get_targets()
|
||||
@@ -36,6 +38,25 @@
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS)
|
||||
|
||||
/mob/living/bot/cleanbot/proc/handle_target()
|
||||
if(loc == target.loc)
|
||||
if(!cleaning)
|
||||
UnarmedAttack(target)
|
||||
return 1
|
||||
if(!path.len)
|
||||
// spawn(0)
|
||||
path = AStar(loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard)
|
||||
if(!path)
|
||||
custom_emote(2, "[src] can't reach the target and is giving up.")
|
||||
target = null
|
||||
path = list()
|
||||
return
|
||||
if(path.len)
|
||||
step_to(src, path[1])
|
||||
path -= path[1]
|
||||
return 1
|
||||
return
|
||||
|
||||
/mob/living/bot/cleanbot/Life()
|
||||
..()
|
||||
|
||||
@@ -46,7 +67,7 @@
|
||||
return
|
||||
if(cleaning)
|
||||
return
|
||||
|
||||
|
||||
if(!screwloose && !oddbutton && prob(5))
|
||||
custom_emote(2, "makes an excited beeping booping sound!")
|
||||
|
||||
@@ -62,65 +83,64 @@
|
||||
spawn(600)
|
||||
ignorelist -= gib
|
||||
|
||||
if(!target) // Find a target
|
||||
for(var/obj/effect/decal/cleanable/D in view(7, src))
|
||||
if(D in ignorelist)
|
||||
continue
|
||||
for(var/T in target_types)
|
||||
if(istype(D, T))
|
||||
target = D
|
||||
patrol_path = list()
|
||||
// Find a target
|
||||
|
||||
if(pulledby) // Don't wiggle if someone pulls you
|
||||
patrol_path = list()
|
||||
return
|
||||
|
||||
if(!target) // No targets in range
|
||||
if(!should_patrol)
|
||||
return
|
||||
var/found_spot
|
||||
search_loop:
|
||||
for(var/i=0, i <= maximum_search_range, i++)
|
||||
for(var/obj/effect/decal/cleanable/D in view(i, src))
|
||||
if(D in ignorelist)
|
||||
continue
|
||||
for(var/T in target_types)
|
||||
if(istype(D, T))
|
||||
patrol_path = list()
|
||||
target = D
|
||||
found_spot = handle_target()
|
||||
if (found_spot)
|
||||
break search_loop
|
||||
else
|
||||
target = null
|
||||
continue // no need to check the other types
|
||||
|
||||
if(!patrol_path || !patrol_path.len)
|
||||
if(!signal_sent || signal_sent > world.time + 200) // Waited enough or didn't send yet
|
||||
var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq)
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
closest_dist = 9999
|
||||
next_dest = null
|
||||
next_dest_loc = null
|
||||
|
||||
var/datum/signal/signal = new()
|
||||
signal.source = src
|
||||
signal.transmission_method = 1
|
||||
signal.data = list("findbeakon" = "patrol")
|
||||
frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS)
|
||||
signal_sent = world.time
|
||||
else
|
||||
if(next_dest)
|
||||
next_dest_loc = listener.memorized[next_dest]
|
||||
if(next_dest_loc)
|
||||
patrol_path = AStar(loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id = botcard, exclude = null)
|
||||
signal_sent = 0
|
||||
else
|
||||
if(pulledby) // Don't wiggle if someone pulls you
|
||||
patrol_path = list()
|
||||
if(!found_spot && !target) // No targets in range
|
||||
if(!patrol_path || !patrol_path.len)
|
||||
if(!signal_sent || signal_sent > world.time + 200) // Waited enough or didn't send yet
|
||||
var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq)
|
||||
if(!frequency)
|
||||
return
|
||||
if(patrol_path[1] == loc)
|
||||
patrol_path -= patrol_path[1]
|
||||
var/moved = step_towards(src, patrol_path[1])
|
||||
if(moved)
|
||||
patrol_path -= patrol_path[1]
|
||||
if(target)
|
||||
if(loc == target.loc)
|
||||
if(!cleaning)
|
||||
UnarmedAttack(target)
|
||||
|
||||
closest_dist = 9999
|
||||
next_dest = null
|
||||
next_dest_loc = null
|
||||
|
||||
var/datum/signal/signal = new()
|
||||
signal.source = src
|
||||
signal.transmission_method = 1
|
||||
signal.data = list("findbeakon" = "patrol")
|
||||
frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS)
|
||||
signal_sent = world.time
|
||||
else
|
||||
if(next_dest)
|
||||
next_dest_loc = listener.memorized[next_dest]
|
||||
if(next_dest_loc)
|
||||
patrol_path = AStar(loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id = botcard, exclude = null)
|
||||
signal_sent = 0
|
||||
else
|
||||
if(pulledby) // Don't wiggle if someone pulls you
|
||||
patrol_path = list()
|
||||
return
|
||||
if(!path.len)
|
||||
spawn(0)
|
||||
path = AStar(loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard)
|
||||
if(!path)
|
||||
path = list()
|
||||
return
|
||||
if(path.len)
|
||||
step_to(src, path[1])
|
||||
path -= path[1]
|
||||
return
|
||||
if(patrol_path[1] == loc)
|
||||
patrol_path -= patrol_path[1]
|
||||
var/moved = step_towards(src, patrol_path[1])
|
||||
if(moved)
|
||||
patrol_path -= patrol_path[1]
|
||||
|
||||
|
||||
|
||||
/mob/living/bot/cleanbot/UnarmedAttack(var/obj/effect/decal/cleanable/D, var/proximity)
|
||||
if(!..())
|
||||
@@ -133,7 +153,7 @@
|
||||
return
|
||||
|
||||
cleaning = 1
|
||||
custom_emote(2, "begins to clean up the [D]")
|
||||
custom_emote(2, "begins to clean up \the [D]")
|
||||
update_icons()
|
||||
var/cleantime = istype(D, /obj/effect/decal/cleanable/dirt) ? 10 : 50
|
||||
if(do_after(src, cleantime))
|
||||
@@ -143,6 +163,8 @@
|
||||
if(!D)
|
||||
return
|
||||
qdel(D)
|
||||
if(D == target)
|
||||
target = null
|
||||
cleaning = 0
|
||||
update_icons()
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(prob(50))
|
||||
new /obj/item/clothing/head/helmet(Tsec)
|
||||
else
|
||||
new /obj/item/clothing/suit/armor/vest(Tsec)
|
||||
new /obj/item/clothing/suit/storage/vest(Tsec)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
|
||||
@@ -287,10 +287,6 @@
|
||||
if((H.getToxLoss() >= heal_threshold) && (!H.reagents.has_reagent(treatment_tox)))
|
||||
return treatment_tox
|
||||
|
||||
for(var/datum/disease/D in H.viruses)
|
||||
if (!H.reagents.has_reagent(treatment_virus))
|
||||
return treatment_virus // STOP DISEASE FOREVER
|
||||
|
||||
/* Construction */
|
||||
|
||||
/obj/item/weapon/storage/firstaid/attackby(var/obj/item/robot_parts/S, mob/user as mob)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
ingested = new/datum/reagents/metabolism(1000, src, CHEM_INGEST)
|
||||
touching = new/datum/reagents/metabolism(1000, src, CHEM_TOUCH)
|
||||
reagents = bloodstr
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/carbon/Life()
|
||||
@@ -36,9 +35,9 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
if(src.nutrition && src.stat != 2)
|
||||
src.nutrition -= HUNGER_FACTOR/10
|
||||
src.nutrition -= DEFAULT_HUNGER_FACTOR/10
|
||||
if(src.m_intent == "run")
|
||||
src.nutrition -= HUNGER_FACTOR/10
|
||||
src.nutrition -= DEFAULT_HUNGER_FACTOR/10
|
||||
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
|
||||
src.bodytemperature += 2
|
||||
|
||||
@@ -93,18 +92,6 @@
|
||||
H << "\red You can't use your [temp.name]"
|
||||
return
|
||||
|
||||
for(var/datum/disease/D in viruses)
|
||||
|
||||
if(D.spread_by_touch())
|
||||
|
||||
M.contract_disease(D, 0, 1, CONTACT_HANDS)
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
|
||||
if(D.spread_by_touch())
|
||||
|
||||
contract_disease(D, 0, 1, CONTACT_HANDS)
|
||||
|
||||
return
|
||||
|
||||
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
|
||||
@@ -197,7 +184,7 @@
|
||||
if(40 to INFINITY)
|
||||
status += "peeling away"
|
||||
|
||||
if(org.status & ORGAN_DESTROYED)
|
||||
if(org.is_stump())
|
||||
status += "MISSING"
|
||||
if(org.status & ORGAN_MUTATED)
|
||||
status += "weirdly shapen"
|
||||
|
||||
@@ -1,53 +1,42 @@
|
||||
mob/living/carbon/verb/give(var/mob/living/carbon/target in view(1)-usr)
|
||||
/mob/living/carbon/human/verb/give(var/mob/living/target in view(1)-usr)
|
||||
set category = "IC"
|
||||
set name = "Give"
|
||||
if(!istype(target) || target.stat == 2 || usr.stat == 2|| target.client == null)
|
||||
|
||||
// TODO : Change to incapacitated() on merge.
|
||||
if(usr.stat || usr.lying || usr.resting || usr.buckled)
|
||||
return
|
||||
var/obj/item/I
|
||||
if(!usr.hand && usr.r_hand == null)
|
||||
usr << "<span class='warning'>You don't have anything in your right hand to give to [target.name]</span>"
|
||||
if(!istype(target) || target.stat || target.lying || target.resting || target.buckled || target.client == null)
|
||||
return
|
||||
if(usr.hand && usr.l_hand == null)
|
||||
usr << "<span class='warning'>You don't have anything in your left hand to give to [target.name]</span>"
|
||||
return
|
||||
if(usr.hand)
|
||||
I = usr.l_hand
|
||||
else if(!usr.hand)
|
||||
I = usr.r_hand
|
||||
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if(!I)
|
||||
I = usr.get_inactive_hand()
|
||||
if(!I)
|
||||
usr << "<span class='warning'>You don't have anything in your hands to give to \the [target].</span>"
|
||||
return
|
||||
if(target.r_hand == null || target.l_hand == null)
|
||||
switch(alert(target,"[usr] wants to give you \a [I]?",,"Yes","No"))
|
||||
if("Yes")
|
||||
if(!I)
|
||||
return
|
||||
if(!Adjacent(usr))
|
||||
usr << "<span class='warning'>You need to stay in reaching distance while giving an object.</span>"
|
||||
target << "<span class='warning'>[usr.name] moved too far away.</span>"
|
||||
return
|
||||
if((usr.hand && usr.l_hand != I) || (!usr.hand && usr.r_hand != I))
|
||||
usr << "<span class='warning'>You need to keep the item in your active hand.</span>"
|
||||
target << "<span class='warning'>[usr.name] seem to have given up on giving \the [I.name] to you.</span>"
|
||||
return
|
||||
if(target.r_hand != null && target.l_hand != null)
|
||||
target << "<span class='warning'>Your hands are full.</span>"
|
||||
usr << "<span class='warning'>Their hands are full.</span>"
|
||||
return
|
||||
else
|
||||
usr.drop_item()
|
||||
if(target.r_hand == null)
|
||||
target.r_hand = I
|
||||
else
|
||||
target.l_hand = I
|
||||
I.loc = target
|
||||
I.layer = 20
|
||||
I.add_fingerprint(target)
|
||||
target.update_inv_l_hand()
|
||||
target.update_inv_r_hand()
|
||||
usr.update_inv_l_hand()
|
||||
usr.update_inv_r_hand()
|
||||
target.visible_message("<span class='notice'>[usr.name] handed \the [I.name] to [target.name].</span>")
|
||||
if("No")
|
||||
target.visible_message("<span class='warning'>[usr.name] tried to hand [I.name] to [target.name] but [target.name] didn't want it.</span>")
|
||||
else
|
||||
usr << "<span class='warning'>[target.name]'s hands are full.</span>"
|
||||
|
||||
if(alert(target,"[usr] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No")
|
||||
target.visible_message("<span class='notice'>\The [usr] tried to hand \the [I] to \the [target], \
|
||||
but \the [target] didn't want it.</span>")
|
||||
return
|
||||
|
||||
if(!I) return
|
||||
|
||||
if(!Adjacent(target))
|
||||
usr << "<span class='warning'>You need to stay in reaching distance while giving an object.</span>"
|
||||
target << "<span class='warning'>\The [usr] moved too far away.</span>"
|
||||
return
|
||||
|
||||
if(I.loc != usr || (usr.l_hand != I && usr.r_hand != I))
|
||||
usr << "<span class='warning'>You need to keep the item in your hands.</span>"
|
||||
target << "<span class='warning'>\The [usr] seems to have given up on passing \the [I] to you.</span>"
|
||||
return
|
||||
|
||||
if(target.r_hand != null && target.l_hand != null)
|
||||
target << "<span class='warning'>Your hands are full.</span>"
|
||||
usr << "<span class='warning'>Their hands are full.</span>"
|
||||
return
|
||||
|
||||
if(usr.unEquip(I))
|
||||
target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
|
||||
target.visible_message("<span class='notice'>\The [usr] handed \the [I] to \the [target].</span>")
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(1,3), round(30/I.w_class))
|
||||
|
||||
..(species.gibbed_anim)
|
||||
gibs(loc, viruses, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src))
|
||||
gibs(loc, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src))
|
||||
|
||||
/mob/living/carbon/human/dust()
|
||||
if(species)
|
||||
|
||||
@@ -243,9 +243,6 @@
|
||||
|
||||
msg += "</span>"
|
||||
|
||||
if(getBrainLoss() >= 60)
|
||||
msg += "[T.He] [T.has] a stupid expression on [T.his] face.\n"
|
||||
|
||||
var/ssd_msg = species.get_ssd(src)
|
||||
if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD)
|
||||
if(!key)
|
||||
@@ -254,14 +251,12 @@
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>\n"
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_destroyed = list()
|
||||
var/list/is_bleeding = list()
|
||||
|
||||
for(var/organ_tag in species.has_limbs)
|
||||
|
||||
var/list/organ_data = species.has_limbs[organ_tag]
|
||||
var/organ_descriptor = organ_data["descriptor"]
|
||||
is_destroyed["organ_descriptor"] = 1
|
||||
|
||||
var/obj/item/organ/external/E = organs_by_name[organ_tag]
|
||||
if(!E)
|
||||
@@ -269,13 +264,11 @@
|
||||
else if(E.is_stump())
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span>\n"
|
||||
else
|
||||
is_destroyed["organ_descriptor"] = 0
|
||||
continue
|
||||
|
||||
for(var/obj/item/organ/external/temp in organs)
|
||||
if(temp)
|
||||
if(temp.status & ORGAN_DESTROYED)
|
||||
is_destroyed["[temp.name]"] = 1
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [temp.name].</b></span>\n"
|
||||
continue
|
||||
if(!is_synth && temp.status & ORGAN_ROBOT)
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
b_loss = b_loss/1.5
|
||||
f_loss = f_loss/1.5
|
||||
|
||||
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
if (!get_ear_protection() >= 2)
|
||||
ear_damage += 30
|
||||
ear_deaf += 120
|
||||
if (prob(70) && !shielded)
|
||||
@@ -126,7 +126,7 @@
|
||||
b_loss += 30
|
||||
if (prob(getarmor(null, "bomb")))
|
||||
b_loss = b_loss/2
|
||||
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
if (!get_ear_protection() >= 2)
|
||||
ear_damage += 15
|
||||
ear_deaf += 60
|
||||
if (prob(50) && !shielded)
|
||||
@@ -305,7 +305,7 @@
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name()
|
||||
var/obj/item/organ/external/head = get_organ(BP_HEAD)
|
||||
if(!head || head.disfigured || (head.status & ORGAN_DESTROYED) || !real_name || (HUSK in mutations) ) //disfigured. use id-name if possible
|
||||
if(!head || head.disfigured || head.is_stump() || !real_name || (HUSK in mutations) ) //disfigured. use id-name if possible
|
||||
return "Unknown"
|
||||
return real_name
|
||||
|
||||
@@ -895,7 +895,7 @@
|
||||
/mob/living/carbon/human/revive()
|
||||
|
||||
if(should_have_organ(O_HEART))
|
||||
vessel.add_reagent("blood",560-vessel.total_volume)
|
||||
vessel.add_reagent("blood",species.blood_volume-vessel.total_volume)
|
||||
fixblood()
|
||||
|
||||
species.create_organs(src) // Reset our organs/limbs.
|
||||
@@ -909,9 +909,6 @@
|
||||
H.brainmob.mind.transfer_to(src)
|
||||
qdel(H)
|
||||
|
||||
for (var/datum/disease/virus in viruses)
|
||||
virus.cure()
|
||||
|
||||
for (var/ID in virus2)
|
||||
var/datum/disease2/disease/V = virus2[ID]
|
||||
V.cure(src)
|
||||
@@ -1116,7 +1113,10 @@
|
||||
|
||||
spawn(0)
|
||||
regenerate_icons()
|
||||
vessel.add_reagent("blood",560-vessel.total_volume)
|
||||
if(vessel.total_volume < species.blood_volume)
|
||||
vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
|
||||
else if(vessel.total_volume > species.blood_volume)
|
||||
vessel.remove_reagent("blood", vessel.total_volume - species.blood_volume)
|
||||
fixblood()
|
||||
|
||||
// Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them.
|
||||
@@ -1360,6 +1360,48 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Puts the item into our active hand if possible. returns 1 on success.
|
||||
/mob/living/carbon/human/put_in_active_hand(var/obj/item/W)
|
||||
return (hand ? put_in_l_hand(W) : put_in_r_hand(W))
|
||||
|
||||
//Puts the item into our inactive hand if possible. returns 1 on success.
|
||||
/mob/living/carbon/human/put_in_inactive_hand(var/obj/item/W)
|
||||
return (hand ? put_in_r_hand(W) : put_in_l_hand(W))
|
||||
|
||||
/mob/living/carbon/human/put_in_hands(var/obj/item/W)
|
||||
if(!W)
|
||||
return 0
|
||||
if(put_in_active_hand(W))
|
||||
update_inv_l_hand()
|
||||
update_inv_r_hand()
|
||||
return 1
|
||||
else if(put_in_inactive_hand(W))
|
||||
update_inv_l_hand()
|
||||
update_inv_r_hand()
|
||||
return 1
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/put_in_l_hand(var/obj/item/W)
|
||||
if(!..() || l_hand)
|
||||
return 0
|
||||
W.forceMove(src)
|
||||
l_hand = W
|
||||
W.equipped(src,slot_l_hand)
|
||||
W.add_fingerprint(src)
|
||||
update_inv_l_hand()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/put_in_r_hand(var/obj/item/W)
|
||||
if(!..() || r_hand)
|
||||
return 0
|
||||
W.forceMove(src)
|
||||
r_hand = W
|
||||
W.equipped(src,slot_r_hand)
|
||||
W.add_fingerprint(src)
|
||||
update_inv_r_hand()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/can_stand_overridden()
|
||||
if(wearing_rig && wearing_rig.ai_can_move_suit(check_for_ai = 1))
|
||||
// Actually missing a leg will screw you up. Everything else can be compensated for.
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(!temp || !temp.is_usable())
|
||||
H << "\red You can't use your hand."
|
||||
return
|
||||
|
||||
break_cloak()
|
||||
..()
|
||||
|
||||
// Should this all be in Touch()?
|
||||
@@ -138,7 +138,7 @@
|
||||
var/hit_zone = H.zone_sel.selecting
|
||||
var/obj/item/organ/external/affecting = get_organ(hit_zone)
|
||||
|
||||
if(!affecting || affecting.is_stump() || (affecting.status & ORGAN_DESTROYED))
|
||||
if(!affecting || affecting.is_stump())
|
||||
M << "<span class='danger'>They are missing that limb!</span>"
|
||||
return 1
|
||||
|
||||
|
||||
@@ -318,10 +318,10 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
|
||||
This function restores the subjects blood to max.
|
||||
*/
|
||||
/mob/living/carbon/human/proc/restore_blood()
|
||||
if(should_have_organ(O_HEART))
|
||||
var/blood_volume = vessel.get_reagent_amount("blood")
|
||||
vessel.add_reagent("blood",560.0-blood_volume)
|
||||
|
||||
if(!should_have_organ(O_HEART))
|
||||
return
|
||||
if(vessel.total_volume < species.blood_volume)
|
||||
vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
|
||||
|
||||
/*
|
||||
This function restores all organs.
|
||||
|
||||
@@ -139,13 +139,6 @@ emp_act
|
||||
if(.) return
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/emp_act(severity)
|
||||
for(var/obj/O in src)
|
||||
if(!O) continue
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
|
||||
|
||||
//Returns 1 if the attack hit, 0 if it missed.
|
||||
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
|
||||
if(!I || !user) return 0
|
||||
@@ -160,7 +153,7 @@ emp_act
|
||||
|
||||
var/obj/item/organ/external/affecting = get_organ(target_zone)
|
||||
|
||||
if (!affecting || (affecting.status & ORGAN_DESTROYED) || affecting.is_stump())
|
||||
if (!affecting || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
return 0
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user