@@ -475,6 +475,8 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/storage/bag/plants/portaseeder,
|
||||
/obj/item/seeds/cotton,
|
||||
/obj/item/seeds/cotton,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bk" = (
|
||||
|
||||
@@ -2,43 +2,45 @@
|
||||
|
||||
|
||||
#define EMAGGED (1<<0)
|
||||
#define IN_USE (1<<1) // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
|
||||
#define CAN_BE_HIT (1<<2) //can this be bludgeoned by items?
|
||||
#define BEING_SHOCKED (1<<3) // Whether this thing is currently (already) being shocked by a tesla
|
||||
#define DANGEROUS_POSSESSION (1<<4) //Admin possession yes/no
|
||||
#define ON_BLUEPRINTS (1<<5) //Are we visible on the station blueprints at roundstart?
|
||||
#define UNIQUE_RENAME (1<<6) // can you customize the description/name of the thing?
|
||||
#define IN_USE (1<<1) //If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
|
||||
#define CAN_BE_HIT (1<<2) //can this be bludgeoned by items?
|
||||
#define BEING_SHOCKED (1<<3) //Whether this thing is currently (already) being shocked by a tesla
|
||||
#define DANGEROUS_POSSESSION (1<<4) //Admin possession yes/no
|
||||
#define ON_BLUEPRINTS (1<<5) //Are we visible on the station blueprints at roundstart?
|
||||
#define UNIQUE_RENAME (1<<6) //can you customize the description/name of the thing?
|
||||
#define USES_TGUI (1<<7) //put on things that use tgui on ui_interact instead of custom/old UI.
|
||||
#define FROZEN (1<<8)
|
||||
#define SHOVABLE_ONTO (1<<9) //called on turf.shove_act() to consider whether an object should have a niche effect (defined in their own shove_act()) when someone is pushed onto it, or do a sanity CanPass() check.
|
||||
#define SHOVABLE_ONTO (1<<9) //called on turf.shove_act() to consider whether an object should have a niche effect (defined in their own shove_act()) when someone is pushed onto it, or do a sanity CanPass() check.
|
||||
|
||||
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
|
||||
|
||||
// Flags for the item_flags var on /obj/item
|
||||
|
||||
#define BEING_REMOVED (1<<0)
|
||||
#define IN_INVENTORY (1<<1) //is this item equipped into an inventory slot or hand of a mob? used for tooltips
|
||||
#define FORCE_STRING_OVERRIDE (1<<2) // used for tooltips
|
||||
#define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use.
|
||||
#define IN_INVENTORY (1<<1) //is this item equipped into an inventory slot or hand of a mob? used for tooltips
|
||||
#define FORCE_STRING_OVERRIDE (1<<2) //used for tooltips
|
||||
#define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use.
|
||||
#define SLOWS_WHILE_IN_HAND (1<<4)
|
||||
#define NO_MAT_REDEMPTION (1<<5) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
|
||||
#define DROPDEL (1<<6) // When dropped, it calls qdel on itself
|
||||
#define NOBLUDGEON (1<<7) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
||||
#define ABSTRACT (1<<8) // for all things that are technically items but used for various different stuff
|
||||
#define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
||||
#define NO_MAT_REDEMPTION (1<<5) //Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
|
||||
#define DROPDEL (1<<6) //When dropped, it calls qdel on itself
|
||||
#define NOBLUDGEON (1<<7) //when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
||||
#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff
|
||||
#define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
||||
#define SURGICAL_TOOL (1<<10) //Tool commonly used for surgery: won't attack targets in an active surgical operation on help intent (in case of mistakes)
|
||||
#define NO_UNIFORM_REQUIRED (1<<11) // Can be worn on certain slots (currently belt and id) that would otherwise require an uniform.
|
||||
#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform.
|
||||
|
||||
// Flags for the clothing_flags var on /obj/item/clothing
|
||||
|
||||
#define LAVAPROTECT (1<<0)
|
||||
#define LAVAPROTECT (1<<0)
|
||||
#define STOPSPRESSUREDAMAGE (1<<1) //SUIT and HEAD items which stop pressure damage. To stop you taking all pressure damage you must have both a suit and head item with this flag.
|
||||
#define BLOCK_GAS_SMOKE_EFFECT (1<<2) // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY!
|
||||
#define ALLOWINTERNALS (1<<3) // mask allows internals
|
||||
#define NOSLIP (1<<4) //prevents from slipping on wet floors, in space etc
|
||||
#define THICKMATERIAL (1<<5) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
|
||||
#define VOICEBOX_TOGGLABLE (1<<6) // The voicebox in this clothing can be toggled.
|
||||
#define VOICEBOX_DISABLED (1<<7) // The voicebox is currently turned off.
|
||||
#define BLOCK_GAS_SMOKE_EFFECT (1<<2) //blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY!
|
||||
#define ALLOWINTERNALS (1<<3) //mask allows internals
|
||||
#define NOSLIP (1<<4) //prevents from slipping on wet floors, in space etc
|
||||
#define THICKMATERIAL (1<<5) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
|
||||
#define VOICEBOX_TOGGLABLE (1<<6) //The voicebox in this clothing can be toggled.
|
||||
#define VOICEBOX_DISABLED (1<<7) //The voicebox is currently turned off.
|
||||
#define SNUG_FIT (1<<8) //Prevents knock-off from things like hat-throwing.
|
||||
#define ANTI_TINFOIL_MANEUVER (1<<9) //Hats with negative effects when worn (i.e the tinfoil hat).
|
||||
|
||||
// Flags for the organ_flags var on /obj/item/organ
|
||||
|
||||
@@ -47,4 +49,4 @@
|
||||
#define ORGAN_FAILING (1<<2) //Failing organs perform damaging effects until replaced or fixed
|
||||
#define ORGAN_EXTERNAL (1<<3) //Was this organ implanted/inserted/etc, if true will not be removed during species change.
|
||||
#define ORGAN_VITAL (1<<4) //Currently only the brain
|
||||
#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
|
||||
#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
|
||||
@@ -142,6 +142,8 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"THICKMATERIAL" = THICKMATERIAL,
|
||||
"VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE,
|
||||
"VOICEBOX_DISABLED" = VOICEBOX_DISABLED,
|
||||
"SNUG_FIT" = SNUG_FIT,
|
||||
"ANTI_TINFOIL_MANEUVER" = ANTI_TINFOIL_MANEUVER,
|
||||
),
|
||||
"tesla_flags" = list(
|
||||
"TESLA_MOB_DAMAGE" = TESLA_MOB_DAMAGE,
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
if (!target.loc)
|
||||
continue
|
||||
|
||||
if(!(SEND_SIGNAL(target.loc, COMSIG_ATOM_CANREACH, next) & COMPONENT_BLOCK_REACH))
|
||||
if(!(SEND_SIGNAL(target.loc, COMSIG_ATOM_CANREACH, next) & COMPONENT_BLOCK_REACH) && target.loc.canReachInto(src, ultimate_target, next, view_only, tool))
|
||||
next += target.loc
|
||||
|
||||
checking = next
|
||||
@@ -215,6 +215,10 @@
|
||||
/mob/living/DirectAccess(atom/target)
|
||||
return ..() + GetAllContents()
|
||||
|
||||
//This is called reach into but it's called on the deepest things first so uh, make sure to account for that!
|
||||
/atom/proc/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
|
||||
return TRUE
|
||||
|
||||
/atom/proc/AllowClick()
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ SUBSYSTEM_DEF(throwing)
|
||||
var/atom/movable/thrownthing
|
||||
var/atom/target
|
||||
var/turf/target_turf
|
||||
var/target_zone
|
||||
var/init_dir
|
||||
var/maxrange
|
||||
var/speed
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
RegisterSignal(parent, COMSIG_ITEM_PICKUP, .proc/signal_on_pickup)
|
||||
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_POST_THROW, .proc/close_all)
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/check_views)
|
||||
|
||||
RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/on_alt_click)
|
||||
RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, .proc/mousedrop_onto)
|
||||
@@ -386,6 +387,11 @@
|
||||
close(M)
|
||||
. = TRUE //returns TRUE if any mobs actually got a close(M) call
|
||||
|
||||
/datum/component/storage/proc/check_views()
|
||||
for(var/mob/M in can_see_contents())
|
||||
if(!isobserver(M) && !M.CanReach(src, view_only = TRUE))
|
||||
close(M)
|
||||
|
||||
/datum/component/storage/proc/emp_act(datum/source, severity)
|
||||
if(emp_shielded)
|
||||
return
|
||||
|
||||
@@ -518,6 +518,8 @@
|
||||
TT.thrower = thrower
|
||||
TT.diagonals_first = diagonals_first
|
||||
TT.callback = callback
|
||||
if(!QDELETED(thrower))
|
||||
TT.target_zone = thrower.zone_selected
|
||||
|
||||
var/dist_x = abs(target.x - src.x)
|
||||
var/dist_y = abs(target.y - src.y)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
network += lowertext(i)
|
||||
|
||||
/obj/machinery/computer/security/check_eye(mob/user)
|
||||
if( (stat & (NOPOWER|BROKEN)) || user.incapacitated() || user.eye_blind )
|
||||
if(CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
|
||||
user.unset_machine()
|
||||
return
|
||||
if(!(user in watchers))
|
||||
@@ -30,14 +30,6 @@
|
||||
if(!C.can_use())
|
||||
user.unset_machine()
|
||||
return
|
||||
if(!issilicon(user))
|
||||
if(!Adjacent(user))
|
||||
user.unset_machine()
|
||||
return
|
||||
else if(iscyborg(user))
|
||||
var/list/viewing = viewers(src)
|
||||
if(!viewing.Find(user))
|
||||
user.unset_machine()
|
||||
|
||||
/obj/machinery/computer/security/on_unset_machine(mob/user)
|
||||
watchers.Remove(user)
|
||||
@@ -97,36 +89,22 @@
|
||||
user.unset_machine()
|
||||
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
|
||||
return
|
||||
if(C)
|
||||
var/camera_fail = 0
|
||||
if(!C.can_use() || user.machine != src || user.eye_blind || user.incapacitated())
|
||||
camera_fail = 1
|
||||
else if(iscyborg(user))
|
||||
var/list/viewing = viewers(src)
|
||||
if(!viewing.Find(user))
|
||||
camera_fail = 1
|
||||
else if(!issilicon(user))
|
||||
if(!Adjacent(user))
|
||||
camera_fail = 1
|
||||
|
||||
if(camera_fail)
|
||||
user.unset_machine()
|
||||
return 0
|
||||
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
|
||||
if(isAI(user))
|
||||
var/mob/living/silicon/ai/A = user
|
||||
A.eyeobj.setLoc(get_turf(C))
|
||||
A.client.eye = A.eyeobj
|
||||
else
|
||||
user.reset_perspective(C)
|
||||
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
|
||||
user.clear_fullscreen("flash", 5)
|
||||
watchers[user] = C
|
||||
use_power(50)
|
||||
addtimer(CALLBACK(src, .proc/use_camera_console, user), 5)
|
||||
else
|
||||
if(!C || !C.can_use() || CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
|
||||
user.unset_machine()
|
||||
return FALSE
|
||||
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
|
||||
if(isAI(user))
|
||||
var/mob/living/silicon/ai/A = user
|
||||
A.eyeobj.setLoc(get_turf(C))
|
||||
A.client.eye = A.eyeobj
|
||||
else
|
||||
user.reset_perspective(C)
|
||||
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
|
||||
user.clear_fullscreen("flash", 5)
|
||||
watchers[user] = C
|
||||
use_power(50)
|
||||
addtimer(CALLBACK(src, .proc/use_camera_console, user), 5)
|
||||
|
||||
//returns the list of cameras accessible from this computer
|
||||
/obj/machinery/computer/security/proc/get_available_cameras()
|
||||
|
||||
@@ -90,6 +90,7 @@
|
||||
say("Processing hub calibration to target...")
|
||||
|
||||
calibrating = 1
|
||||
power_station.update_icon()
|
||||
spawn(50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration
|
||||
calibrating = 0
|
||||
if(check_hub_connection())
|
||||
@@ -97,6 +98,7 @@
|
||||
say("Calibration complete.")
|
||||
else
|
||||
say("Error: Unable to detect hub.")
|
||||
power_station.update_icon()
|
||||
updateDialog()
|
||||
|
||||
updateDialog()
|
||||
|
||||
@@ -74,7 +74,8 @@
|
||||
to_chat(user, "<span class='notice'>You start adding [I] to [src]...</span>")
|
||||
if(do_after(user, 50, target=src))
|
||||
W.use(5)
|
||||
new /turf/closed/wall/mineral/wood/nonmetal(get_turf(src))
|
||||
var/turf/T = get_turf(src)
|
||||
T.PlaceOnTop(/turf/closed/wall/mineral/wood/nonmetal)
|
||||
qdel(src)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -209,5 +209,7 @@
|
||||
icon_state = "controller-o"
|
||||
else if(stat & (BROKEN|NOPOWER))
|
||||
icon_state = "controller-p"
|
||||
else if(teleporter_console && teleporter_console.calibrating)
|
||||
icon_state = "controller-c"
|
||||
else
|
||||
icon_state = "controller"
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
|
||||
var/prox_check = TRUE //If the emag requires you to be in range
|
||||
var/uses = 15
|
||||
|
||||
/obj/item/card/emag/bluespace
|
||||
name = "bluespace cryptographic sequencer"
|
||||
@@ -110,6 +111,37 @@
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
|
||||
/obj/item/card/emag/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>It has <b>[uses ? uses : "no"]</b> charges left.</span>")
|
||||
|
||||
/obj/item/card/emag/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/emagrecharge))
|
||||
var/obj/item/emagrecharge/ER = W
|
||||
if(ER.uses)
|
||||
uses += ER.uses
|
||||
to_chat(user, "<span class='notice'>You have added [ER.uses] charges to [src]. It now has [uses] charges.</span>")
|
||||
playsound(src, "sparks", 100, 1)
|
||||
ER.uses = 0
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[ER] has no charges left.</span>")
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/emagrecharge
|
||||
name = "electromagnet charging device"
|
||||
desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices, sadly this can't be recharged like a normal cell."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "cell_mini"
|
||||
item_flags = NOBLUDGEON
|
||||
var/uses = 5 //Dictates how many charges the device adds to compatible items
|
||||
|
||||
/obj/item/emagrecharge/examine(mob/user)
|
||||
. = ..()
|
||||
if(uses)
|
||||
to_chat(user, "<span class='notice'>It can add up to [uses] charges to compatible devices</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It has a small, red, blinking light coming from inside of it. It's spent.</span>")
|
||||
|
||||
/obj/item/card/emagfake
|
||||
desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back."
|
||||
@@ -451,3 +483,58 @@ update_label("John Doe", "Clowny")
|
||||
name = "APC Access ID"
|
||||
desc = "A special ID card that allows access to APC terminals."
|
||||
access = list(ACCESS_ENGINE_EQUIP)
|
||||
|
||||
//Polychromatic Knight Badge
|
||||
|
||||
/obj/item/card/id/knight
|
||||
var/id_color = "#00FF00" //defaults to green
|
||||
name = "knight badge"
|
||||
icon_state = "knight"
|
||||
desc = "A badge denoting the owner as a knight! It has a strip for swiping like an ID"
|
||||
|
||||
/obj/item/card/id/knight/update_label(newname, newjob)
|
||||
if(newname || newjob)
|
||||
name = "[(!newname) ? "knight badge" : "[newname]'s Knight Badge"][(!newjob) ? "" : " ([newjob])"]"
|
||||
return
|
||||
|
||||
name = "[(!registered_name) ? "knight badge" : "[registered_name]'s Knight Badge"][(!assignment) ? "" : " ([assignment])"]"
|
||||
|
||||
/obj/item/card/id/knight/update_icon()
|
||||
var/mutable_appearance/id_overlay = mutable_appearance(icon, "knight_overlay")
|
||||
|
||||
if(id_color)
|
||||
id_overlay.color = id_color
|
||||
cut_overlays()
|
||||
|
||||
add_overlay(id_overlay)
|
||||
|
||||
/obj/item/card/id/knight/AltClick(mob/living/user)
|
||||
. = ..()
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(alert("Are you sure you want to recolor your id?", "Confirm Repaint", "Yes", "No") == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",id_color) as color|null
|
||||
if(!in_range(src, user) || !energy_color_input)
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
id_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/card/id/knight/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/card/id/knight/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
|
||||
/obj/item/card/id/knight/blue
|
||||
id_color = "#0000FF"
|
||||
|
||||
/obj/item/card/id/knight/captain
|
||||
id_color = "#FFD700"
|
||||
@@ -233,3 +233,152 @@
|
||||
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
|
||||
icon_state = "lightblade"
|
||||
item_state = "lightblade"
|
||||
|
||||
/*/////////////////////////////////////////////////////////////////////////
|
||||
///////////// The TRUE Energy Sword ///////////////////////////
|
||||
*//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx
|
||||
name = "non-eutactic blade"
|
||||
desc = "The Non-Eutactic Blade utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable."
|
||||
icon_state = "cxsword_hilt"
|
||||
item_state = "cxsword"
|
||||
force = 3
|
||||
force_on = 21
|
||||
throwforce = 5
|
||||
throwforce_on = 20
|
||||
hitsound = "swing_hit" //it starts deactivated
|
||||
hitsound_on = 'sound/weapons/nebhit.ogg'
|
||||
attack_verb_off = list("tapped", "poked")
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
sharpness = IS_SHARP
|
||||
embedding = list("embedded_pain_multiplier" = 6, "embed_chance" = 20, "embedded_fall_chance" = 60)
|
||||
armour_penetration = 10
|
||||
block_chance = 35
|
||||
light_color = "#37FFF7"
|
||||
actions_types = list()
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
|
||||
altafterattack(A, user, TRUE, params)
|
||||
return TRUE
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/altafterattack(atom/target, mob/living/carbon/user, proximity_flag, click_parameters) //does right click memes
|
||||
if(istype(user))
|
||||
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/transform_weapon(mob/living/user, supress_message_text)
|
||||
active = !active //I'd use a ..() here but it'd inherit from the regular esword's proc instead, so SPAGHETTI CODE
|
||||
if(active) //also I'd need to rip out the iconstate changing bits
|
||||
force = force_on
|
||||
throwforce = throwforce_on
|
||||
hitsound = hitsound_on
|
||||
throw_speed = 4
|
||||
if(attack_verb_on.len)
|
||||
attack_verb = attack_verb_on
|
||||
w_class = w_class_on
|
||||
START_PROCESSING(SSobj, src)
|
||||
set_light(brightness_on)
|
||||
update_icon()
|
||||
else
|
||||
force = initial(force)
|
||||
throwforce = initial(throwforce)
|
||||
hitsound = initial(hitsound)
|
||||
throw_speed = initial(throw_speed)
|
||||
if(attack_verb_off.len)
|
||||
attack_verb = attack_verb_off
|
||||
w_class = initial(w_class)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
set_light(0)
|
||||
update_icon()
|
||||
transform_messages(user, supress_message_text)
|
||||
add_fingerprint(user)
|
||||
return TRUE
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/transform_messages(mob/living/user, supress_message_text)
|
||||
playsound(user, active ? 'sound/weapons/nebon.ogg' : 'sound/weapons/neboff.ogg', 65, 1)
|
||||
if(!supress_message_text)
|
||||
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/update_icon()
|
||||
var/mutable_appearance/blade_overlay = mutable_appearance(icon, "cxsword_blade")
|
||||
var/mutable_appearance/gem_overlay = mutable_appearance(icon, "cxsword_gem")
|
||||
|
||||
if(light_color)
|
||||
blade_overlay.color = light_color
|
||||
gem_overlay.color = light_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(gem_overlay)
|
||||
|
||||
if(active)
|
||||
add_overlay(blade_overlay)
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_hands()
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/AltClick(mob/living/user)
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
|
||||
if(energy_color_input)
|
||||
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
update_light()
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
if(active)
|
||||
if(isinhands)
|
||||
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "cxsword_blade")
|
||||
blade_inhand.color = light_color
|
||||
. += blade_inhand
|
||||
|
||||
//Broken version. Not a toy, but not as strong.
|
||||
/obj/item/melee/transforming/energy/sword/cx/broken
|
||||
name = "misaligned non-eutactic blade"
|
||||
desc = "The Non-Eutactic Blade utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable. This one seems to have a damaged handle and misaligned components, causing the blade to be unstable at best"
|
||||
force_on = 15 //As strong a survival knife/bone dagger
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/attackby(obj/item/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/melee/transforming/energy/sword/cx))
|
||||
if(HAS_TRAIT(W, TRAIT_NODROP) || HAS_TRAIT(src, TRAIT_NODROP))
|
||||
to_chat(user, "<span class='warning'>\the [HAS_TRAIT(src, TRAIT_NODROP) ? src : W] is stuck to your hand, you can't attach it to \the [HAS_TRAIT(src, TRAIT_NODROP) ? W : src]!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You combine the two light swords, making a single supermassive blade! You're cool.</span>")
|
||||
new /obj/item/twohanded/dualsaber/hypereutactic(user.drop_location())
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
//////// Tatortot NEB /////////////// (same stats as regular esword)
|
||||
/obj/item/melee/transforming/energy/sword/cx/traitor
|
||||
name = "\improper Dragon's Tooth Sword"
|
||||
desc = "The Dragon's Tooth sword is a blackmarket modification of a Non-Eutactic Blade, \
|
||||
which utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable. \
|
||||
It appears to have a wooden grip and a shaved down guard."
|
||||
icon_state = "cxsword_hilt_traitor"
|
||||
force_on = 30
|
||||
armour_penetration = 50
|
||||
embedding = list("embedded_pain_multiplier" = 10, "embed_chance" = 75, "embedded_fall_chance" = 0, "embedded_impact_pain_multiplier" = 10)
|
||||
block_chance = 50
|
||||
hitsound_on = 'sound/weapons/blade1.ogg'
|
||||
light_color = "#37F0FF"
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/traitor/transform_messages(mob/living/user, supress_message_text)
|
||||
playsound(user, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, 1)
|
||||
if(!supress_message_text)
|
||||
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
|
||||
|
||||
@@ -746,3 +746,73 @@
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/security(src)
|
||||
return
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
Grippers oh god oh fuck
|
||||
***********************************************************************/
|
||||
|
||||
/obj/item/weapon/gripper
|
||||
name = "circuit gripper"
|
||||
desc = "A simple grasping tool for inserting circuitboards into machinary."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "gripper"
|
||||
|
||||
item_flags = NOBLUDGEON
|
||||
|
||||
//Has a list of items that it can hold.
|
||||
var/list/can_hold = list(
|
||||
/obj/item/circuitboard
|
||||
)
|
||||
|
||||
var/obj/item/wrapped = null // Item currently being held.
|
||||
|
||||
/obj/item/weapon/gripper/attack_self()
|
||||
if(wrapped)
|
||||
wrapped.forceMove(get_turf(wrapped))
|
||||
wrapped = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params)
|
||||
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!wrapped)
|
||||
for(var/obj/item/thing in src.contents)
|
||||
wrapped = thing
|
||||
break
|
||||
|
||||
if(wrapped) //Already have an item.
|
||||
//Temporary put wrapped into user so target's attackby() checks pass.
|
||||
wrapped.loc = user
|
||||
|
||||
//Pass the attack on to the target. This might delete/relocate wrapped.
|
||||
var/resolved = target.attackby(wrapped,user)
|
||||
if(!resolved && wrapped && target)
|
||||
wrapped.afterattack(target,user,1)
|
||||
//If wrapped was neither deleted nor put into target, put it back into the gripper.
|
||||
if(wrapped && user && (wrapped.loc == user))
|
||||
wrapped.loc = src
|
||||
else
|
||||
wrapped = null
|
||||
return
|
||||
|
||||
else if(istype(target,/obj/item))
|
||||
|
||||
var/obj/item/I = target
|
||||
|
||||
var/grab = 0
|
||||
for(var/typepath in can_hold)
|
||||
if(istype(I,typepath))
|
||||
grab = 1
|
||||
break
|
||||
|
||||
//We can grab the item, finally.
|
||||
if(grab)
|
||||
to_chat(user, "You collect \the [I].")
|
||||
I.loc = src
|
||||
wrapped = I
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='danger'>Your gripper cannot hold \the [target].</span>")
|
||||
|
||||
@@ -598,10 +598,10 @@
|
||||
R.update_transform()
|
||||
|
||||
/obj/item/borg/upgrade/rped
|
||||
name = "engineering cyborg RPED"
|
||||
name = "engineering cyborg BSRPED"
|
||||
desc = "A rapid part exchange device for the engineering cyborg."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "borgrped"
|
||||
icon_state = "borg_BS_RPED"
|
||||
require_module = TRUE
|
||||
module_type = list(/obj/item/robot_module/engineering)
|
||||
|
||||
@@ -609,14 +609,21 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
var/obj/item/storage/part_replacer/bluespace/cyborg/BSRPED = locate() in R
|
||||
var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R
|
||||
if(RPED)
|
||||
to_chat(user, "<span class='warning'>This unit is already equipped with a RPED module.</span>")
|
||||
if(!RPED)
|
||||
RPED = locate() in R.module
|
||||
if(!BSRPED)
|
||||
BSRPED = locate() in R.module //There's gotta be a smarter way to do this.
|
||||
if(BSRPED)
|
||||
to_chat(user, "<span class='warning'>This unit is already equipped with a BSRPED module.</span>")
|
||||
return FALSE
|
||||
|
||||
RPED = new(R.module)
|
||||
R.module.basic_modules += RPED
|
||||
R.module.add_module(RPED, FALSE, TRUE)
|
||||
BSRPED = new(R.module)
|
||||
SEND_SIGNAL(RPED, COMSIG_TRY_STORAGE_QUICK_EMPTY)
|
||||
qdel(RPED)
|
||||
R.module.basic_modules += BSRPED
|
||||
R.module.add_module(BSRPED, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/rped/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
|
||||
@@ -276,6 +276,106 @@
|
||||
/obj/item/toy/sword/getweight()
|
||||
return (active ? total_mass_on : total_mass) || w_class *1.25
|
||||
|
||||
/obj/item/toy/sword/cx
|
||||
name = "\improper DX Non-Euplastic LightSword"
|
||||
desc = "A deluxe toy replica of an energy sword. Realistic visuals and sounds! Ages 8 and up."
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "cxsword_hilt"
|
||||
item_state = "cxsword"
|
||||
active = FALSE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("poked", "jabbed", "hit")
|
||||
light_color = "#37FFF7"
|
||||
var/light_brightness = 3
|
||||
actions_types = list()
|
||||
|
||||
/obj/item/toy/sword/cx/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
|
||||
altafterattack(A, user, TRUE, params)
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/sword/cx/altafterattack(atom/target, mob/living/carbon/user, proximity_flag, click_parameters) //does right click memes
|
||||
if(istype(user))
|
||||
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/sword/cx/attack_self(mob/user)
|
||||
active = !( active )
|
||||
|
||||
if (active)
|
||||
to_chat(user, "<span class='notice'>You activate the holographic blade with a press of a button.</span>")
|
||||
playsound(user, 'sound/weapons/nebon.ogg', 50, 1)
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb = list("slashed", "stabbed", "ravaged")
|
||||
set_light(light_brightness)
|
||||
update_icon()
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You deactivate the holographic blade with a press of a button.</span>")
|
||||
playsound(user, 'sound/weapons/neboff.ogg', 50, 1)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("poked", "jabbed", "hit")
|
||||
set_light(0)
|
||||
update_icon()
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/toy/sword/cx/update_icon()
|
||||
var/mutable_appearance/blade_overlay = mutable_appearance(icon, "cxsword_blade")
|
||||
var/mutable_appearance/gem_overlay = mutable_appearance(icon, "cxsword_gem")
|
||||
|
||||
if(light_color)
|
||||
blade_overlay.color = light_color
|
||||
gem_overlay.color = light_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(gem_overlay)
|
||||
|
||||
if(active)
|
||||
add_overlay(blade_overlay)
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_hands()
|
||||
|
||||
/obj/item/toy/sword/cx/AltClick(mob/living/user)
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
|
||||
if(energy_color_input)
|
||||
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
update_light()
|
||||
|
||||
/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
if(active)
|
||||
if(isinhands)
|
||||
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "cxsword_blade")
|
||||
blade_inhand.color = light_color
|
||||
. += blade_inhand
|
||||
|
||||
/obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/toy/sword/cx))
|
||||
if(HAS_TRAIT(W, TRAIT_NODROP) || HAS_TRAIT(src, TRAIT_NODROP))
|
||||
to_chat(user, "<span class='warning'>\the [HAS_TRAIT(src, TRAIT_NODROP) ? src : W] is stuck to your hand, you can't attach it to \the [HAS_TRAIT(src, TRAIT_NODROP) ? W : src]!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You combine the two plastic swords, making a single supermassive toy! You're fake-cool.</span>")
|
||||
new /obj/item/twohanded/dualsaber/hypereutactic/toy(user.loc)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/sword/cx/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
|
||||
/*
|
||||
* Foam armblade
|
||||
*/
|
||||
@@ -337,6 +437,30 @@
|
||||
/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
|
||||
return FALSE
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/toy
|
||||
name = "\improper DX Hyper-Euplastic LightSword"
|
||||
desc = "A supermassive toy envisioned to cleave the very fabric of space and time itself in twain. Realistic visuals and sounds! Ages 8 and up."
|
||||
force = 0
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
force_unwielded = 0
|
||||
force_wielded = 0
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
total_mass_on = TOTAL_MASS_TOY_SWORD
|
||||
slowdown_wielded = 0
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
return FALSE
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/toy/IsReflect()//Stops it from reflecting energy projectiles
|
||||
return FALSE
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/toy/rainbow
|
||||
name = "\improper Hyper-Euclidean Reciprocating Trigonometric Zweihander"
|
||||
desc = "A custom-built toy with fancy rainbow lights built-in."
|
||||
hacked = TRUE
|
||||
|
||||
/obj/item/toy/katana
|
||||
name = "replica katana"
|
||||
desc = "Woefully underpowered in D20."
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* Spears
|
||||
* CHAINSAWS
|
||||
* Bone Axe and Spear
|
||||
* And more
|
||||
*/
|
||||
|
||||
/*##################################################################
|
||||
@@ -464,6 +465,116 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
// HYPEREUTACTIC Blades /////////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic
|
||||
icon = 'icons/obj/1x2.dmi'
|
||||
icon_state = "hypereutactic"
|
||||
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
|
||||
item_state = "hypereutactic"
|
||||
inhand_x_dimension = 64
|
||||
inhand_y_dimension = 64
|
||||
name = "hypereutactic blade"
|
||||
desc = "A supermassive weapon envisioned to cleave the very fabric of space and time itself in twain, the hypereutactic blade dynamically flash-forges a hypereutactic crystaline nanostructure capable of passing through most known forms of matter like a hot knife through butter."
|
||||
force = 7
|
||||
force_unwielded = 7
|
||||
force_wielded = 40
|
||||
wieldsound = 'sound/weapons/nebon.ogg'
|
||||
unwieldsound = 'sound/weapons/neboff.ogg'
|
||||
hitsound_on = 'sound/weapons/nebhit.ogg'
|
||||
slowdown_wielded = 1
|
||||
armour_penetration = 60
|
||||
light_color = "#37FFF7"
|
||||
rainbow_colors = list("#FF0000", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF","#FF00FF", "#3399ff", "#ff9900", "#fb008b", "#9800ff", "#00ffa3", "#ccff00")
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "destroyed", "ripped", "devastated", "shredded")
|
||||
spinnable = FALSE
|
||||
total_mass_on = 4
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/chaplain
|
||||
name = "\improper divine lightblade"
|
||||
desc = "A giant blade of bright and holy light, said to cut down the wicked with ease."
|
||||
force = 5
|
||||
force_unwielded = 5
|
||||
force_wielded = 20
|
||||
block_chance = 50
|
||||
armour_penetration = 0
|
||||
var/chaplain_spawnable = TRUE
|
||||
obj_flags = UNIQUE_RENAME
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/chaplain/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/chaplain/IsReflect()
|
||||
return FALSE
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
|
||||
altafterattack(A, user, TRUE, params)
|
||||
return TRUE
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/altafterattack(atom/target, mob/living/user, proximity_flag, click_parameters) //does right click memes
|
||||
if(istype(user))
|
||||
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/update_icon()
|
||||
var/mutable_appearance/blade_overlay = mutable_appearance(icon, "hypereutactic_blade")
|
||||
var/mutable_appearance/gem_overlay = mutable_appearance(icon, "hypereutactic_gem")
|
||||
|
||||
if(light_color)
|
||||
blade_overlay.color = light_color
|
||||
gem_overlay.color = light_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(gem_overlay)
|
||||
|
||||
if(wielded)
|
||||
add_overlay(blade_overlay)
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_hands()
|
||||
|
||||
clean_blood()
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/AltClick(mob/living/user)
|
||||
if(!user.canUseTopic(src, BE_CLOSE, FALSE) || hacked)
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
|
||||
if(!energy_color_input || !user.canUseTopic(src, BE_CLOSE, FALSE) || hacked)
|
||||
return
|
||||
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
update_light()
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
if(isinhands)
|
||||
var/mutable_appearance/gem_inhand = mutable_appearance(icon_file, "hypereutactic_gem")
|
||||
gem_inhand.color = light_color
|
||||
. += gem_inhand
|
||||
if(wielded)
|
||||
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "hypereutactic_blade")
|
||||
blade_inhand.color = light_color
|
||||
. += blade_inhand
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/examine(mob/user)
|
||||
..()
|
||||
if(!hacked)
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/rainbow_process()
|
||||
. = ..()
|
||||
update_icon()
|
||||
update_light()
|
||||
|
||||
//spears
|
||||
/obj/item/twohanded/spear
|
||||
icon_state = "spearglass0"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/structure/sign/barsign // All Signs are 64 by 32 pixels, they take two tiles
|
||||
/obj/structure/sign/barsign // All Signs are 64 by 64 pixels, though most of them are made to fit 64 x 32 and only take the two lowermost tiles.
|
||||
name = "Bar Sign"
|
||||
desc = "A bar sign with no writing on it."
|
||||
icon = 'icons/obj/barsigns.dmi'
|
||||
|
||||
@@ -614,3 +614,6 @@
|
||||
user.resting = FALSE
|
||||
togglelock(user)
|
||||
T1.visible_message("<span class='warning'>[user] dives into [src]!</span>")
|
||||
|
||||
/obj/structure/closet/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
|
||||
return ..() && opened
|
||||
|
||||
@@ -318,6 +318,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
RemoveActive()
|
||||
state = AHELP_CLOSED
|
||||
GLOB.ahelp_tickets.ListInsert(src)
|
||||
to_chat(initiator, "<span class='adminhelp'>Ticket closed by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"].</span>")
|
||||
AddInteraction("<font color='red'>Closed by [key_name].</font>")
|
||||
if(!silent)
|
||||
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "closed")
|
||||
@@ -336,7 +337,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 50)
|
||||
|
||||
AddInteraction("<font color='green'>Resolved by [key_name].</font>")
|
||||
to_chat(initiator, "<span class='adminhelp'>Your ticket has been resolved by an admin. The Adminhelp verb will be returned to you shortly.</span>")
|
||||
to_chat(initiator, "<span class='adminhelp'>Your ticket has been resolved by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]. The Adminhelp verb will be returned to you shortly.</span>")
|
||||
if(!silent)
|
||||
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "resolved")
|
||||
var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name]"
|
||||
@@ -353,7 +354,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
|
||||
SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg'))
|
||||
|
||||
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
|
||||
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]! -</b></font>")
|
||||
to_chat(initiator, "<font color='red'><b>Your admin help was rejected.</b> The adminhelp verb has been returned to you so that you may try again.</font>")
|
||||
to_chat(initiator, "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")
|
||||
|
||||
@@ -369,7 +370,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
if(state != AHELP_ACTIVE)
|
||||
return
|
||||
|
||||
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue! -</b></font><br>"
|
||||
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]! -</b></font><br>"
|
||||
msg += "<font color='red'><b>Losing is part of the game!</b></font><br>"
|
||||
msg += "<font color='red'>It is also possible that your ahelp is unable to be answered properly, due to events occurring in the round.</font>"
|
||||
if(initiator)
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
if(prob(10))
|
||||
to_chat(target, "You feel as if you are being watched.")
|
||||
return
|
||||
face_atom(target)
|
||||
draining = TRUE
|
||||
essence_drained += rand(15, 20)
|
||||
to_chat(src, "<span class='revennotice'>You search for the soul of [target].</span>")
|
||||
|
||||
@@ -587,3 +587,57 @@
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight
|
||||
name = "odd cryogenics pod"
|
||||
desc = "A humming cryo pod. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
mob_name = "a displaced knight from another dimension"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
id_job = "Knight"
|
||||
job_description = "Cydonian Knight"
|
||||
death = FALSE
|
||||
random = TRUE
|
||||
outfit = /datum/outfit/lavaknight
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
|
||||
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
|
||||
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth."
|
||||
assignedrole = "Cydonian Knight"
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/special(mob/living/new_spawn)
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.dna.features["mam_ears"] = "Cat, Big" //cat people
|
||||
H.dna.features["mcolor"] = H.hair_color
|
||||
H.update_body()
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/Destroy()
|
||||
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
return ..()
|
||||
|
||||
/datum/outfit/lavaknight
|
||||
name = "Cydonian Knight"
|
||||
uniform = /obj/item/clothing/under/assistantformal
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
r_pocket = /obj/item/melee/transforming/energy/sword/cx
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/lavaknight
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
id = /obj/item/card/id/knight/blue
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/captain
|
||||
name = "odd gilded cryogenics pod"
|
||||
desc = "A humming cryo pod that appears to be gilded. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
|
||||
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
|
||||
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth. \
|
||||
You feel a natural instict to lead, and as such, you should strive to lead your comrades to safety, and hopefully home. You also feel a burning determination to uphold your vow, as well as your fellow comrade's."
|
||||
outfit = /datum/outfit/lavaknight/captain
|
||||
id_job = "Knight Captain"
|
||||
|
||||
/datum/outfit/lavaknight/captain
|
||||
name ="Cydonian Knight Captain"
|
||||
l_pocket = /obj/item/twohanded/dualsaber/hypereutactic
|
||||
id = /obj/item/card/id/knight/captain
|
||||
|
||||
@@ -41,6 +41,49 @@
|
||||
|
||||
H.update_inv_head()
|
||||
|
||||
///Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them.
|
||||
/obj/item/clothing/head/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing)
|
||||
. = ..()
|
||||
///if the thrown object's target zone isn't the head
|
||||
if(thrownthing.target_zone != BODY_ZONE_HEAD)
|
||||
return
|
||||
///ignore any hats with the tinfoil counter-measure enabled
|
||||
if(clothing_flags & ANTI_TINFOIL_MANEUVER)
|
||||
return
|
||||
///if the hat happens to be capable of holding contents and has something in it. mostly to prevent super cheesy stuff like stuffing a mini-bomb in a hat and throwing it
|
||||
if(LAZYLEN(contents))
|
||||
return
|
||||
if(iscarbon(hit_atom))
|
||||
var/mob/living/carbon/H = hit_atom
|
||||
if(istype(H.head, /obj/item))
|
||||
var/obj/item/WH = H.head
|
||||
///check if the item has NODROP
|
||||
if(HAS_TRAIT(WH, TRAIT_NODROP))
|
||||
H.visible_message("<span class='warning'>[src] bounces off [H]'s [WH.name]!", "<span class='warning'>[src] bounces off your [WH.name], falling to the floor.</span>")
|
||||
return
|
||||
///check if the item is an actual clothing head item, since some non-clothing items can be worn
|
||||
if(istype(WH, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/WHH = WH
|
||||
///SNUG_FIT hats are immune to being knocked off
|
||||
if(WHH.clothing_flags & SNUG_FIT)
|
||||
H.visible_message("<span class='warning'>[src] bounces off [H]'s [WHH.name]!", "<span class='warning'>[src] bounces off your [WHH.name], falling to the floor.</span>")
|
||||
return
|
||||
///if the hat manages to knock something off
|
||||
if(H.dropItemToGround(WH))
|
||||
H.visible_message("<span class='warning'>[src] knocks [WH] off [H]'s head!</span>", "<span class='warning'>[WH] is suddenly knocked off your head by [src]!</span>")
|
||||
if(H.equip_to_slot_if_possible(src, SLOT_HEAD, FALSE, TRUE))
|
||||
H.visible_message("<span class='notice'>[src] lands neatly on [H]'s head!", "<span class='notice'>[src] lands perfectly onto your head!</span>")
|
||||
return
|
||||
if(iscyborg(hit_atom))
|
||||
var/mob/living/silicon/robot/R = hit_atom
|
||||
///hats in the borg's blacklist bounce off
|
||||
if(!is_type_in_typecache(src, R.equippable_hats) || R.hat_offset == INFINITY)
|
||||
R.visible_message("<span class='warning'>[src] bounces off [R]!", "<span class='warning'>[src] bounces off you, falling to the floor.</span>")
|
||||
return
|
||||
else
|
||||
R.visible_message("<span class='notice'>[src] lands neatly on top of [R].", "<span class='notice'>[src] lands perfectly on top of you.</span>")
|
||||
R.place_on_head(src) //hats aren't designed to snugly fit borg heads or w/e so they'll always manage to knock eachother off
|
||||
|
||||
/obj/item/clothing/head/worn_overlays(isinhands = FALSE)
|
||||
. = list()
|
||||
if(!isinhands)
|
||||
|
||||
@@ -13,12 +13,14 @@
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
name = "collectable slime cap!"
|
||||
desc = "It just latches right in place!"
|
||||
clothing_flags = SNUG_FIT
|
||||
icon_state = "slime"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
/obj/item/clothing/head/collectable/xenom
|
||||
name = "collectable xenomorph helmet!"
|
||||
desc = "Hiss hiss hiss!"
|
||||
clothing_flags = SNUG_FIT
|
||||
icon_state = "xenom"
|
||||
|
||||
/obj/item/clothing/head/collectable/chef
|
||||
@@ -71,13 +73,14 @@
|
||||
desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!"
|
||||
icon_state = "welding"
|
||||
item_state = "welding"
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
name = "collectable slime hat"
|
||||
desc = "Just like a real brain slug!"
|
||||
icon_state = "headslime"
|
||||
item_state = "headslime"
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/collectable/flatcap
|
||||
name = "collectable flat cap"
|
||||
@@ -121,6 +124,7 @@
|
||||
/obj/item/clothing/head/collectable/hardhat
|
||||
name = "collectable hard hat"
|
||||
desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!"
|
||||
clothing_flags = SNUG_FIT
|
||||
icon_state = "hardhat0_yellow"
|
||||
item_state = "hardhat0_yellow"
|
||||
|
||||
@@ -143,7 +147,7 @@
|
||||
desc = "Go Red! I mean Green! I mean Red! No Green!"
|
||||
icon_state = "thunderdome"
|
||||
item_state = "thunderdome"
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
/obj/item/clothing/head/collectable/swat
|
||||
@@ -151,5 +155,5 @@
|
||||
desc = "That's not real blood. That's red paint." //Reference to the actual description
|
||||
icon_state = "swat"
|
||||
item_state = "swat"
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
armor = list("melee" = 15, "bullet" = 5, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
|
||||
flags_inv = 0
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light)
|
||||
clothing_flags = SNUG_FIT
|
||||
resistance_flags = FIRE_PROOF
|
||||
dynamic_hair_suffix = "+generic"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
|
||||
strip_delay = 60
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
|
||||
@@ -67,12 +67,14 @@
|
||||
desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/cueball
|
||||
name = "cueball helmet"
|
||||
desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?"
|
||||
icon_state = "cueball"
|
||||
item_state="cueball"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
@@ -81,6 +83,7 @@
|
||||
desc = "A ball of white styrofoam. So festive."
|
||||
icon_state = "snowman_h"
|
||||
item_state = "snowman_h"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
@@ -90,6 +93,7 @@
|
||||
icon_state = "justicered"
|
||||
item_state = "justicered"
|
||||
flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
|
||||
/obj/item/clothing/head/justice/blue
|
||||
@@ -161,6 +165,7 @@
|
||||
icon_state = "chickenhead"
|
||||
item_state = "chickensuit"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/griffin
|
||||
name = "griffon head"
|
||||
@@ -168,6 +173,7 @@
|
||||
icon_state = "griffinhat"
|
||||
item_state = "griffinhat"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/bearpelt
|
||||
name = "bear pelt hat"
|
||||
@@ -181,6 +187,7 @@
|
||||
item_state = "xenos_helm"
|
||||
desc = "A helmet made out of chitinous alien hide."
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/fedora
|
||||
name = "fedora"
|
||||
@@ -302,6 +309,7 @@
|
||||
desc = "When everything's going to crab, protecting your head is the best choice."
|
||||
icon_state = "lobster_hat"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/drfreezehat
|
||||
name = "doctor freeze's wig"
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
resistance_flags = FIRE_PROOF
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/welding/attack_self(mob/user)
|
||||
weldingvisortoggle(user)
|
||||
@@ -115,6 +116,7 @@
|
||||
item_state = "hardhat0_pumpkin"
|
||||
item_color = "pumpkin"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
brightness_on = 2 //luminosity when on
|
||||
flags_cover = HEADCOVERSEYES
|
||||
@@ -163,6 +165,7 @@
|
||||
desc = "A helmet made out of a box."
|
||||
icon_state = "cardborg_h"
|
||||
item_state = "cardborg_h"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
@@ -227,6 +230,7 @@
|
||||
desc = "A crude helmet made out of bronze plates. It offers very little in the way of protection."
|
||||
icon = 'icons/obj/clothing/clockwork_garb.dmi'
|
||||
icon_state = "clockwork_helmet_old"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEEARS|HIDEHAIR
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
|
||||
|
||||
@@ -238,6 +242,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = -5,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = -5, "fire" = 0, "acid" = 0)
|
||||
equip_delay_other = 140
|
||||
var/datum/brain_trauma/mild/phobia/paranoia
|
||||
clothing_flags = ANTI_TINFOIL_MANEUVER
|
||||
|
||||
/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "space helmet"
|
||||
icon_state = "spaceold"
|
||||
desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays."
|
||||
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS
|
||||
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SNUG_FIT
|
||||
item_state = "spaceold"
|
||||
permeability_coefficient = 0.01
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
icon_state = "hardsuit0-engineering"
|
||||
item_state = "eng_helm"
|
||||
max_integrity = 300
|
||||
clothing_flags = SNUG_FIT
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75)
|
||||
var/basestate = "hardsuit"
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
@@ -867,3 +868,133 @@
|
||||
strip_delay = 130
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
actions_types = list()
|
||||
|
||||
/*
|
||||
CYDONIAN ARMOR THAT IS RGB AND STUFF WOOOOOOOOOO
|
||||
*/
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight
|
||||
name = "cydonian helmet"
|
||||
desc = "A helmet designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
|
||||
icon_state = "knight_cydonia"
|
||||
item_state = "knight_yellow"
|
||||
item_color = null
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF
|
||||
heat_protection = HEAD
|
||||
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
|
||||
brightness_on = 7
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
|
||||
var/energy_color = "#35FFF0"
|
||||
var/obj/item/clothing/suit/space/hardsuit/lavaknight/linkedsuit = null
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/Initialize()
|
||||
. = ..()
|
||||
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/lavaknight))
|
||||
var/obj/item/clothing/suit/space/hardsuit/lavaknight/S = loc
|
||||
energy_color = S.energy_color
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/attack_self(mob/user)
|
||||
on = !on
|
||||
|
||||
if(on)
|
||||
set_light(brightness_on)
|
||||
else
|
||||
set_light(0)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/update_icon()
|
||||
var/mutable_appearance/helm_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
|
||||
|
||||
if(energy_color)
|
||||
helm_overlay.color = energy_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(helm_overlay)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file)
|
||||
. = ..()
|
||||
if(!isinhands)
|
||||
var/mutable_appearance/energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
energy_overlay.plane = ABOVE_LIGHTING_LAYER
|
||||
energy_overlay.color = energy_color
|
||||
. += energy_overlay
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight
|
||||
icon_state = "knight_cydonia"
|
||||
name = "cydonian armor"
|
||||
desc = "A suit designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
|
||||
item_state = "swat_suit"
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF
|
||||
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/lavaknight
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
var/energy_color = "#35FFF0"
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize()
|
||||
..()
|
||||
light_color = energy_color
|
||||
set_light(1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
|
||||
var/mutable_appearance/suit_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
|
||||
|
||||
if(energy_color)
|
||||
suit_overlay.color = energy_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(suit_overlay)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file)
|
||||
. = ..()
|
||||
if(!isinhands)
|
||||
var/mutable_appearance/energy_overlay
|
||||
if(taurmode == SNEK_TAURIC)
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
else if(taurmode == PAW_TAURIC)
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
else
|
||||
energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
|
||||
energy_overlay.plane = ABOVE_LIGHTING_LAYER
|
||||
energy_overlay.color = energy_color
|
||||
. += energy_overlay
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/AltClick(mob/living/user)
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(user.incapacitated() || !istype(user) || !in_range(src, user))
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to recolor your armor stripes?", "Confirm Repaint", "Yes", "No") == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",energy_color) as color|null
|
||||
if(energy_color_input)
|
||||
energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
|
||||
user.update_inv_wear_suit()
|
||||
if(helmet)
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/H = helmet
|
||||
H.energy_color = energy_color
|
||||
user.update_inv_head()
|
||||
H.update_icon()
|
||||
update_icon()
|
||||
user.update_inv_wear_suit()
|
||||
light_color = energy_color
|
||||
update_light()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]")
|
||||
if(blood_DNA)
|
||||
if(tauric)
|
||||
if(tauric && taurmode >= SNEK_TAURIC)
|
||||
. += mutable_appearance('modular_citadel/icons/mob/64x32_effects.dmi', "[blood_overlay_type]blood", color = blood_DNA_to_color())
|
||||
else
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood", color = blood_DNA_to_color())
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "bio"
|
||||
desc = "A hood that protects the head and face from biological contaminants."
|
||||
permeability_coefficient = 0.01
|
||||
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT
|
||||
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | SNUG_FIT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE|HIDESNOUT
|
||||
resistance_flags = ACID_PROOF
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
icon_state = "golhood"
|
||||
desc = "A protective & concealing hood."
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
|
||||
|
||||
/obj/item/clothing/suit/hooded/cloak/drake
|
||||
@@ -88,6 +89,7 @@
|
||||
icon_state = "dragon"
|
||||
desc = "The skull of a dragon."
|
||||
armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100)
|
||||
clothing_flags = SNUG_FIT
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
name = "bomb hood"
|
||||
desc = "Use in case of bomb."
|
||||
icon_state = "bombsuit"
|
||||
clothing_flags = THICKMATERIAL
|
||||
clothing_flags = THICKMATERIAL | SNUG_FIT
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
|
||||
flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
dynamic_hair_suffix = ""
|
||||
@@ -123,7 +123,7 @@
|
||||
name = "radiation hood"
|
||||
icon_state = "rad"
|
||||
desc = "A hood with radiation protective properties. The label reads, 'Made with lead. Please do not consume insulation.'"
|
||||
clothing_flags = THICKMATERIAL
|
||||
clothing_flags = THICKMATERIAL|SNUG_FIT
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
|
||||
strip_delay = 60
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
|
||||
strip_delay = 50
|
||||
equip_delay_other = 50
|
||||
clothing_flags = SNUG_FIT
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
dog_fashion = /datum/dog_fashion/head/blue_wizard
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
weight = 10
|
||||
max_occurrences = 1
|
||||
|
||||
earliest_start = 60 MINUTES
|
||||
min_players = 40
|
||||
|
||||
gamemode_blacklist = list("blob") //Just in case a blob survives that long
|
||||
|
||||
@@ -36,10 +36,11 @@
|
||||
projectilesound = 'sound/weapons/emitter.ogg'
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
var/allowed_projectile_types = list(/obj/item/projectile/magic/change, /obj/item/projectile/magic/animate, /obj/item/projectile/magic/resurrection,
|
||||
/obj/item/projectile/magic/death, /obj/item/projectile/magic/teleport, /obj/item/projectile/magic/door, /obj/item/projectile/magic/aoe/fireball,
|
||||
/obj/item/projectile/magic/spellblade, /obj/item/projectile/magic/arcane_barrage)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/ranged/Initialize()
|
||||
projectiletype = pick(allowed_projectile_types)
|
||||
. = ..()
|
||||
|
||||
@@ -12,7 +12,7 @@ html, body {
|
||||
body {
|
||||
background: #E0E0E0; /*CIT CHANGE - darkens chatbox a lil*/
|
||||
font-family: Verdana, sans-serif;
|
||||
font-size: 9pt;
|
||||
font-size: 13px;
|
||||
line-height: 1.2;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
@@ -302,7 +302,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.disarm {color: #990000;}
|
||||
.passive {color: #660000;}
|
||||
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 185%;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.alertwarning {color: #FF0000; font-weight: bold}
|
||||
@@ -330,12 +330,12 @@ h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.cultitalic {color: #960000; font-style: italic;}
|
||||
.cultbold {color: #960000; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 185%;}
|
||||
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
|
||||
.colossus {color: #7F282A; font-size: 40px;}
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 185%;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 925%;}
|
||||
.narsiesmall {color: #960000; font-weight: bold; font-size: 370%;}
|
||||
.colossus {color: #7F282A; font-size: 310%;}
|
||||
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #660099; font-style: italic;}
|
||||
.purple {color: #5e2d79;}
|
||||
@@ -343,36 +343,36 @@ h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.revennotice {color: #1d2953;}
|
||||
.revenboldnotice {color: #1d2953; font-weight: bold;}
|
||||
.revenbignotice {color: #1d2953; font-weight: bold; font-size: 24px;}
|
||||
.revenbignotice {color: #1d2953; font-weight: bold; font-size: 185%;}
|
||||
.revenminor {color: #823abb}
|
||||
.revenwarning {color: #760fbb; font-style: italic;}
|
||||
.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
|
||||
.revendanger {color: #760fbb; font-weight: bold; font-size: 185%;}
|
||||
.umbra {color: #5000A0;}
|
||||
.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #5000A0; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
|
||||
.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
|
||||
.deconversion_message {color: #5000A0; font-size: 185%; font-style: italic;}
|
||||
|
||||
.brass {color: #BE8700;}
|
||||
.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
|
||||
.large_brass {color: #BE8700; font-size: 24px;}
|
||||
.big_brass {color: #BE8700; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;}
|
||||
.large_brass {color: #BE8700; font-size: 185%;}
|
||||
.big_brass {color: #BE8700; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
.ratvar {color: #BE8700; font-size: 370%; font-weight: bold; font-style: italic;}
|
||||
.alloy {color: #42474D;}
|
||||
.heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #42474D; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
.nezbere {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_small {color: #42474D;}
|
||||
.sevtug_large {color: #AF0AAF; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.sevtug_large {color: #AF0AAF; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
.sevtug {color: #AF0AAF; font-weight: bold; font-style: italic;}
|
||||
.sevtug_small {color: #AF0AAF;}
|
||||
.inathneq_large {color: #1E8CE1; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.inathneq_large {color: #1E8CE1; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
.inathneq {color: #1E8CE1; font-weight: bold; font-style: italic;}
|
||||
.inathneq_small {color: #1E8CE1;}
|
||||
.nzcrentr_large {color: #DAAA18; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr_large {color: #DAAA18; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr {color: #DAAA18; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr_small {color: #DAAA18;}
|
||||
.neovgre_large {color: #6E001A; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.neovgre_large {color: #6E001A; font-size: 185%; font-weight: bold; font-style: italic;}
|
||||
.neovgre {color: #6E001A; font-weight: bold; font-style: italic;}
|
||||
.neovgre_small {color: #6E001A;}
|
||||
|
||||
@@ -384,7 +384,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.alertalien {color: #00c000; font-weight: bold;}
|
||||
.changeling {color: #800080; font-style: italic;}
|
||||
|
||||
.spider {color: #4d004d;}
|
||||
.spider {color: #4d004d; font-weight: bold; font-size: 185%;}
|
||||
|
||||
.interface {color: #330033;}
|
||||
|
||||
@@ -392,14 +392,14 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.papyrus {font-family: "Papyrus", cursive, sans-serif;}
|
||||
.robot {font-family: "Courier New", cursive, sans-serif;}
|
||||
|
||||
.command_headset {font-weight: bold; font-size: 24px;}
|
||||
.small {font-size: 8px;}
|
||||
.big {font-size: 24px;}
|
||||
.reallybig {font-size: 32px;}
|
||||
.extremelybig {font-size: 40px;}
|
||||
.greentext {color: #00FF00; font-size: 24px;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.command_headset {font-weight: bold; font-size: 160%;}
|
||||
.small {font-size: 60%;}
|
||||
.big {font-size: 185%;}
|
||||
.reallybig {font-size: 245%;}
|
||||
.extremelybig {font-size: 310%;}
|
||||
.greentext {color: #00FF00; font-size: 185%;}
|
||||
.redtext {color: #FF0000; font-size: 185%;}
|
||||
.clown {color: #FF69Bf; font-size: 160%; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.spooky {color: #FF6100;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
@@ -431,9 +431,9 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
.memo {color: #638500; text-align: center;}
|
||||
.memoedit {text-align: center; font-size: 16px;}
|
||||
.memoedit {text-align: center; font-size: 125%;}
|
||||
.abductor {color: #800080; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 100%; font-weight: bold; font-style: italic;}
|
||||
.slime {color: #00CED1;}
|
||||
.drone {color: #848482;}
|
||||
.monkey {color: #975032;}
|
||||
@@ -441,7 +441,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.resonate {color: #298F85;}
|
||||
|
||||
.monkeyhive {color: #774704;}
|
||||
.monkeylead {color: #774704; font-size: 2;}
|
||||
.monkeylead {color: #774704; font-size: 125%;}
|
||||
|
||||
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
|
||||
.connectionClosed.restored {background: green;}
|
||||
|
||||
@@ -28,20 +28,20 @@ a:visited {color: #7c00e6;}
|
||||
#userBar .toggle {background: #272727;}
|
||||
|
||||
/* MOTD */
|
||||
.motd {color: #E0E0E0; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #E0E0E0; text-decoration: underline;}
|
||||
.motd {color: #E0E0E0;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #E0E0E0;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #E0E0E0;}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {color: #E0E0E0;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1, h2, h3, h4, h5, h6 {color: #E0E0E0;}
|
||||
h1.alert, h2.alert {color: #E0E0E0;}
|
||||
|
||||
.ooc {color: #cca300; font-weight: bold;}
|
||||
.looc {color: #d8b555; font-weight: bold;}
|
||||
.antagooc {color: #ce254f; font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #3d5bc3; font-weight: bold;}
|
||||
.ooc {color: #cca300;}
|
||||
.looc {color: #d8b555;}
|
||||
.antagooc {color: #ce254f;}
|
||||
.adminobserverooc {color: #0099cc;}
|
||||
.adminooc {color: #3d5bc3;}
|
||||
|
||||
.admin {color: #5975da; font-weight: bold;}
|
||||
.admin {color: #5975da;}
|
||||
|
||||
.deadsay {color: #e2c1ff;}
|
||||
.radio {color: #1ecc43;}
|
||||
@@ -65,82 +65,82 @@ h1.alert, h2.alert {color: #99aab5;}
|
||||
.disarm {color: #b42525;}
|
||||
.passive {color: #a00f0f;}
|
||||
|
||||
.userdanger {color: #c51e1e; font-weight: bold; font-size: 24px;}
|
||||
.userdanger {color: #c51e1e;}
|
||||
.danger {color: #c51e1e;}
|
||||
.warning {color: #c51e1e; font-style: italic;}
|
||||
.alertwarning {color: #c51e1e; font-weight: bold}
|
||||
.boldwarning {color: #c51e1e; font-style: italic; font-weight: bold}
|
||||
.announce {color: #c51e1e; font-weight: bold;}
|
||||
.boldannounce {color: #c51e1e; font-weight: bold;}
|
||||
.greenannounce {color: #059223; font-weight: bold;}
|
||||
.warning {color: #c51e1e;}
|
||||
.alertwarning {color: #c51e1e;}
|
||||
.boldwarning {color: #c51e1e;}
|
||||
.announce {color: #c51e1e;}
|
||||
.boldannounce {color: #c51e1e;}
|
||||
.greenannounce {color: #059223;}
|
||||
.info {color: #6685f5;}
|
||||
.notice {color: #6685f5;}
|
||||
.boldnotice {color: #6685f5; font-weight: bold;}
|
||||
.boldnotice {color: #6685f5;}
|
||||
.adminnotice {color: #6685f5;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #E0E0E0; font-weight: bold;}
|
||||
.red {color: #FF0000}
|
||||
.adminhelp {color: #ff0000;}
|
||||
.unconscious {color: #E0E0E0;}
|
||||
.red {color: #FF0000;}
|
||||
.pink {color: #ff70c1;}
|
||||
.blue {color: #215cff}
|
||||
.blue {color: #215cff;}
|
||||
.green {color: #059223;}
|
||||
.nicegreen {color: #059223;}
|
||||
.userlove {color: #ff42a6; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #82365e;}
|
||||
.love {color: #ff4591; font-style: italic; text-shadow: 0 0 6px #994449;}
|
||||
.userlove {color: #ff42a6; text-shadow: 0 0 6px #82365e;}
|
||||
.love {color: #ff4591; text-shadow: 0 0 6px #994449;}
|
||||
.shadowling {color: #8e8a99;}
|
||||
.cult {color: #aa1c1c;}
|
||||
|
||||
.cultitalic {color: #aa1c1c; font-style: italic;}
|
||||
.cultbold {color: #aa1c1c; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #aa1c1c; font-weight: bold; font-size: 24px;}
|
||||
.cultitalic {color: #aa1c1c;}
|
||||
.cultbold {color: #aa1c1c;}
|
||||
.cultboldtalic {color: #aa1c1c;}
|
||||
|
||||
.cultlarge {color: #aa1c1c; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #aa1c1c; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #aa1c1c; font-weight: bold; font-size: 48px;}
|
||||
.hierophant {color: #b441ee; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #c56bf1; font-style: italic;}
|
||||
.cultlarge {color: #aa1c1c;}
|
||||
.narsie {color: #aa1c1c;}
|
||||
.narsiesmall {color: #aa1c1c;}
|
||||
.hierophant {color: #b441ee;}
|
||||
.hierophant_warning {color: #c56bf1;}
|
||||
.purple {color: #9956d3;}
|
||||
.holoparasite {color: #88809c;}
|
||||
|
||||
.revennotice {color: #3645aa;}
|
||||
.revenboldnotice {color: #3645aa; font-weight: bold;}
|
||||
.revenbignotice {color: #3645aa; font-weight: bold; font-size: 24px;}
|
||||
.revenminor {color: #823ddd}
|
||||
.revenwarning {color: #8911d9; font-style: italic;}
|
||||
.revendanger {color: #8911d9; font-weight: bold; font-size: 24px;}
|
||||
.revenboldnotice {color: #3645aa;}
|
||||
.revenbignotice {color: #3645aa;}
|
||||
.revenminor {color: #823ddd;}
|
||||
.revenwarning {color: #8911d9;}
|
||||
.revendanger {color: #8911d9;}
|
||||
.umbra {color: #7c00e6;}
|
||||
.umbra_emphasis {color: #7c00e6; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #7c00e6; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.umbra_emphasis {color: #7c00e6;}
|
||||
.umbra_large {color: #7c00e6;}
|
||||
|
||||
.deconversion_message {color: #a947ff; font-size: 24px; font-style: italic;}
|
||||
.deconversion_message {color: #a947ff;}
|
||||
|
||||
.alloy {color: #545b64;}
|
||||
.heavy_alloy {color: #545b64; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #545b64; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nezbere {color: #545b64; font-weight: bold; font-style: italic;}
|
||||
.heavy_alloy {color: #545b64;}
|
||||
.nezbere_large {color: #545b64;}
|
||||
.nezbere {color: #545b64;}
|
||||
.nezbere_small {color: #545b64;}
|
||||
.inathneq_large {color: #1d7dc7; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.inathneq {color: #1d7dc7; font-weight: bold; font-style: italic;}
|
||||
.inathneq_large {color: #1d7dc7;}
|
||||
.inathneq {color: #1d7dc7;}
|
||||
.inathneq_small {color: #1d7dc7;}
|
||||
.neovgre_large {color: #7c0622; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.neovgre {color: #7c0622; font-weight: bold; font-style: italic;}
|
||||
.neovgre_large {color: #7c0622;}
|
||||
.neovgre {color: #7c0622;}
|
||||
.neovgre_small {color: #7c0622;}
|
||||
|
||||
.newscaster {color: #c05d5d;}
|
||||
.ghostalert {color: #6600ff; font-style: italic; font-weight: bold;}
|
||||
.ghostalert {color: #6600ff;}
|
||||
|
||||
.alien {color: #855d85;}
|
||||
.noticealien {color: #059223;}
|
||||
.alertalien {color: #059223; font-weight: bold;}
|
||||
.changeling {color: #059223; font-style: italic;}
|
||||
.alertalien {color: #059223;}
|
||||
.changeling {color: #059223;}
|
||||
|
||||
.spider {color: #8800ff;}
|
||||
|
||||
.interface {color: #750e75;}
|
||||
|
||||
.greentext {color: #059223; font-size: 24px;}
|
||||
.redtext {color: #c51e1e; font-size: 24px;}
|
||||
.clown {color: #ff70c1; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
.greentext {color: #059223;}
|
||||
.redtext {color: #c51e1e;}
|
||||
.clown {color: #ff70c1;}
|
||||
.velvet {color: #660015;}
|
||||
@keyframes velvet {
|
||||
0% { color: #890020; }
|
||||
40% { color: #c51e1e; }
|
||||
@@ -149,11 +149,11 @@ h1.alert, h2.alert {color: #99aab5;}
|
||||
100% { color: #890020; }
|
||||
}
|
||||
|
||||
.abductor {color: #c204c2; font-style: italic;}
|
||||
.mind_control {color: #df3da9; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.abductor {color: #c204c2;}
|
||||
.mind_control {color: #df3da9;}
|
||||
.drone {color: #979795;}
|
||||
|
||||
.monkeyhive {color: #a56408;}
|
||||
.monkeylead {color: #af6805; font-size: 2;}
|
||||
.monkeylead {color: #af6805;}
|
||||
|
||||
.internal.boldnshit {color: #3d5bc3; font-weight: bold;}
|
||||
.internal.boldnshit {color: #3d5bc3;}
|
||||
|
||||
@@ -12,222 +12,3 @@ body {background: #F1F1F1;}
|
||||
|
||||
/* ADMIN CONTEXT MENU */
|
||||
.contextMenu {background-color: #ddd;}
|
||||
|
||||
|
||||
.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
|
||||
|
||||
|
||||
/*****************************************
|
||||
*
|
||||
* OUTPUT ACTUALLY RELATED TO MESSAGES
|
||||
*
|
||||
******************************************/
|
||||
|
||||
/* MOTD */
|
||||
.motd {color: #638500; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;}
|
||||
|
||||
/* ADD HERE FOR BOLD */
|
||||
.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;}
|
||||
|
||||
/* ADD HERE FOR ITALIC */
|
||||
.italic, .italics, .emote {font-style: italic;}
|
||||
|
||||
/* OUTPUT COLORS */
|
||||
.highlight {background: yellow;}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
em {font-style: normal; font-weight: bold;}
|
||||
|
||||
.ooc {color: #002eb8; font-weight: bold;}
|
||||
.looc {color: #6699CC; font-weight: bold;}
|
||||
.antagooc {color: #b8002e; font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #700038; font-weight: bold;}
|
||||
|
||||
.adminsay {color: #FF4500}
|
||||
.admin {color: #386aff; font-weight: bold;}
|
||||
|
||||
.name { font-weight: bold;}
|
||||
|
||||
.say {}
|
||||
.deadsay {color: #5c00e6;}
|
||||
.binarysay {color: #20c20e; background-color: #000000; display: block;}
|
||||
.binarysay a {color: #00ff00;}
|
||||
.binarysay a:active, .binarysay a:visited {color: #88ff88;}
|
||||
.radio {color: #008000;}
|
||||
.sciradio {color: #993399;}
|
||||
.comradio {color: #948f02;}
|
||||
.secradio {color: #a30000;}
|
||||
.medradio {color: #337296;}
|
||||
.engradio {color: #fb5613;}
|
||||
.suppradio {color: #a8732b;}
|
||||
.servradio {color: #6eaa2c;}
|
||||
.syndradio {color: #6d3f40;}
|
||||
.centcomradio {color: #686868;}
|
||||
.aiprivradio {color: #ff00ff;}
|
||||
.redteamradio {color: #ff0000;}
|
||||
.blueteamradio {color: #0000ff;}
|
||||
|
||||
.yell { font-weight: bold;}
|
||||
|
||||
.alert {color: #ff0000;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.emote { font-style: italic;}
|
||||
.selecteddna {color: #ffffff; background-color: #001B1B}
|
||||
|
||||
.attack {color: #ff0000;}
|
||||
.disarm {color: #990000;}
|
||||
.passive {color: #660000;}
|
||||
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.alertwarning {color: #FF0000; font-weight: bold}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
.greenannounce {color: #00ff00; font-weight: bold;}
|
||||
.rose {color: #ff5050;}
|
||||
.info {color: #0000CC;}
|
||||
.notice {color: #000099;}
|
||||
.boldnotice {color: #000099; font-weight: bold;}
|
||||
.adminnotice {color: #0000ff;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.green {color: #03ff39;}
|
||||
.red {color: #FF0000;}
|
||||
.pink {color: #FF69Bf;}
|
||||
.blue {color: #0000FF;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
|
||||
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
|
||||
.shadowling {color: #3b2769;}
|
||||
.cult {color: #960000;}
|
||||
|
||||
.cultitalic {color: #960000; font-style: italic;}
|
||||
.cultbold {color: #960000; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
|
||||
.colossus {color: #7F282A; font-size: 40px;}
|
||||
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #660099; font-style: italic;}
|
||||
.purple {color: #5e2d79;}
|
||||
.holoparasite {color: #35333a;}
|
||||
|
||||
.revennotice {color: #1d2953;}
|
||||
.revenboldnotice {color: #1d2953; font-weight: bold;}
|
||||
.revenbignotice {color: #1d2953; font-weight: bold; font-size: 24px;}
|
||||
.revenminor {color: #823abb}
|
||||
.revenwarning {color: #760fbb; font-style: italic;}
|
||||
.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
|
||||
.umbra {color: #5000A0;}
|
||||
.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
|
||||
.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
|
||||
|
||||
.brass {color: #BE8700;}
|
||||
.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
|
||||
.large_brass {color: #BE8700; font-size: 24px;}
|
||||
.big_brass {color: #BE8700; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;}
|
||||
.alloy {color: #42474D;}
|
||||
.heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nezbere {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_small {color: #42474D;}
|
||||
.sevtug_large {color: #AF0AAF; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.sevtug {color: #AF0AAF; font-weight: bold; font-style: italic;}
|
||||
.sevtug_small {color: #AF0AAF;}
|
||||
.inathneq_large {color: #1E8CE1; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.inathneq {color: #1E8CE1; font-weight: bold; font-style: italic;}
|
||||
.inathneq_small {color: #1E8CE1;}
|
||||
.nzcrentr_large {color: #DAAA18; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr {color: #DAAA18; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr_small {color: #DAAA18;}
|
||||
.neovgre_large {color: #6E001A; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.neovgre {color: #6E001A; font-weight: bold; font-style: italic;}
|
||||
.neovgre_small {color: #6E001A;}
|
||||
|
||||
.newscaster {color: #800000;}
|
||||
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
|
||||
|
||||
.alien {color: #543354;}
|
||||
.noticealien {color: #00c000;}
|
||||
.alertalien {color: #00c000; font-weight: bold;}
|
||||
.changeling {color: #800080; font-style: italic;}
|
||||
|
||||
.spider {color: #4d004d;}
|
||||
|
||||
.interface {color: #330033;}
|
||||
|
||||
.sans {font-family: "Comic Sans MS", cursive, sans-serif;}
|
||||
.papyrus {font-family: "Papyrus", cursive, sans-serif;}
|
||||
.robot {font-family: "Courier New", cursive, sans-serif;}
|
||||
|
||||
.command_headset {font-weight: bold; font-size: 24px;}
|
||||
.small {font-size: 8px;}
|
||||
.big {font-size: 24px;}
|
||||
.reallybig {font-size: 32px;}
|
||||
.extremelybig {font-size: 40px;}
|
||||
.greentext {color: #00FF00; font-size: 24px;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
@keyframes velvet {
|
||||
0% { color: #400020; }
|
||||
40% { color: #FF0000; }
|
||||
50% { color: #FF8888; }
|
||||
60% { color: #FF0000; }
|
||||
100% { color: #400020; }
|
||||
}
|
||||
|
||||
.hypnophrase {color: #202020; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #202020; }
|
||||
25% { color: #4b02ac; }
|
||||
50% { color: #9f41f1; }
|
||||
75% { color: #541c9c; }
|
||||
100% { color: #7adbf3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #f75a5a; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #f75a5a; }
|
||||
}
|
||||
|
||||
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
.memo {color: #638500; text-align: center;}
|
||||
.memoedit {text-align: center; font-size: 16px;}
|
||||
.abductor {color: #800080; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.slime {color: #00CED1;}
|
||||
.drone {color: #848482;}
|
||||
.monkey {color: #975032;}
|
||||
.swarmer {color: #2C75FF;}
|
||||
.resonate {color: #298F85;}
|
||||
|
||||
.monkeyhive {color: #774704;}
|
||||
.monkeylead {color: #774704; font-size: 2;}
|
||||
|
||||
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
|
||||
.connectionClosed.restored {background: green;}
|
||||
.internal.boldnshit {color: #000099; font-weight: bold;}
|
||||
|
||||
/* HELPER CLASSES */
|
||||
.text-normal {font-weight: normal; font-style: normal;}
|
||||
.hidden {display: none; visibility: hidden;}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
|
||||
for(var/I2 in items_list)
|
||||
if(istype(I, I2))
|
||||
qdel(I)
|
||||
@@ -36,6 +37,7 @@
|
||||
return
|
||||
say("Hello there, I'm Bartholomew, Jacqueline's Familiar.")
|
||||
sleep(20)
|
||||
|
||||
say("I'm currently seeking items to put into my pot, if we get the right items, it should crystalise into a magic candy!")
|
||||
if(!iscarbon(user))
|
||||
say("Though... I'm not sure you can help me.")
|
||||
@@ -52,6 +54,15 @@
|
||||
message += "currently seem to have the most magic potential."
|
||||
sleep(15)
|
||||
say("[message]")
|
||||
sleep(15)
|
||||
//To help people find her
|
||||
for(var/mob/living/simple_animal/jacq/J in GLOB.simple_animals[1])
|
||||
var/turf/L1 = J.loc
|
||||
if(!L1) //Incase someone uh.. puts her in a locker
|
||||
return
|
||||
var/area/L2 = L1.loc
|
||||
if(L2)
|
||||
say("Also, it seems that Jacqueline is currently at the [L2], if you're looking for her too.")
|
||||
|
||||
/obj/item/barthpot/proc/generate_items()
|
||||
var/length = LAZYLEN(items_list)
|
||||
@@ -64,79 +75,70 @@
|
||||
/obj/item/clothing/head/that = 1,
|
||||
/obj/item/clothing/head/ushanka = 1,
|
||||
/obj/item/clothing/head/welding = 1,
|
||||
/obj/item/clothing/mask/gas = 15,
|
||||
/obj/item/clothing/mask/gas = 10,
|
||||
/obj/item/clothing/suit/hazardvest = 1,
|
||||
/obj/item/clothing/under/rank/vice = 1,
|
||||
/obj/item/clothing/suit/hooded/flashsuit = 2,
|
||||
/obj/item/clothing/accessory/medal/greytide = 1,
|
||||
/obj/item/clothing/suit/hooded/flashsuit = 1,
|
||||
/obj/item/assembly/prox_sensor = 4,
|
||||
/obj/item/assembly/timer = 3,
|
||||
/obj/item/flashlight = 4,
|
||||
/obj/item/flashlight = 6,
|
||||
/obj/item/flashlight/pen = 1,
|
||||
/obj/effect/spawner/lootdrop/glowstick = 4,
|
||||
/obj/effect/spawner/lootdrop/mre = 3,
|
||||
/obj/item/flashlight/glowstick = 4,
|
||||
/obj/item/multitool = 2,
|
||||
/obj/item/radio/off = 2,
|
||||
/obj/item/radio = 2,
|
||||
/obj/item/t_scanner = 5,
|
||||
/obj/item/airlock_painter = 1,
|
||||
/obj/item/stack/cable_coil/ = 4,
|
||||
/obj/item/stack/cable_coil = 6,
|
||||
/obj/item/stack/medical/bruise_pack = 1,
|
||||
/obj/item/stack/rods = 3,
|
||||
/obj/item/stack/sheet/cardboard = 2,
|
||||
/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/sheet/mineral/plasma = 1,
|
||||
/obj/item/stack/sheet/rglass = 1,
|
||||
/obj/item/book/manual/wiki/engineering_construction = 1,
|
||||
/obj/item/book/manual/wiki/engineering_hacking = 1,
|
||||
/obj/item/clothing/head/cone = 1,
|
||||
/obj/item/coin/silver = 1,
|
||||
/obj/item/coin/twoheaded = 1,
|
||||
/obj/item/poster/random_contraband = 1,
|
||||
/obj/item/poster/random_official = 1,
|
||||
/obj/item/crowbar = 1,
|
||||
/obj/item/coin = 2,
|
||||
/obj/item/crowbar = 3,
|
||||
/obj/item/crowbar/red = 1,
|
||||
/obj/item/extinguisher = 11,
|
||||
/obj/item/extinguisher = 3,
|
||||
/obj/item/hand_labeler = 1,
|
||||
/obj/item/paper/crumpled = 1,
|
||||
/obj/item/pen = 1,
|
||||
/obj/item/paper = 4,
|
||||
/obj/item/pen = 3,
|
||||
/obj/item/reagent_containers/spray/pestspray = 1,
|
||||
/obj/item/reagent_containers/rag = 3,
|
||||
/obj/item/stock_parts/cell = 3,
|
||||
/obj/item/storage/belt/utility = 2,
|
||||
/obj/item/storage/box = 2,
|
||||
/obj/item/storage/box = 4,
|
||||
/obj/item/storage/box/cups = 1,
|
||||
/obj/item/storage/box/donkpockets = 1,
|
||||
/obj/item/storage/box/lights/mixed = 3,
|
||||
/obj/item/storage/box/hug/medical = 1,
|
||||
/obj/item/storage/fancy/cigarettes/dromedaryco = 1,
|
||||
/obj/item/storage/toolbox/mechanical = 1,
|
||||
/obj/item/storage/fancy/cigarettes = 1,
|
||||
/obj/item/storage/toolbox = 1,
|
||||
/obj/item/screwdriver = 3,
|
||||
/obj/item/tank/internals/emergency_oxygen = 2,
|
||||
/obj/item/vending_refill/cola = 1,
|
||||
/obj/item/weldingtool = 3,
|
||||
/obj/item/wirecutters = 1,
|
||||
/obj/item/wirecutters = 2,
|
||||
/obj/item/wrench = 4,
|
||||
/obj/item/relic = 3,
|
||||
/obj/item/weaponcrafting/receiver = 2,
|
||||
/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/clothing/head/cone = 2,
|
||||
/obj/item/grenade/smokebomb = 2,
|
||||
/obj/item/grenade/smokebomb = 1,
|
||||
/obj/item/geiger_counter = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 1,
|
||||
/obj/item/radio/headset = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 5,
|
||||
/obj/item/assembly/infra = 1,
|
||||
/obj/item/assembly/igniter = 2,
|
||||
/obj/item/assembly/signaler = 2,
|
||||
/obj/item/assembly/mousetrap = 2,
|
||||
/obj/item/reagent_containers/syringe = 2,
|
||||
/obj/item/assembly/mousetrap = 5,
|
||||
/obj/item/reagent_containers/syringe = 5,
|
||||
/obj/item/clothing/gloves = 8,
|
||||
/obj/item/clothing/shoes/laceup = 1,
|
||||
/obj/item/storage/secure/briefcase = 3,
|
||||
/obj/item/storage/toolbox/artistic = 2,
|
||||
/obj/item/toy/eightball = 1,
|
||||
/obj/item/reagent_containers/pill/floorpill = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches/maint = 2,
|
||||
/obj/item/clothing/shoes = 2)
|
||||
if(length == 5)
|
||||
/obj/item/reagent_containers/pill = 2,
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches/maint = 1,
|
||||
/obj/item/clothing/shoes = 8)
|
||||
if(length >= 5)
|
||||
return TRUE
|
||||
//var/metalist = pickweight(GLOB.maintenance_loot)
|
||||
for(var/i = length, i <= 5, i+=1)
|
||||
@@ -144,5 +146,18 @@
|
||||
if(!item)
|
||||
i-=1
|
||||
continue
|
||||
for(var/obj/item_dupe in items_list) //No duplicates
|
||||
if(item_dupe == item)
|
||||
i-=1
|
||||
continue
|
||||
items_list += item
|
||||
return TRUE
|
||||
|
||||
/obj/item/pinpointer/jacq
|
||||
name = "The Jacq-Tracq"
|
||||
desc = "A handheld tracking device that locks onto witchy signals."
|
||||
|
||||
/obj/item/pinpointer/jacq/attack_self(mob/living/user)
|
||||
for(var/mob/living/simple_animal/jacq/J in GLOB.simple_animals[1])
|
||||
target = J
|
||||
..()
|
||||
|
||||
@@ -40,18 +40,22 @@
|
||||
speech_span = "spooky"
|
||||
friendly = "pets"
|
||||
response_help = "chats with"
|
||||
light_range = 3
|
||||
light_color = "#ff9842"
|
||||
var/last_poof
|
||||
var/progression = list() //Keep track of where people are in the story.
|
||||
var/active = TRUE //Turn this to false to keep normal mob behavour
|
||||
var/cached_z
|
||||
|
||||
/mob/living/simple_animal/jacq/Initialize()
|
||||
..()
|
||||
cached_z = z
|
||||
poof()
|
||||
|
||||
/mob/living/simple_animal/jacq/Life()
|
||||
..()
|
||||
if(!ckey)
|
||||
if((last_poof+4 MINUTES) < world.realtime)
|
||||
if((last_poof+3 MINUTES) < world.realtime)
|
||||
poof()
|
||||
|
||||
/mob/living/simple_animal/jacq/Destroy() //I.e invincible
|
||||
@@ -64,7 +68,7 @@
|
||||
/mob/living/simple_animal/jacq/death() //What is alive may never die
|
||||
visible_message("<b>[src]</b> cackles, <span class='spooky'>\"You'll nae get rid a me that easily!\"</span>")
|
||||
playsound(loc, 'sound/spookoween/ahaha.ogg', 100, 0.25)
|
||||
health = 20
|
||||
health = 25
|
||||
poof()
|
||||
|
||||
/mob/living/simple_animal/jacq/attack_hand(mob/living/carbon/human/M)
|
||||
@@ -96,14 +100,37 @@
|
||||
s.start()
|
||||
visible_message("<b>[src]</b> disappears in a puff of smoke!")
|
||||
canmove = TRUE
|
||||
health = 25
|
||||
|
||||
var/hp_list = list()
|
||||
for(var/obj/machinery/holopad/hp in world)
|
||||
hp_list += hp
|
||||
|
||||
var/obj/machinery/holopad/hp = pick(hp_list)
|
||||
if(forceMove(pick(hp.loc)))
|
||||
return TRUE
|
||||
var/nono_areas = list("AI Chamber", "AI Satellite Antechamber", "AI Satellite Foyer")
|
||||
|
||||
for(var/i = 0, i <= 5, i+=1) //Attempts a jump 6 times.
|
||||
var/obj/machinery/holopad/hp = pick(hp_list)
|
||||
if(forceMove(pick(hp.loc)))
|
||||
|
||||
for(var/no_area in nono_areas)
|
||||
var/turf/L1 = hp.loc
|
||||
if(!L1) //Incase the area isn't a turf (i.e. in a locker)
|
||||
continue
|
||||
var/area/L2 = L1.loc
|
||||
if(L2)
|
||||
if(no_area == L2.name)
|
||||
continue
|
||||
|
||||
//Try to go to populated areas
|
||||
var/list/seen = viewers(8, get_turf(src))
|
||||
for(var/victim in seen)
|
||||
if(ishuman(victim))
|
||||
if(z == cached_z)
|
||||
return TRUE
|
||||
|
||||
if(z == cached_z)//same z level please, if no humans
|
||||
return TRUE
|
||||
|
||||
|
||||
return FALSE
|
||||
|
||||
@@ -129,7 +156,7 @@
|
||||
if(!progression["[C.real_name]"] || !(progression["[C.real_name]"] & JACQ_HELLO))
|
||||
visible_message("<b>[src]</b> smiles ominously at [C], <span class='spooky'>\"Well halo there [gender]! Ah'm Jacqueline, tae great Pumpqueen, great tae meet ye.\"</span>")
|
||||
sleep(20)
|
||||
visible_message("<b>[src]</b> continues, says, <span class='spooky'>\"Ah'm sure yae well stunned, but ah've got nae taem fer that. Ah'm after the candies around this station. If yae get mae enoof o the wee buggers, Ah'll give ye a treat, or if yae feeling bold, Ah ken trick ye instead.</span>\" giving [C] a wide grin.")
|
||||
visible_message("<b>[src]</b> continues, <span class='spooky'>\"Ah'm sure yae well stunned, but ah've got nae taem fer that. Ah'm after the candies around this station. If yae get mae enoof o the wee buggers, Ah'll give ye a treat, or if yae feeling bold, Ah ken trick ye instead.</span>\" giving [C] a wide grin.")
|
||||
if(!progression["[C.real_name]"])
|
||||
progression["[C.real_name]"] = NONE //TO MAKE SURE THAT THE LIST ENTRY EXISTS.
|
||||
|
||||
@@ -153,11 +180,21 @@
|
||||
|
||||
/mob/living/simple_animal/jacq/proc/treat(mob/living/carbon/C, gender)
|
||||
visible_message("<b>[src]</b> gives off a glowing smile, <span class='spooky'>\"What ken Ah offer ye? I can magic up an object, a potion or a plushie fer ye.\"</span>")
|
||||
var/choices_reward = list("Object - 3 candies", "Potion - 2 candies", "Plushie - 1 candy", "Can I ask you a question instead?")
|
||||
var/choices_reward = list("Object - 3 candies", "Potion - 2 candies", "Jacqueline Tracker - 2 candies", "Plushie - 1 candy", "Can I get to know you instead?", "Become a pumpkinhead dullahan (perma) - 4 candies")
|
||||
var/choice_reward = input(usr, "Trick or Treat?", "Trick or Treat?") in choices_reward
|
||||
|
||||
//rewards
|
||||
switch(choice_reward)
|
||||
if("Become a pumpkinhead dullahan (perma) - 4 candies")
|
||||
if(!take_candies(C, 4))
|
||||
visible_message("<b>[src]</b> raises an eyebrown, <span class='spooky'>\"It's 4 candies for that [gender]! Thems the rules!\"</span>")
|
||||
return
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"Off comes your head, a pumpkin taking it's stead!\"</span>")
|
||||
C.reagents.add_reagent("pumpkinmutationtoxin", 5)
|
||||
sleep(20)
|
||||
poof()
|
||||
return
|
||||
|
||||
if("Object - 3 candies")
|
||||
if(!take_candies(C, 3))
|
||||
visible_message("<b>[src]</b> raises an eyebrown, <span class='spooky'>\"It's 3 candies per trinket [gender]! Thems the rules!\"</span>")
|
||||
@@ -169,7 +206,7 @@
|
||||
// panic()
|
||||
var/reward = new new_obj(C.loc)
|
||||
C.put_in_hands(reward)
|
||||
visible_message("<b>[src]</b> waves her hands, magicing up a [reward] from thin air, <span class='spooky'>\"There ye are [gender], enjoy! \"</span>")
|
||||
visible_message("<b>[src]</b> waves her hands, magicking up a [reward] from thin air, <span class='spooky'>\"There ye are [gender], enjoy! \"</span>")
|
||||
sleep(20)
|
||||
poof()
|
||||
return
|
||||
@@ -180,7 +217,7 @@
|
||||
|
||||
var/reward = new /obj/item/reagent_containers/potion_container(C.loc)
|
||||
C.put_in_hands(reward)
|
||||
visible_message("<b>[src]</b> waves her hands, magicing up a [reward] from thin air, <span class='spooky'>\"There ye are [gender], enjoy! \"</span>")
|
||||
visible_message("<b>[src]</b> waves her hands, magicking up a [reward] from thin air, <span class='spooky'>\"There ye are [gender], enjoy! \"</span>")
|
||||
sleep(20)
|
||||
poof()
|
||||
return
|
||||
@@ -190,13 +227,22 @@
|
||||
return
|
||||
|
||||
new /obj/item/toy/plush/random(C.loc)
|
||||
visible_message("<b>[src]</b> waves her hands, magicing up a plushie from thin air, <span class='spooky'>\"There ye are [gender], enjoy! \"</span>")
|
||||
visible_message("<b>[src]</b> waves her hands, magicking up a plushie from thin air, <span class='spooky'>\"There ye are [gender], enjoy! \"</span>")
|
||||
sleep(20)
|
||||
poof()
|
||||
return
|
||||
if("Jacqueline Tracker - 2 candies")
|
||||
if(!take_candies(C, 2))
|
||||
visible_message("<b>[src]</b> raises an eyebrow, <span class='spooky'>\"It's 1 candy per plushie [gender]! Thems the rules!\"</span>")
|
||||
return
|
||||
new /obj/item/pinpointer/jacq(C.loc)
|
||||
visible_message("<b>[src]</b> waves her hands, magicking up a tracker from thin air, <span class='spooky'>\"Feels weird to magic up a tracker fer meself but, here ye are [gender], enjoy! \"</span>")
|
||||
sleep(20)
|
||||
poof()
|
||||
return
|
||||
|
||||
//chitchats!
|
||||
if("Can I ask you a question instead?")
|
||||
if("Can I get to know you instead?")
|
||||
var/choices = list()
|
||||
//Figure out where the C is in the story
|
||||
if(!progression["[C.real_name]"]) //I really don't want to get here withoot a hello, but just to be safe
|
||||
@@ -243,25 +289,21 @@
|
||||
visible_message("<b>[src]</b> says, <span class='spooky'>\"Ave ye tried them? They're full of all sorts of reagents. Ah'm after them so ah ken magic em up an hopefully find rare stuff fer me brews. Honestly it's a lot easier magicking up tatt fer ye lot than runnin aroond on me own like. I'd ask me familiars but most a my familiars are funny fellows 'n constantly bugger off on adventures when given simple objectives like; Go grab me a tea cake or watch over me cauldron. Ah mean, ye might run into Bartholomew my cat. Ee's supposed tae be tending my cauldron, but I've nae idea where ee's got tae.\"</span>")
|
||||
progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_CANDIES
|
||||
sleep(30)
|
||||
poof()
|
||||
|
||||
if("You really came all this way for candy?")
|
||||
visible_message("<b>[src]</b> looks tae the side sheepishly, <span class='spooky'>\"Aye, well, tae be honest, Ah'm here tae see me sis, but dunnae let her knew that. She's an alchemist too like, but she dunnae use a caldron like mae, she buggered off like tae her posh ivory tower tae learn bloody chemistry instead!\"</span> <b>[src]</b> scowls, <span class='spooky'>\"She's tae black sheep o' the family too, so we dunnae see eye tae eye sometimes on alchemy. Ah mean, she puts <i> moles </i> in her brews! Ye dunnae put moles in yer brews! Yae threw your brews at tae wee bastards an blew em up!\"</span> <b>[src]</b> sighs, <span class='spooky'>\"But she's a heart o gold so.. Ah wanted tae see her an check up oon her, make sure she's okay.\"</span>")
|
||||
visible_message("<b>[src]</b> l ooks tae the side sheepishly, <span class='spooky'>\"Aye, well, tae be honest, Ah'm here tae see me sis, but dunnae let her knew that. She's an alchemist too like, but she dunnae use a caldron like mae, she buggered off like tae her posh ivory tower tae learn bloody chemistry instead!\"</span> <b>[src]</b> scowls, <span class='spooky'>\"She's tae black sheep o' the family too, so we dunnae see eye tae eye sometimes on alchemy. Ah mean, she puts <i> moles </i> in her brews! Ye dunnae put moles in yer brews! Yae threw your brews at tae wee bastards an blew em up!\"</span> <b>[src]</b> sighs, <span class='spooky'>\"But she's a heart o gold so.. Ah wanted tae see her an check up oon her, make sure she's okay.\"</span>")
|
||||
progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_FAR
|
||||
sleep(30)
|
||||
poof()
|
||||
|
||||
if("What is that on your head?")
|
||||
visible_message("<b>[src]</b> pats the pumpkin atop her head, <span class='spooky'>\"This thing? This ain't nae ordinary pumpkin! Me Ma grew this monster ooer a year o love, dedication an hard work. Honestly it felt like she loved this thing more than any of us, which Ah knew ain't true an it's not like she was hartless or anything but.. well, we had a falling oot when Ah got back home with all me stuff in tow. An all she had done is sent me owl after owl over t' last year aboot this bloody pumpkin and ah had enough. So ah took it, an put it on me head. You know, as ye do. Ah am the great Pumpqueen after all, Ah deserve this.\"</span>")
|
||||
progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_HEAD
|
||||
sleep(30)
|
||||
poof()
|
||||
|
||||
if("Are you a witch?")
|
||||
visible_message("<b>[src]</b> grumbles, <span class='spooky'>\"If ye must know, Ah got kicked oot of the witch academy fer being too much of a \"loose cannon\". A bloody loose cannon? Nae they were just pissed off Ah had the brass tae proclaim myself as the Pumpqueen! And also maybe the time Ah went and blew up one of the towers by trying tae make a huge batch of astrogen might've had something tae do with it. Ah mean it would've worked fine if the cauldrons weren't so shite and were actually upgraded by the faculty. So technically no, I'm not a witch.\"</span>")
|
||||
progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_WITCH
|
||||
sleep(30)
|
||||
poof()
|
||||
|
||||
if("So you got ex-spell-ed?")
|
||||
visible_message("<b>[src]</b> Gives you a blank look at the pun, before continuing, <span class='spooky'>\"Not quite, Ah know Ah ken get back into the academy, it's only an explosion, they happen all the time, but, tae be fair it's my fault that things came tae their explosive climax. You don't know what it's like when you're after a witch doctorate, everyone else is doing well, everyone's making new spells and the like, and I'm just good at making explosions really, or fireworks. So, Ah did something Ah knew was dangerous, because Ah had tae do something tae stand oot, but Ah know this life ain't fer me, Ah don't want tae be locked up in dusty towers, grinding reagent after reagent together, trying tae find new reactions, some of the wizards in there haven't left fer years. Ah want tae live, Ah want tae fly around on a broom, turn people into cats fer a day and disappear cackling! That's what got me into witchcraft!\"</span> she throws her arms up in the arm, spinning the pumpkin upon her head slightly. She carefully spins it back to face you, giving oot a soft sigh, <span class='spooky'>\"Ah know my mother's obsession with this dumb thing on my head is just her trying tae fill the void of me and my sis moving oot, and it really shouldn't be on my head. And Ah know that I'm really here tae get help from my sis.. She's the sensible one, and she gives good hugs.\"</span>")
|
||||
@@ -269,11 +311,10 @@
|
||||
visible_message("<b>[src]</b> says, <span class='spooky'>\"Thanks [C], Ah guess Ah didn't realise Ah needed someone tae talk tae but, I'm glad ye spent all your candies talking tae me. Funny how things seem much worse in yer head.\"</span>")
|
||||
progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_EXPELL
|
||||
sleep(30)
|
||||
poof()
|
||||
|
||||
if("Can I take you out on a date?")
|
||||
visible_message("<b>[src]</b> blushes, <span class='spooky'>\"...You want tae ask me oot on a date? Me? After all that nonsense Ah just said? It seems a waste of a candy honestly.\"</span>")
|
||||
progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_DATE
|
||||
//progression["[C.real_name]"] = progression["[C.real_name]"] | JACQ_DATE
|
||||
visible_message("<b>[src]</b> looks to the side, deep in thought.</span>")
|
||||
dating_start(C, gender)
|
||||
|
||||
@@ -285,37 +326,34 @@
|
||||
/mob/living/simple_animal/jacq/proc/trick(mob/living/carbon/C, gender)
|
||||
var/option
|
||||
if(ishuman(C))
|
||||
option = rand(1,7)
|
||||
else
|
||||
option = rand(1,6)
|
||||
else
|
||||
option = rand(1,5)
|
||||
switch(option)
|
||||
if(1)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"Hocus pocus, making friends is now your focus!\"</span>")
|
||||
var/datum/objective/brainwashing/objective = pick("Make a tasty sandwich for", "Compose a poem for", "Aquire a nice outfit to give to", "Strike up a conversation about pumpkins with", "Write a letter and deliver it to", "Give a nice hat to")
|
||||
var/message = pick("make a tasty sandwich for", "compose a poem for", "aquire a nice outfit to give to", "strike up a conversation about pumpkins with", "write a letter and deliver it to", "give a nice hat to")
|
||||
var/mob/living/L2 = pick(GLOB.player_list)
|
||||
objective += " [L2.name]."
|
||||
brainwash(C, objective)
|
||||
message += " [L2.name]."
|
||||
to_chat(C, "<span class='big warning'> You feel an overwhelming desire to [message]")
|
||||
if(2)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"Off comes your head, a pumpkin taking it's stead!\"</span>")
|
||||
C.reagents.add_reagent("pumpkinmutationtoxin", 5)
|
||||
if(3)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"If only you had a better upbringing, your ears are now full of my singing!\"</span>")
|
||||
var/client/C2 = C.client
|
||||
C2.chatOutput.sendMusic("https://a.uguu.se/rQ8FxxUQ1Xzc_SpOwOkyOwOkyPumpkinSong-PFrPrIxluWk.mp4", 1)//I hope this works!
|
||||
if(4)
|
||||
C2.chatOutput.sendMusic("https://puu.sh/ExBbv.mp4", 1)//I hope this works!
|
||||
if(3)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"You're cute little bumpkin, On your head is a pumpkin!\"</span>")
|
||||
if(C.head)
|
||||
var/obj/item/W = C.head
|
||||
C.dropItemToGround(W, TRUE)
|
||||
var/jaqc_latern = new /obj/item/clothing/head/hardhat/pumpkinhead/jaqc
|
||||
C.equip_to_slot(jaqc_latern, SLOT_HEAD, 1, 1)
|
||||
if(5)
|
||||
if(4)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"In your body there's something amiss, you'll find it's a chem made by my sis!\"</span>")
|
||||
C.reagents.add_reagent("eigenstate", 30)
|
||||
if(6)
|
||||
if(5)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"A new familiar for me, and you'll see it's thee!\"</span>")
|
||||
C.reagents.add_reagent("secretcatchem", 30)
|
||||
if(7)
|
||||
if(6)
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"While you may not be a ghost, for this sheet you'll always be it's host.\"</span>")
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.wear_suit)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "Keeps the lil buzzing buggers out of your eyes."
|
||||
icon_state = "beekeeper"
|
||||
item_state = "beekeeper"
|
||||
clothing_flags = THICKMATERIAL
|
||||
clothing_flags = THICKMATERIAL | SNUG_FIT
|
||||
|
||||
|
||||
/obj/item/clothing/suit/beekeeper_suit
|
||||
|
||||
@@ -1,372 +1,372 @@
|
||||
|
||||
//returns TRUE if this mob has sufficient access to use this object
|
||||
/obj/proc/allowed(mob/M)
|
||||
//check if it doesn't require any access at all
|
||||
if(src.check_access(null))
|
||||
return TRUE
|
||||
if(issilicon(M))
|
||||
if(ispAI(M))
|
||||
return FALSE
|
||||
return TRUE //AI can do whatever it wants
|
||||
if(IsAdminGhost(M))
|
||||
//Access can't stop the abuse
|
||||
return TRUE
|
||||
else if(istype(M) && SEND_SIGNAL(M, COMSIG_MOB_ALLOWED, src))
|
||||
return TRUE
|
||||
else if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
//if they are holding or wearing a card that has access, that works
|
||||
if(check_access(H.get_active_held_item()) || src.check_access(H.wear_id))
|
||||
return TRUE
|
||||
else if(ismonkey(M) || isalienadult(M))
|
||||
var/mob/living/carbon/george = M
|
||||
//they can only hold things :(
|
||||
if(check_access(george.get_active_held_item()))
|
||||
return TRUE
|
||||
else if(isanimal(M))
|
||||
var/mob/living/simple_animal/A = M
|
||||
if(check_access(A.get_active_held_item()) || check_access(A.access_card))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/GetAccess()
|
||||
return list()
|
||||
|
||||
/obj/item/proc/GetID()
|
||||
return null
|
||||
|
||||
/obj/proc/text2access(access_text)
|
||||
. = list()
|
||||
if(!access_text)
|
||||
return
|
||||
var/list/split = splittext(access_text,";")
|
||||
for(var/x in split)
|
||||
var/n = text2num(x)
|
||||
if(n)
|
||||
. += n
|
||||
|
||||
//Call this before using req_access or req_one_access directly
|
||||
/obj/proc/gen_access()
|
||||
//These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system.
|
||||
if(!req_access)
|
||||
req_access = list()
|
||||
for(var/a in text2access(req_access_txt))
|
||||
req_access += a
|
||||
if(!req_one_access)
|
||||
req_one_access = list()
|
||||
for(var/b in text2access(req_one_access_txt))
|
||||
req_one_access += b
|
||||
|
||||
// Check if an item has access to this object
|
||||
/obj/proc/check_access(obj/item/I)
|
||||
return check_access_list(I ? I.GetAccess() : null)
|
||||
|
||||
/obj/proc/check_access_list(list/access_list)
|
||||
gen_access()
|
||||
|
||||
if(!islist(req_access)) //something's very wrong
|
||||
return TRUE
|
||||
|
||||
if(!req_access.len && !length(req_one_access))
|
||||
return TRUE
|
||||
|
||||
if(!length(access_list) || !islist(access_list))
|
||||
return FALSE
|
||||
|
||||
for(var/req in req_access)
|
||||
if(!(req in access_list)) //doesn't have this access
|
||||
return FALSE
|
||||
|
||||
if(length(req_one_access))
|
||||
for(var/req in req_one_access)
|
||||
if(req in access_list) //has an access from the single access list
|
||||
return TRUE
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/proc/check_access_ntnet(datum/netdata/data)
|
||||
return check_access_list(data.passkey)
|
||||
|
||||
/proc/get_centcom_access(job)
|
||||
switch(job)
|
||||
if("VIP Guest")
|
||||
return list(ACCESS_CENT_GENERAL)
|
||||
if("Custodian")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("Thunderdome Overseer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER)
|
||||
if("CentCom Official")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING)
|
||||
if("Medical Officer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_MEDICAL)
|
||||
if("Death Commando")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("Research Officer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_TELEPORTER, ACCESS_CENT_STORAGE)
|
||||
if("Special Ops Officer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("Admiral")
|
||||
return get_all_centcom_access()
|
||||
if("CentCom Commander")
|
||||
return get_all_centcom_access()
|
||||
if("Emergency Response Team Commander")
|
||||
return get_ert_access("commander")
|
||||
if("Security Response Officer")
|
||||
return get_ert_access("sec")
|
||||
if("Engineer Response Officer")
|
||||
return get_ert_access("eng")
|
||||
if("Medical Response Officer")
|
||||
return get_ert_access("med")
|
||||
if("CentCom Bartender")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
|
||||
|
||||
/proc/get_all_accesses()
|
||||
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
|
||||
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
|
||||
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
|
||||
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
|
||||
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
|
||||
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
|
||||
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING)
|
||||
|
||||
/proc/get_all_centcom_access()
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN)
|
||||
|
||||
/proc/get_ert_access(class)
|
||||
switch(class)
|
||||
if("commander")
|
||||
return get_all_centcom_access()
|
||||
if("sec")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING)
|
||||
if("eng")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("med")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING)
|
||||
|
||||
/proc/get_all_syndicate_access()
|
||||
return list(ACCESS_SYNDICATE, ACCESS_SYNDICATE)
|
||||
|
||||
/proc/get_region_accesses(code)
|
||||
switch(code)
|
||||
if(0)
|
||||
return get_all_accesses()
|
||||
if(1) //station general
|
||||
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
|
||||
if(2) //security
|
||||
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,)
|
||||
if(3) //medbay
|
||||
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO)
|
||||
if(4) //research
|
||||
return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK)
|
||||
if(5) //engineering and maintenance
|
||||
return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_CE)
|
||||
if(6) //supply
|
||||
return list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_QM, ACCESS_VAULT)
|
||||
if(7) //command
|
||||
return list(ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_HOP, ACCESS_CAPTAIN, ACCESS_VAULT)
|
||||
|
||||
/proc/get_region_accesses_name(code)
|
||||
switch(code)
|
||||
if(0)
|
||||
return "All"
|
||||
if(1) //station general
|
||||
return "General"
|
||||
if(2) //security
|
||||
return "Security"
|
||||
if(3) //medbay
|
||||
return "Medbay"
|
||||
if(4) //research
|
||||
return "Research"
|
||||
if(5) //engineering and maintenance
|
||||
return "Engineering"
|
||||
if(6) //supply
|
||||
return "Supply"
|
||||
if(7) //command
|
||||
return "Command"
|
||||
|
||||
/proc/get_access_desc(A)
|
||||
switch(A)
|
||||
if(ACCESS_CARGO)
|
||||
return "Cargo Bay"
|
||||
if(ACCESS_CARGO_BOT)
|
||||
return "Delivery Chutes"
|
||||
if(ACCESS_SECURITY)
|
||||
return "Security"
|
||||
if(ACCESS_BRIG)
|
||||
return "Holding Cells"
|
||||
if(ACCESS_COURT)
|
||||
return "Courtroom"
|
||||
if(ACCESS_FORENSICS_LOCKERS)
|
||||
return "Forensics"
|
||||
if(ACCESS_MEDICAL)
|
||||
return "Medical"
|
||||
if(ACCESS_GENETICS)
|
||||
return "Genetics Lab"
|
||||
if(ACCESS_MORGUE)
|
||||
return "Morgue"
|
||||
if(ACCESS_TOX)
|
||||
return "R&D Lab"
|
||||
if(ACCESS_TOX_STORAGE)
|
||||
return "Toxins Lab"
|
||||
if(ACCESS_CHEMISTRY)
|
||||
return "Chemistry Lab"
|
||||
if(ACCESS_RD)
|
||||
return "RD Office"
|
||||
if(ACCESS_BAR)
|
||||
return "Bar"
|
||||
if(ACCESS_JANITOR)
|
||||
return "Custodial Closet"
|
||||
if(ACCESS_ENGINE)
|
||||
return "Engineering"
|
||||
if(ACCESS_ENGINE_EQUIP)
|
||||
return "Power and Engineering Equipment"
|
||||
if(ACCESS_MAINT_TUNNELS)
|
||||
return "Maintenance"
|
||||
if(ACCESS_EXTERNAL_AIRLOCKS)
|
||||
return "External Airlocks"
|
||||
if(ACCESS_EMERGENCY_STORAGE)
|
||||
return "Emergency Storage"
|
||||
if(ACCESS_CHANGE_IDS)
|
||||
return "ID Console"
|
||||
if(ACCESS_AI_UPLOAD)
|
||||
return "AI Chambers"
|
||||
if(ACCESS_TELEPORTER)
|
||||
return "Teleporter"
|
||||
if(ACCESS_EVA)
|
||||
return "EVA"
|
||||
if(ACCESS_HEADS)
|
||||
return "Bridge"
|
||||
if(ACCESS_CAPTAIN)
|
||||
return "Captain"
|
||||
if(ACCESS_ALL_PERSONAL_LOCKERS)
|
||||
return "Personal Lockers"
|
||||
if(ACCESS_CHAPEL_OFFICE)
|
||||
return "Chapel Office"
|
||||
if(ACCESS_TECH_STORAGE)
|
||||
return "Technical Storage"
|
||||
if(ACCESS_ATMOSPHERICS)
|
||||
return "Atmospherics"
|
||||
if(ACCESS_CREMATORIUM)
|
||||
return "Crematorium"
|
||||
if(ACCESS_ARMORY)
|
||||
return "Armory"
|
||||
if(ACCESS_CONSTRUCTION)
|
||||
return "Construction"
|
||||
if(ACCESS_KITCHEN)
|
||||
return "Kitchen"
|
||||
if(ACCESS_HYDROPONICS)
|
||||
return "Hydroponics"
|
||||
if(ACCESS_LIBRARY)
|
||||
return "Library"
|
||||
if(ACCESS_LAWYER)
|
||||
return "Law Office"
|
||||
if(ACCESS_ROBOTICS)
|
||||
return "Robotics"
|
||||
if(ACCESS_VIROLOGY)
|
||||
return "Virology"
|
||||
if(ACCESS_CMO)
|
||||
return "CMO Office"
|
||||
if(ACCESS_QM)
|
||||
return "Quartermaster"
|
||||
if(ACCESS_SURGERY)
|
||||
return "Surgery"
|
||||
if(ACCESS_THEATRE)
|
||||
return "Theatre"
|
||||
if(ACCESS_MANUFACTURING)
|
||||
return "Manufacturing"
|
||||
if(ACCESS_RESEARCH)
|
||||
return "Science"
|
||||
if(ACCESS_MINING)
|
||||
return "Mining"
|
||||
if(ACCESS_MINING_OFFICE)
|
||||
return "Mining Office"
|
||||
if(ACCESS_MAILSORTING)
|
||||
return "Cargo Office"
|
||||
if(ACCESS_MINT)
|
||||
return "Mint"
|
||||
if(ACCESS_MINT_VAULT)
|
||||
return "Mint Vault"
|
||||
if(ACCESS_VAULT)
|
||||
return "Main Vault"
|
||||
if(ACCESS_MINING_STATION)
|
||||
return "Mining EVA"
|
||||
if(ACCESS_XENOBIOLOGY)
|
||||
return "Xenobiology Lab"
|
||||
if(ACCESS_HOP)
|
||||
return "HoP Office"
|
||||
if(ACCESS_HOS)
|
||||
return "HoS Office"
|
||||
if(ACCESS_CE)
|
||||
return "CE Office"
|
||||
if(ACCESS_RC_ANNOUNCE)
|
||||
return "RC Announcements"
|
||||
if(ACCESS_KEYCARD_AUTH)
|
||||
return "Keycode Auth."
|
||||
if(ACCESS_TCOMSAT)
|
||||
return "Telecommunications"
|
||||
if(ACCESS_GATEWAY)
|
||||
return "Gateway"
|
||||
if(ACCESS_SEC_DOORS)
|
||||
return "Brig"
|
||||
if(ACCESS_ENTER_GENPOP)
|
||||
return "Prison Turnstile Entrance"
|
||||
if(ACCESS_LEAVE_GENPOP)
|
||||
return "Prison Turnstile Exit"
|
||||
if(ACCESS_MINERAL_STOREROOM)
|
||||
return "Mineral Storage"
|
||||
if(ACCESS_MINISAT)
|
||||
return "AI Satellite"
|
||||
if(ACCESS_WEAPONS)
|
||||
return "Weapon Permit"
|
||||
if(ACCESS_NETWORK)
|
||||
return "Network Access"
|
||||
if(ACCESS_CLONING)
|
||||
return "Cloning Room"
|
||||
|
||||
/proc/get_centcom_access_desc(A)
|
||||
switch(A)
|
||||
if(ACCESS_CENT_GENERAL)
|
||||
return "Code Grey"
|
||||
if(ACCESS_CENT_THUNDER)
|
||||
return "Code Yellow"
|
||||
if(ACCESS_CENT_STORAGE)
|
||||
return "Code Orange"
|
||||
if(ACCESS_CENT_LIVING)
|
||||
return "Code Green"
|
||||
if(ACCESS_CENT_MEDICAL)
|
||||
return "Code White"
|
||||
if(ACCESS_CENT_TELEPORTER)
|
||||
return "Code Blue"
|
||||
if(ACCESS_CENT_SPECOPS)
|
||||
return "Code Black"
|
||||
if(ACCESS_CENT_CAPTAIN)
|
||||
return "Code Gold"
|
||||
if(ACCESS_CENT_BAR)
|
||||
return "Code Scotch"
|
||||
|
||||
/proc/get_all_jobs()
|
||||
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
|
||||
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
|
||||
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist",
|
||||
"Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/proc/get_all_job_icons() //For all existing HUD icons
|
||||
return get_all_jobs() + list("Prisoner")
|
||||
|
||||
/proc/get_all_centcom_jobs()
|
||||
return list("VIP Guest","Custodian","Thunderdome Overseer","CentCom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","CentCom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","CentCom Bartender")
|
||||
|
||||
/obj/item/proc/GetJobName() //Used in secHUD icon generation
|
||||
var/obj/item/card/id/I = GetID()
|
||||
if(!I)
|
||||
return
|
||||
var/jobName = I.assignment
|
||||
if(jobName in get_all_job_icons()) //Check if the job has a hud icon
|
||||
return jobName
|
||||
if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a CentCom job
|
||||
return "CentCom"
|
||||
return "Unknown" //Return unknown if none of the above apply
|
||||
|
||||
//returns TRUE if this mob has sufficient access to use this object
|
||||
/obj/proc/allowed(mob/M)
|
||||
//check if it doesn't require any access at all
|
||||
if(src.check_access(null))
|
||||
return TRUE
|
||||
if(issilicon(M))
|
||||
if(ispAI(M))
|
||||
return FALSE
|
||||
return TRUE //AI can do whatever it wants
|
||||
if(IsAdminGhost(M))
|
||||
//Access can't stop the abuse
|
||||
return TRUE
|
||||
else if(istype(M) && SEND_SIGNAL(M, COMSIG_MOB_ALLOWED, src))
|
||||
return TRUE
|
||||
else if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
//if they are holding or wearing a card that has access, that works
|
||||
if(check_access(H.get_active_held_item()) || src.check_access(H.wear_id))
|
||||
return TRUE
|
||||
else if(ismonkey(M) || isalienadult(M))
|
||||
var/mob/living/carbon/george = M
|
||||
//they can only hold things :(
|
||||
if(check_access(george.get_active_held_item()))
|
||||
return TRUE
|
||||
else if(isanimal(M))
|
||||
var/mob/living/simple_animal/A = M
|
||||
if(check_access(A.get_active_held_item()) || check_access(A.access_card))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/GetAccess()
|
||||
return list()
|
||||
|
||||
/obj/item/proc/GetID()
|
||||
return null
|
||||
|
||||
/obj/proc/text2access(access_text)
|
||||
. = list()
|
||||
if(!access_text)
|
||||
return
|
||||
var/list/split = splittext(access_text,";")
|
||||
for(var/x in split)
|
||||
var/n = text2num(x)
|
||||
if(n)
|
||||
. += n
|
||||
|
||||
//Call this before using req_access or req_one_access directly
|
||||
/obj/proc/gen_access()
|
||||
//These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system.
|
||||
if(!req_access)
|
||||
req_access = list()
|
||||
for(var/a in text2access(req_access_txt))
|
||||
req_access += a
|
||||
if(!req_one_access)
|
||||
req_one_access = list()
|
||||
for(var/b in text2access(req_one_access_txt))
|
||||
req_one_access += b
|
||||
|
||||
// Check if an item has access to this object
|
||||
/obj/proc/check_access(obj/item/I)
|
||||
return check_access_list(I ? I.GetAccess() : null)
|
||||
|
||||
/obj/proc/check_access_list(list/access_list)
|
||||
gen_access()
|
||||
|
||||
if(!islist(req_access)) //something's very wrong
|
||||
return TRUE
|
||||
|
||||
if(!req_access.len && !length(req_one_access))
|
||||
return TRUE
|
||||
|
||||
if(!length(access_list) || !islist(access_list))
|
||||
return FALSE
|
||||
|
||||
for(var/req in req_access)
|
||||
if(!(req in access_list)) //doesn't have this access
|
||||
return FALSE
|
||||
|
||||
if(length(req_one_access))
|
||||
for(var/req in req_one_access)
|
||||
if(req in access_list) //has an access from the single access list
|
||||
return TRUE
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/proc/check_access_ntnet(datum/netdata/data)
|
||||
return check_access_list(data.passkey)
|
||||
|
||||
/proc/get_centcom_access(job)
|
||||
switch(job)
|
||||
if("VIP Guest")
|
||||
return list(ACCESS_CENT_GENERAL)
|
||||
if("Custodian")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("Thunderdome Overseer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER)
|
||||
if("CentCom Official")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING)
|
||||
if("Medical Officer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_MEDICAL)
|
||||
if("Death Commando")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("Research Officer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_TELEPORTER, ACCESS_CENT_STORAGE)
|
||||
if("Special Ops Officer")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("Admiral")
|
||||
return get_all_centcom_access()
|
||||
if("CentCom Commander")
|
||||
return get_all_centcom_access()
|
||||
if("Emergency Response Team Commander")
|
||||
return get_ert_access("commander")
|
||||
if("Security Response Officer")
|
||||
return get_ert_access("sec")
|
||||
if("Engineer Response Officer")
|
||||
return get_ert_access("eng")
|
||||
if("Medical Response Officer")
|
||||
return get_ert_access("med")
|
||||
if("CentCom Bartender")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
|
||||
|
||||
/proc/get_all_accesses()
|
||||
return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
|
||||
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
|
||||
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
|
||||
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
|
||||
ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
|
||||
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
|
||||
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
|
||||
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING)
|
||||
|
||||
/proc/get_all_centcom_access()
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN)
|
||||
|
||||
/proc/get_ert_access(class)
|
||||
switch(class)
|
||||
if("commander")
|
||||
return get_all_centcom_access()
|
||||
if("sec")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING)
|
||||
if("eng")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
|
||||
if("med")
|
||||
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING)
|
||||
|
||||
/proc/get_all_syndicate_access()
|
||||
return list(ACCESS_SYNDICATE, ACCESS_SYNDICATE)
|
||||
|
||||
/proc/get_region_accesses(code)
|
||||
switch(code)
|
||||
if(0)
|
||||
return get_all_accesses()
|
||||
if(1) //station general
|
||||
return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
|
||||
if(2) //security
|
||||
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,)
|
||||
if(3) //medbay
|
||||
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO)
|
||||
if(4) //research
|
||||
return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK)
|
||||
if(5) //engineering and maintenance
|
||||
return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_CE)
|
||||
if(6) //supply
|
||||
return list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_QM, ACCESS_VAULT)
|
||||
if(7) //command
|
||||
return list(ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_HOP, ACCESS_CAPTAIN, ACCESS_VAULT)
|
||||
|
||||
/proc/get_region_accesses_name(code)
|
||||
switch(code)
|
||||
if(0)
|
||||
return "All"
|
||||
if(1) //station general
|
||||
return "General"
|
||||
if(2) //security
|
||||
return "Security"
|
||||
if(3) //medbay
|
||||
return "Medbay"
|
||||
if(4) //research
|
||||
return "Research"
|
||||
if(5) //engineering and maintenance
|
||||
return "Engineering"
|
||||
if(6) //supply
|
||||
return "Supply"
|
||||
if(7) //command
|
||||
return "Command"
|
||||
|
||||
/proc/get_access_desc(A)
|
||||
switch(A)
|
||||
if(ACCESS_CARGO)
|
||||
return "Cargo Bay"
|
||||
if(ACCESS_CARGO_BOT)
|
||||
return "Delivery Chutes"
|
||||
if(ACCESS_SECURITY)
|
||||
return "Security Equipment"
|
||||
if(ACCESS_BRIG)
|
||||
return "Holding Cells and Prisoner Management"
|
||||
if(ACCESS_COURT)
|
||||
return "Courtroom"
|
||||
if(ACCESS_FORENSICS_LOCKERS)
|
||||
return "Forensics Lockers"
|
||||
if(ACCESS_MEDICAL)
|
||||
return "Medical"
|
||||
if(ACCESS_GENETICS)
|
||||
return "Genetics Lab"
|
||||
if(ACCESS_MORGUE)
|
||||
return "Morgue"
|
||||
if(ACCESS_TOX)
|
||||
return "R&D Lab"
|
||||
if(ACCESS_TOX_STORAGE)
|
||||
return "Toxins Lab"
|
||||
if(ACCESS_CHEMISTRY)
|
||||
return "Chemistry Lab"
|
||||
if(ACCESS_RD)
|
||||
return "RD Office"
|
||||
if(ACCESS_BAR)
|
||||
return "Bar"
|
||||
if(ACCESS_JANITOR)
|
||||
return "Custodial Closet"
|
||||
if(ACCESS_ENGINE)
|
||||
return "Engineering"
|
||||
if(ACCESS_ENGINE_EQUIP)
|
||||
return "Power and Engineering Equipment"
|
||||
if(ACCESS_MAINT_TUNNELS)
|
||||
return "Maintenance"
|
||||
if(ACCESS_EXTERNAL_AIRLOCKS)
|
||||
return "External Airlocks"
|
||||
if(ACCESS_EMERGENCY_STORAGE)
|
||||
return "Emergency Storage"
|
||||
if(ACCESS_CHANGE_IDS)
|
||||
return "ID Console"
|
||||
if(ACCESS_AI_UPLOAD)
|
||||
return "AI Chambers"
|
||||
if(ACCESS_TELEPORTER)
|
||||
return "Teleporter"
|
||||
if(ACCESS_EVA)
|
||||
return "EVA"
|
||||
if(ACCESS_HEADS)
|
||||
return "Bridge and Command Equipment"
|
||||
if(ACCESS_CAPTAIN)
|
||||
return "Captain"
|
||||
if(ACCESS_ALL_PERSONAL_LOCKERS)
|
||||
return "Personal Lockers"
|
||||
if(ACCESS_CHAPEL_OFFICE)
|
||||
return "Chapel Office"
|
||||
if(ACCESS_TECH_STORAGE)
|
||||
return "Technical Storage"
|
||||
if(ACCESS_ATMOSPHERICS)
|
||||
return "Atmospherics"
|
||||
if(ACCESS_CREMATORIUM)
|
||||
return "Crematorium"
|
||||
if(ACCESS_ARMORY)
|
||||
return "Armory"
|
||||
if(ACCESS_CONSTRUCTION)
|
||||
return "Construction"
|
||||
if(ACCESS_KITCHEN)
|
||||
return "Kitchen"
|
||||
if(ACCESS_HYDROPONICS)
|
||||
return "Hydroponics"
|
||||
if(ACCESS_LIBRARY)
|
||||
return "Library"
|
||||
if(ACCESS_LAWYER)
|
||||
return "Law Office"
|
||||
if(ACCESS_ROBOTICS)
|
||||
return "Robotics"
|
||||
if(ACCESS_VIROLOGY)
|
||||
return "Virology"
|
||||
if(ACCESS_CMO)
|
||||
return "CMO Office"
|
||||
if(ACCESS_QM)
|
||||
return "Quartermaster"
|
||||
if(ACCESS_SURGERY)
|
||||
return "Surgery"
|
||||
if(ACCESS_THEATRE)
|
||||
return "Theatre"
|
||||
if(ACCESS_MANUFACTURING)
|
||||
return "Manufacturing"
|
||||
if(ACCESS_RESEARCH)
|
||||
return "Science"
|
||||
if(ACCESS_MINING)
|
||||
return "Mining"
|
||||
if(ACCESS_MINING_OFFICE)
|
||||
return "Mining Office"
|
||||
if(ACCESS_MAILSORTING)
|
||||
return "Cargo Office"
|
||||
if(ACCESS_MINT)
|
||||
return "Mint"
|
||||
if(ACCESS_MINT_VAULT)
|
||||
return "Mint Vault"
|
||||
if(ACCESS_VAULT)
|
||||
return "Main Vault"
|
||||
if(ACCESS_MINING_STATION)
|
||||
return "Mining EVA"
|
||||
if(ACCESS_XENOBIOLOGY)
|
||||
return "Xenobiology Lab"
|
||||
if(ACCESS_HOP)
|
||||
return "HoP Office"
|
||||
if(ACCESS_HOS)
|
||||
return "HoS Office"
|
||||
if(ACCESS_CE)
|
||||
return "CE Office"
|
||||
if(ACCESS_RC_ANNOUNCE)
|
||||
return "RC Announcements"
|
||||
if(ACCESS_KEYCARD_AUTH)
|
||||
return "Keycode Auth."
|
||||
if(ACCESS_TCOMSAT)
|
||||
return "Telecommunications"
|
||||
if(ACCESS_GATEWAY)
|
||||
return "Gateway"
|
||||
if(ACCESS_SEC_DOORS)
|
||||
return "Security SubDepartment Doors"
|
||||
if(ACCESS_ENTER_GENPOP)
|
||||
return "Prison Turnstile Entrance"
|
||||
if(ACCESS_LEAVE_GENPOP)
|
||||
return "Prison Turnstile Exit"
|
||||
if(ACCESS_MINERAL_STOREROOM)
|
||||
return "Mineral Storage"
|
||||
if(ACCESS_MINISAT)
|
||||
return "AI Satellite"
|
||||
if(ACCESS_WEAPONS)
|
||||
return "Weapon Permit"
|
||||
if(ACCESS_NETWORK)
|
||||
return "Network Access"
|
||||
if(ACCESS_CLONING)
|
||||
return "Cloning Room"
|
||||
|
||||
/proc/get_centcom_access_desc(A)
|
||||
switch(A)
|
||||
if(ACCESS_CENT_GENERAL)
|
||||
return "Code Grey"
|
||||
if(ACCESS_CENT_THUNDER)
|
||||
return "Code Yellow"
|
||||
if(ACCESS_CENT_STORAGE)
|
||||
return "Code Orange"
|
||||
if(ACCESS_CENT_LIVING)
|
||||
return "Code Green"
|
||||
if(ACCESS_CENT_MEDICAL)
|
||||
return "Code White"
|
||||
if(ACCESS_CENT_TELEPORTER)
|
||||
return "Code Blue"
|
||||
if(ACCESS_CENT_SPECOPS)
|
||||
return "Code Black"
|
||||
if(ACCESS_CENT_CAPTAIN)
|
||||
return "Code Gold"
|
||||
if(ACCESS_CENT_BAR)
|
||||
return "Code Scotch"
|
||||
|
||||
/proc/get_all_jobs()
|
||||
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
|
||||
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
|
||||
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist",
|
||||
"Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/proc/get_all_job_icons() //For all existing HUD icons
|
||||
return get_all_jobs() + list("Prisoner")
|
||||
|
||||
/proc/get_all_centcom_jobs()
|
||||
return list("VIP Guest","Custodian","Thunderdome Overseer","CentCom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","CentCom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","CentCom Bartender")
|
||||
|
||||
/obj/item/proc/GetJobName() //Used in secHUD icon generation
|
||||
var/obj/item/card/id/I = GetID()
|
||||
if(!I)
|
||||
return
|
||||
var/jobName = I.assignment
|
||||
if(jobName in get_all_job_icons()) //Check if the job has a hud icon
|
||||
return jobName
|
||||
if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a CentCom job
|
||||
return "CentCom"
|
||||
return "Unknown" //Return unknown if none of the above apply
|
||||
|
||||
@@ -61,6 +61,9 @@
|
||||
|
||||
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
|
||||
|
||||
//If a job complies with dresscodes, loadout items will not be equipped instead of the job's outfit, instead placing the items into the player's backpack.
|
||||
var/dresscodecompliant = TRUE
|
||||
|
||||
//Only override this proc
|
||||
//H is usually a human unless an /equip override transformed it
|
||||
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
|
||||
|
||||
@@ -15,6 +15,7 @@ Assistant
|
||||
outfit = /datum/outfit/job/assistant
|
||||
antag_rep = 7
|
||||
display_order = JOB_DISPLAY_ORDER_ASSISTANT
|
||||
dresscodecompliant = FALSE
|
||||
|
||||
/datum/job/assistant/get_access()
|
||||
if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ENGINE,
|
||||
ACCESS_ENGINE_EQUIP, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
|
||||
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
|
||||
|
||||
/datum/outfit/job/atmos
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#aac1ee"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
minimal_player_age = 20
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type = EXP_TYPE_COMMAND
|
||||
exp_type_department = EXP_TYPE_COMMAND
|
||||
|
||||
outfit = /datum/outfit/job/captain
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
|
||||
outfit = /datum/outfit/job/cargo_tech
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING,
|
||||
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
|
||||
|
||||
@@ -32,5 +32,7 @@
|
||||
satchel = /obj/item/storage/backpack/satchel/chem
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/med
|
||||
|
||||
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
|
||||
|
||||
chameleon_extras = /obj/item/gun/syringe
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ee7400"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_ENGINEERING
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
supervisors = "the captain"
|
||||
selection_color = "#509ed1"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_MEDICAL
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
supervisors = "the captain"
|
||||
selection_color = "#3a8529"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 10
|
||||
minimal_player_age = 20
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SERVICE
|
||||
@@ -21,13 +21,13 @@
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
supervisors = "the captain"
|
||||
selection_color = "#b90000"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 300
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SECURITY
|
||||
|
||||
@@ -32,4 +32,6 @@
|
||||
satchel = /obj/item/storage/backpack/satchel/med
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/med
|
||||
|
||||
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
|
||||
|
||||
chameleon_extras = /obj/item/gun/syringe
|
||||
|
||||
@@ -11,17 +11,19 @@
|
||||
supervisors = "the captain"
|
||||
selection_color = "#a06121"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SUPPLY
|
||||
|
||||
outfit = /datum/outfit/job/quartermaster
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION,
|
||||
ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING,
|
||||
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING,
|
||||
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_KEYCARD_AUTH, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_SEC_DOORS, ACCESS_HEADS)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING,
|
||||
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_KEYCARD_AUTH, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_SEC_DOORS, ACCESS_HEADS)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
@@ -31,11 +33,13 @@
|
||||
jobtype = /datum/job/qm
|
||||
|
||||
belt = /obj/item/pda/quartermaster
|
||||
ears = /obj/item/radio/headset/headset_cargo
|
||||
ears = /obj/item/radio/headset/heads/qm
|
||||
uniform = /obj/item/clothing/under/rank/cargo
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
l_hand = /obj/item/clipboard
|
||||
id = /obj/item/card/id/silver
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic = 1, /obj/item/modular_computer/tablet/preset/advanced = 1)
|
||||
|
||||
chameleon_extras = /obj/item/stamp/qm
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
supervisors = "the captain"
|
||||
selection_color = "#7544cc"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
minimal_player_age = 10
|
||||
exp_type_department = EXP_TYPE_SCIENCE
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
|
||||
outfit = /datum/outfit/job/miner
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING,
|
||||
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
|
||||
@@ -47,7 +48,7 @@
|
||||
name = "Shaft Miner (Asteroid)"
|
||||
uniform = /obj/item/clothing/under/rank/miner
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
|
||||
|
||||
/datum/outfit/job/miner/equipped
|
||||
name = "Shaft Miner (Lavaland + Equipment)"
|
||||
suit = /obj/item/clothing/suit/hooded/explorer/standard
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
|
||||
r_pocket = /obj/item/assembly/flash/handheld
|
||||
l_pocket = /obj/item/restraints/handcuffs
|
||||
suit_store = /obj/item/gun/energy/e_gun/advtaser
|
||||
suit_store = /obj/item/gun/energy/pumpaction/defender
|
||||
backpack_contents = list(/obj/item/melee/baton/loaded=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/security
|
||||
|
||||
@@ -468,3 +468,6 @@
|
||||
bodyparts += BP
|
||||
hand_bodyparts[i] = BP
|
||||
..() //Don't redraw hands until we have organs for them
|
||||
|
||||
/mob/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
|
||||
return ..() && (user == src)
|
||||
|
||||
@@ -975,4 +975,635 @@ GLOBAL_LIST_INIT(vox_sounds, list("abduction" = 'sound/vox_fem/abduction.ogg',
|
||||
"zombie" = 'sound/vox_fem/zombie.ogg',
|
||||
"zone" = 'sound/vox_fem/zone.ogg',
|
||||
"zulu" = 'sound/vox_fem/zulu.ogg'))
|
||||
|
||||
//for vim
|
||||
// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g
|
||||
GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'sound/vox/_comma.ogg',
|
||||
"." = 'sound/vox/_period.ogg',
|
||||
"a" = 'sound/vox/a.ogg',
|
||||
"accelerating" = 'sound/vox/accelerating.ogg',
|
||||
"accelerator" = 'sound/vox/accelerator.ogg',
|
||||
"accepted" = 'sound/vox/accepted.ogg',
|
||||
"access" = 'sound/vox/access.ogg',
|
||||
"acknowledge" = 'sound/vox/acknowledge.ogg',
|
||||
"acknowledged" = 'sound/vox/acknowledged.ogg',
|
||||
"acquired" = 'sound/vox/acquired.ogg',
|
||||
"acquisition" = 'sound/vox/acquisition.ogg',
|
||||
"across" = 'sound/vox/across.ogg',
|
||||
"activate" = 'sound/vox/activate.ogg',
|
||||
"activated" = 'sound/vox/activated.ogg',
|
||||
"activity" = 'sound/vox/activity.ogg',
|
||||
"adios" = 'sound/vox/adios.ogg',
|
||||
"administration" = 'sound/vox/administration.ogg',
|
||||
"advanced" = 'sound/vox/advanced.ogg',
|
||||
"after" = 'sound/vox/after.ogg',
|
||||
"agent" = 'sound/vox/agent.ogg',
|
||||
"alarm" = 'sound/vox/alarm.ogg',
|
||||
"alert" = 'sound/vox/alert.ogg',
|
||||
"alien" = 'sound/vox/alien.ogg',
|
||||
"aligned" = 'sound/vox/aligned.ogg',
|
||||
"all" = 'sound/vox/all.ogg',
|
||||
"alpha" = 'sound/vox/alpha.ogg',
|
||||
"am" = 'sound/vox/am.ogg',
|
||||
"amigo" = 'sound/vox/amigo.ogg',
|
||||
"ammunition" = 'sound/vox/ammunition.ogg',
|
||||
"an" = 'sound/vox/an.ogg',
|
||||
"and" = 'sound/vox/and.ogg',
|
||||
"announcement" = 'sound/vox/announcement.ogg',
|
||||
"anomalous" = 'sound/vox/anomalous.ogg',
|
||||
"antenna" = 'sound/vox/antenna.ogg',
|
||||
"any" = 'sound/vox/any.ogg',
|
||||
"apprehend" = 'sound/vox/apprehend.ogg',
|
||||
"approach" = 'sound/vox/approach.ogg',
|
||||
"are" = 'sound/vox/are.ogg',
|
||||
"area" = 'sound/vox/area.ogg',
|
||||
"arm" = 'sound/vox/arm.ogg',
|
||||
"armed" = 'sound/vox/armed.ogg',
|
||||
"armor" = 'sound/vox/armor.ogg',
|
||||
"armory" = 'sound/vox/armory.ogg',
|
||||
"arrest" = 'sound/vox/arrest.ogg',
|
||||
"ass" = 'sound/vox/ass.ogg',
|
||||
"at" = 'sound/vox/at.ogg',
|
||||
"atomic" = 'sound/vox/atomic.ogg',
|
||||
"attention" = 'sound/vox/attention.ogg',
|
||||
"authorize" = 'sound/vox/authorize.ogg',
|
||||
"authorized" = 'sound/vox/authorized.ogg',
|
||||
"automatic" = 'sound/vox/automatic.ogg',
|
||||
"away" = 'sound/vox/away.ogg',
|
||||
"b" = 'sound/vox/b.ogg',
|
||||
"back" = 'sound/vox/back.ogg',
|
||||
"backman" = 'sound/vox/backman.ogg',
|
||||
"bad" = 'sound/vox/bad.ogg',
|
||||
"bag" = 'sound/vox/bag.ogg',
|
||||
"bailey" = 'sound/vox/bailey.ogg',
|
||||
"barracks" = 'sound/vox/barracks.ogg',
|
||||
"base" = 'sound/vox/base.ogg',
|
||||
"bay" = 'sound/vox/bay.ogg',
|
||||
"be" = 'sound/vox/be.ogg',
|
||||
"been" = 'sound/vox/been.ogg',
|
||||
"before" = 'sound/vox/before.ogg',
|
||||
"beyond" = 'sound/vox/beyond.ogg',
|
||||
"biohazard" = 'sound/vox/biohazard.ogg',
|
||||
"biological" = 'sound/vox/biological.ogg',
|
||||
"birdwell" = 'sound/vox/birdwell.ogg',
|
||||
"bizwarn" = 'sound/vox/bizwarn.ogg',
|
||||
"black" = 'sound/vox/black.ogg',
|
||||
"blast" = 'sound/vox/blast.ogg',
|
||||
"blocked" = 'sound/vox/blocked.ogg',
|
||||
"bloop" = 'sound/vox/bloop.ogg',
|
||||
"blue" = 'sound/vox/blue.ogg',
|
||||
"bottom" = 'sound/vox/bottom.ogg',
|
||||
"bravo" = 'sound/vox/bravo.ogg',
|
||||
"breach" = 'sound/vox/breach.ogg',
|
||||
"breached" = 'sound/vox/breached.ogg',
|
||||
"break" = 'sound/vox/break.ogg',
|
||||
"bridge" = 'sound/vox/bridge.ogg',
|
||||
"bust" = 'sound/vox/bust.ogg',
|
||||
"but" = 'sound/vox/but.ogg',
|
||||
"button" = 'sound/vox/button.ogg',
|
||||
"buzwarn" = 'sound/vox/buzwarn.ogg',
|
||||
"bypass" = 'sound/vox/bypass.ogg',
|
||||
"c" = 'sound/vox/c.ogg',
|
||||
"cable" = 'sound/vox/cable.ogg',
|
||||
"call" = 'sound/vox/call.ogg',
|
||||
"called" = 'sound/vox/called.ogg',
|
||||
"canal" = 'sound/vox/canal.ogg',
|
||||
"cap" = 'sound/vox/cap.ogg',
|
||||
"captain" = 'sound/vox/captain.ogg',
|
||||
"capture" = 'sound/vox/capture.ogg',
|
||||
"captured" = 'sound/vox/captured.ogg',
|
||||
"ceiling" = 'sound/vox/ceiling.ogg',
|
||||
"celsius" = 'sound/vox/celsius.ogg',
|
||||
"center" = 'sound/vox/center.ogg',
|
||||
"centi" = 'sound/vox/centi.ogg',
|
||||
"central" = 'sound/vox/central.ogg',
|
||||
"chamber" = 'sound/vox/chamber.ogg',
|
||||
"charlie" = 'sound/vox/charlie.ogg',
|
||||
"check" = 'sound/vox/check.ogg',
|
||||
"checkpoint" = 'sound/vox/checkpoint.ogg',
|
||||
"chemical" = 'sound/vox/chemical.ogg',
|
||||
"cleanup" = 'sound/vox/cleanup.ogg',
|
||||
"clear" = 'sound/vox/clear.ogg',
|
||||
"clearance" = 'sound/vox/clearance.ogg',
|
||||
"close" = 'sound/vox/close.ogg',
|
||||
"clown" = 'sound/vox/clown.ogg',
|
||||
"code" = 'sound/vox/code.ogg',
|
||||
"coded" = 'sound/vox/coded.ogg',
|
||||
"collider" = 'sound/vox/collider.ogg',
|
||||
"command" = 'sound/vox/command.ogg',
|
||||
"communication" = 'sound/vox/communication.ogg',
|
||||
"complex" = 'sound/vox/complex.ogg',
|
||||
"computer" = 'sound/vox/computer.ogg',
|
||||
"condition" = 'sound/vox/condition.ogg',
|
||||
"containment" = 'sound/vox/containment.ogg',
|
||||
"contamination" = 'sound/vox/contamination.ogg',
|
||||
"control" = 'sound/vox/control.ogg',
|
||||
"coolant" = 'sound/vox/coolant.ogg',
|
||||
"coomer" = 'sound/vox/coomer.ogg',
|
||||
"core" = 'sound/vox/core.ogg',
|
||||
"correct" = 'sound/vox/correct.ogg',
|
||||
"corridor" = 'sound/vox/corridor.ogg',
|
||||
"crew" = 'sound/vox/crew.ogg',
|
||||
"cross" = 'sound/vox/cross.ogg',
|
||||
"cryogenic" = 'sound/vox/cryogenic.ogg',
|
||||
"d" = 'sound/vox/d.ogg',
|
||||
"dadeda" = 'sound/vox/dadeda.ogg',
|
||||
"damage" = 'sound/vox/damage.ogg',
|
||||
"damaged" = 'sound/vox/damaged.ogg',
|
||||
"danger" = 'sound/vox/danger.ogg',
|
||||
"day" = 'sound/vox/day.ogg',
|
||||
"deactivated" = 'sound/vox/deactivated.ogg',
|
||||
"decompression" = 'sound/vox/decompression.ogg',
|
||||
"decontamination" = 'sound/vox/decontamination.ogg',
|
||||
"deeoo" = 'sound/vox/deeoo.ogg',
|
||||
"defense" = 'sound/vox/defense.ogg',
|
||||
"degrees" = 'sound/vox/degrees.ogg',
|
||||
"delta" = 'sound/vox/delta.ogg',
|
||||
"denied" = 'sound/vox/denied.ogg',
|
||||
"deploy" = 'sound/vox/deploy.ogg',
|
||||
"deployed" = 'sound/vox/deployed.ogg',
|
||||
"destroy" = 'sound/vox/destroy.ogg',
|
||||
"destroyed" = 'sound/vox/destroyed.ogg',
|
||||
"detain" = 'sound/vox/detain.ogg',
|
||||
"detected" = 'sound/vox/detected.ogg',
|
||||
"detonation" = 'sound/vox/detonation.ogg',
|
||||
"device" = 'sound/vox/device.ogg',
|
||||
"did" = 'sound/vox/did.ogg',
|
||||
"die" = 'sound/vox/die.ogg',
|
||||
"dimensional" = 'sound/vox/dimensional.ogg',
|
||||
"dirt" = 'sound/vox/dirt.ogg',
|
||||
"disengaged" = 'sound/vox/disengaged.ogg',
|
||||
"dish" = 'sound/vox/dish.ogg',
|
||||
"disposal" = 'sound/vox/disposal.ogg',
|
||||
"distance" = 'sound/vox/distance.ogg',
|
||||
"distortion" = 'sound/vox/distortion.ogg',
|
||||
"do" = 'sound/vox/do.ogg',
|
||||
"doctor" = 'sound/vox/doctor.ogg',
|
||||
"doop" = 'sound/vox/doop.ogg',
|
||||
"door" = 'sound/vox/door.ogg',
|
||||
"down" = 'sound/vox/down.ogg',
|
||||
"dual" = 'sound/vox/dual.ogg',
|
||||
"duct" = 'sound/vox/duct.ogg',
|
||||
"e" = 'sound/vox/e.ogg',
|
||||
"east" = 'sound/vox/east.ogg',
|
||||
"echo" = 'sound/vox/echo.ogg',
|
||||
"ed" = 'sound/vox/ed.ogg',
|
||||
"effect" = 'sound/vox/effect.ogg',
|
||||
"egress" = 'sound/vox/egress.ogg',
|
||||
"eight" = 'sound/vox/eight.ogg',
|
||||
"eighteen" = 'sound/vox/eighteen.ogg',
|
||||
"eighty" = 'sound/vox/eighty.ogg',
|
||||
"electric" = 'sound/vox/electric.ogg',
|
||||
"electromagnetic" = 'sound/vox/electromagnetic.ogg',
|
||||
"elevator" = 'sound/vox/elevator.ogg',
|
||||
"eleven" = 'sound/vox/eleven.ogg',
|
||||
"eliminate" = 'sound/vox/eliminate.ogg',
|
||||
"emergency" = 'sound/vox/emergency.ogg',
|
||||
"enemy" = 'sound/vox/enemy.ogg',
|
||||
"energy" = 'sound/vox/energy.ogg',
|
||||
"engage" = 'sound/vox/engage.ogg',
|
||||
"engaged" = 'sound/vox/engaged.ogg',
|
||||
"engine" = 'sound/vox/engine.ogg',
|
||||
"enter" = 'sound/vox/enter.ogg',
|
||||
"entry" = 'sound/vox/entry.ogg',
|
||||
"environment" = 'sound/vox/environment.ogg',
|
||||
"error" = 'sound/vox/error.ogg',
|
||||
"escape" = 'sound/vox/escape.ogg',
|
||||
"evacuate" = 'sound/vox/evacuate.ogg',
|
||||
"exchange" = 'sound/vox/exchange.ogg',
|
||||
"exit" = 'sound/vox/exit.ogg',
|
||||
"expect" = 'sound/vox/expect.ogg',
|
||||
"experiment" = 'sound/vox/experiment.ogg',
|
||||
"experimental" = 'sound/vox/experimental.ogg',
|
||||
"explode" = 'sound/vox/explode.ogg',
|
||||
"explosion" = 'sound/vox/explosion.ogg',
|
||||
"exposure" = 'sound/vox/exposure.ogg',
|
||||
"exterminate" = 'sound/vox/exterminate.ogg',
|
||||
"extinguish" = 'sound/vox/extinguish.ogg',
|
||||
"extinguisher" = 'sound/vox/extinguisher.ogg',
|
||||
"extreme" = 'sound/vox/extreme.ogg',
|
||||
"f" = 'sound/vox/f.ogg',
|
||||
"face" = 'sound/vox/face.ogg',
|
||||
"facility" = 'sound/vox/facility.ogg',
|
||||
"fahrenheit" = 'sound/vox/fahrenheit.ogg',
|
||||
"failed" = 'sound/vox/failed.ogg',
|
||||
"failure" = 'sound/vox/failure.ogg',
|
||||
"farthest" = 'sound/vox/farthest.ogg',
|
||||
"fast" = 'sound/vox/fast.ogg',
|
||||
"feet" = 'sound/vox/feet.ogg',
|
||||
"field" = 'sound/vox/field.ogg',
|
||||
"fifteen" = 'sound/vox/fifteen.ogg',
|
||||
"fifth" = 'sound/vox/fifth.ogg',
|
||||
"fifty" = 'sound/vox/fifty.ogg',
|
||||
"final" = 'sound/vox/final.ogg',
|
||||
"fine" = 'sound/vox/fine.ogg',
|
||||
"fire" = 'sound/vox/fire.ogg',
|
||||
"first" = 'sound/vox/first.ogg',
|
||||
"five" = 'sound/vox/five.ogg',
|
||||
"flag" = 'sound/vox/flag.ogg',
|
||||
"flooding" = 'sound/vox/flooding.ogg',
|
||||
"floor" = 'sound/vox/floor.ogg',
|
||||
"fool" = 'sound/vox/fool.ogg',
|
||||
"for" = 'sound/vox/for.ogg',
|
||||
"forbidden" = 'sound/vox/forbidden.ogg',
|
||||
"force" = 'sound/vox/force.ogg',
|
||||
"forms" = 'sound/vox/forms.ogg',
|
||||
"found" = 'sound/vox/found.ogg',
|
||||
"four" = 'sound/vox/four.ogg',
|
||||
"fourteen" = 'sound/vox/fourteen.ogg',
|
||||
"fourth" = 'sound/vox/fourth.ogg',
|
||||
"fourty" = 'sound/vox/fourty.ogg',
|
||||
"foxtrot" = 'sound/vox/foxtrot.ogg',
|
||||
"freeman" = 'sound/vox/freeman.ogg',
|
||||
"freezer" = 'sound/vox/freezer.ogg',
|
||||
"from" = 'sound/vox/from.ogg',
|
||||
"front" = 'sound/vox/front.ogg',
|
||||
"fuel" = 'sound/vox/fuel.ogg',
|
||||
"g" = 'sound/vox/g.ogg',
|
||||
"gay" = 'sound/vox/gay.ogg',
|
||||
"get" = 'sound/vox/get.ogg',
|
||||
"go" = 'sound/vox/go.ogg',
|
||||
"going" = 'sound/vox/going.ogg',
|
||||
"good" = 'sound/vox/good.ogg',
|
||||
"goodbye" = 'sound/vox/goodbye.ogg',
|
||||
"gordon" = 'sound/vox/gordon.ogg',
|
||||
"got" = 'sound/vox/got.ogg',
|
||||
"government" = 'sound/vox/government.ogg',
|
||||
"granted" = 'sound/vox/granted.ogg',
|
||||
"great" = 'sound/vox/great.ogg',
|
||||
"green" = 'sound/vox/green.ogg',
|
||||
"grenade" = 'sound/vox/grenade.ogg',
|
||||
"guard" = 'sound/vox/guard.ogg',
|
||||
"gulf" = 'sound/vox/gulf.ogg',
|
||||
"gun" = 'sound/vox/gun.ogg',
|
||||
"guthrie" = 'sound/vox/guthrie.ogg',
|
||||
"handling" = 'sound/vox/handling.ogg',
|
||||
"hangar" = 'sound/vox/hangar.ogg',
|
||||
"has" = 'sound/vox/has.ogg',
|
||||
"have" = 'sound/vox/have.ogg',
|
||||
"hazard" = 'sound/vox/hazard.ogg',
|
||||
"head" = 'sound/vox/head.ogg',
|
||||
"health" = 'sound/vox/health.ogg',
|
||||
"heat" = 'sound/vox/heat.ogg',
|
||||
"helicopter" = 'sound/vox/helicopter.ogg',
|
||||
"helium" = 'sound/vox/helium.ogg',
|
||||
"hello" = 'sound/vox/hello.ogg',
|
||||
"help" = 'sound/vox/help.ogg',
|
||||
"here" = 'sound/vox/here.ogg',
|
||||
"hide" = 'sound/vox/hide.ogg',
|
||||
"high" = 'sound/vox/high.ogg',
|
||||
"highest" = 'sound/vox/highest.ogg',
|
||||
"hit" = 'sound/vox/hit.ogg',
|
||||
"holds" = 'sound/vox/holds.ogg',
|
||||
"hole" = 'sound/vox/hole.ogg',
|
||||
"hostile" = 'sound/vox/hostile.ogg',
|
||||
"hot" = 'sound/vox/hot.ogg',
|
||||
"hotel" = 'sound/vox/hotel.ogg',
|
||||
"hour" = 'sound/vox/hour.ogg',
|
||||
"hours" = 'sound/vox/hours.ogg',
|
||||
"hundred" = 'sound/vox/hundred.ogg',
|
||||
"hydro" = 'sound/vox/hydro.ogg',
|
||||
"i" = 'sound/vox/i.ogg',
|
||||
"idiot" = 'sound/vox/idiot.ogg',
|
||||
"illegal" = 'sound/vox/illegal.ogg',
|
||||
"immediate" = 'sound/vox/immediate.ogg',
|
||||
"immediately" = 'sound/vox/immediately.ogg',
|
||||
"in" = 'sound/vox/in.ogg',
|
||||
"inches" = 'sound/vox/inches.ogg',
|
||||
"india" = 'sound/vox/india.ogg',
|
||||
"ing" = 'sound/vox/ing.ogg',
|
||||
"inoperative" = 'sound/vox/inoperative.ogg',
|
||||
"inside" = 'sound/vox/inside.ogg',
|
||||
"inspection" = 'sound/vox/inspection.ogg',
|
||||
"inspector" = 'sound/vox/inspector.ogg',
|
||||
"interchange" = 'sound/vox/interchange.ogg',
|
||||
"intruder" = 'sound/vox/intruder.ogg',
|
||||
"invallid" = 'sound/vox/invallid.ogg',
|
||||
"invasion" = 'sound/vox/invasion.ogg',
|
||||
"is" = 'sound/vox/is.ogg',
|
||||
"it" = 'sound/vox/it.ogg',
|
||||
"johnson" = 'sound/vox/johnson.ogg',
|
||||
"juliet" = 'sound/vox/juliet.ogg',
|
||||
"key" = 'sound/vox/key.ogg',
|
||||
"kill" = 'sound/vox/kill.ogg',
|
||||
"kilo" = 'sound/vox/kilo.ogg',
|
||||
"kit" = 'sound/vox/kit.ogg',
|
||||
"lab" = 'sound/vox/lab.ogg',
|
||||
"lambda" = 'sound/vox/lambda.ogg',
|
||||
"laser" = 'sound/vox/laser.ogg',
|
||||
"last" = 'sound/vox/last.ogg',
|
||||
"launch" = 'sound/vox/launch.ogg',
|
||||
"leak" = 'sound/vox/leak.ogg',
|
||||
"leave" = 'sound/vox/leave.ogg',
|
||||
"left" = 'sound/vox/left.ogg',
|
||||
"legal" = 'sound/vox/legal.ogg',
|
||||
"level" = 'sound/vox/level.ogg',
|
||||
"lever" = 'sound/vox/lever.ogg',
|
||||
"lie" = 'sound/vox/lie.ogg',
|
||||
"lieutenant" = 'sound/vox/lieutenant.ogg',
|
||||
"life" = 'sound/vox/life.ogg',
|
||||
"light" = 'sound/vox/light.ogg',
|
||||
"lima" = 'sound/vox/lima.ogg',
|
||||
"liquid" = 'sound/vox/liquid.ogg',
|
||||
"loading" = 'sound/vox/loading.ogg',
|
||||
"locate" = 'sound/vox/locate.ogg',
|
||||
"located" = 'sound/vox/located.ogg',
|
||||
"location" = 'sound/vox/location.ogg',
|
||||
"lock" = 'sound/vox/lock.ogg',
|
||||
"locked" = 'sound/vox/locked.ogg',
|
||||
"locker" = 'sound/vox/locker.ogg',
|
||||
"lockout" = 'sound/vox/lockout.ogg',
|
||||
"lower" = 'sound/vox/lower.ogg',
|
||||
"lowest" = 'sound/vox/lowest.ogg',
|
||||
"magnetic" = 'sound/vox/magnetic.ogg',
|
||||
"main" = 'sound/vox/main.ogg',
|
||||
"maintenance" = 'sound/vox/maintenance.ogg',
|
||||
"malfunction" = 'sound/vox/malfunction.ogg',
|
||||
"man" = 'sound/vox/man.ogg',
|
||||
"mass" = 'sound/vox/mass.ogg',
|
||||
"materials" = 'sound/vox/materials.ogg',
|
||||
"maximum" = 'sound/vox/maximum.ogg',
|
||||
"may" = 'sound/vox/may.ogg',
|
||||
"med" = 'sound/vox/med.ogg',
|
||||
"medical" = 'sound/vox/medical.ogg',
|
||||
"men" = 'sound/vox/men.ogg',
|
||||
"mercy" = 'sound/vox/mercy.ogg',
|
||||
"mesa" = 'sound/vox/mesa.ogg',
|
||||
"message" = 'sound/vox/message.ogg',
|
||||
"meter" = 'sound/vox/meter.ogg',
|
||||
"micro" = 'sound/vox/micro.ogg',
|
||||
"middle" = 'sound/vox/middle.ogg',
|
||||
"mike" = 'sound/vox/mike.ogg',
|
||||
"miles" = 'sound/vox/miles.ogg',
|
||||
"military" = 'sound/vox/military.ogg',
|
||||
"milli" = 'sound/vox/milli.ogg',
|
||||
"million" = 'sound/vox/million.ogg',
|
||||
"minefield" = 'sound/vox/minefield.ogg',
|
||||
"minimum" = 'sound/vox/minimum.ogg',
|
||||
"minutes" = 'sound/vox/minutes.ogg',
|
||||
"mister" = 'sound/vox/mister.ogg',
|
||||
"mode" = 'sound/vox/mode.ogg',
|
||||
"motor" = 'sound/vox/motor.ogg',
|
||||
"motorpool" = 'sound/vox/motorpool.ogg',
|
||||
"move" = 'sound/vox/move.ogg',
|
||||
"must" = 'sound/vox/must.ogg',
|
||||
"nearest" = 'sound/vox/nearest.ogg',
|
||||
"nice" = 'sound/vox/nice.ogg',
|
||||
"nine" = 'sound/vox/nine.ogg',
|
||||
"nineteen" = 'sound/vox/nineteen.ogg',
|
||||
"ninety" = 'sound/vox/ninety.ogg',
|
||||
"no" = 'sound/vox/no.ogg',
|
||||
"nominal" = 'sound/vox/nominal.ogg',
|
||||
"north" = 'sound/vox/north.ogg',
|
||||
"not" = 'sound/vox/not.ogg',
|
||||
"november" = 'sound/vox/november.ogg',
|
||||
"now" = 'sound/vox/now.ogg',
|
||||
"number" = 'sound/vox/number.ogg',
|
||||
"objective" = 'sound/vox/objective.ogg',
|
||||
"observation" = 'sound/vox/observation.ogg',
|
||||
"of" = 'sound/vox/of.ogg',
|
||||
"officer" = 'sound/vox/officer.ogg',
|
||||
"ok" = 'sound/vox/ok.ogg',
|
||||
"on" = 'sound/vox/on.ogg',
|
||||
"one" = 'sound/vox/one.ogg',
|
||||
"open" = 'sound/vox/open.ogg',
|
||||
"operating" = 'sound/vox/operating.ogg',
|
||||
"operations" = 'sound/vox/operations.ogg',
|
||||
"operative" = 'sound/vox/operative.ogg',
|
||||
"option" = 'sound/vox/option.ogg',
|
||||
"order" = 'sound/vox/order.ogg',
|
||||
"organic" = 'sound/vox/organic.ogg',
|
||||
"oscar" = 'sound/vox/oscar.ogg',
|
||||
"out" = 'sound/vox/out.ogg',
|
||||
"outside" = 'sound/vox/outside.ogg',
|
||||
"over" = 'sound/vox/over.ogg',
|
||||
"overload" = 'sound/vox/overload.ogg',
|
||||
"override" = 'sound/vox/override.ogg',
|
||||
"pacify" = 'sound/vox/pacify.ogg',
|
||||
"pain" = 'sound/vox/pain.ogg',
|
||||
"pal" = 'sound/vox/pal.ogg',
|
||||
"panel" = 'sound/vox/panel.ogg',
|
||||
"percent" = 'sound/vox/percent.ogg',
|
||||
"perimeter" = 'sound/vox/perimeter.ogg',
|
||||
"permitted" = 'sound/vox/permitted.ogg',
|
||||
"personnel" = 'sound/vox/personnel.ogg',
|
||||
"pipe" = 'sound/vox/pipe.ogg',
|
||||
"plant" = 'sound/vox/plant.ogg',
|
||||
"platform" = 'sound/vox/platform.ogg',
|
||||
"please" = 'sound/vox/please.ogg',
|
||||
"point" = 'sound/vox/point.ogg',
|
||||
"portal" = 'sound/vox/portal.ogg',
|
||||
"power" = 'sound/vox/power.ogg',
|
||||
"presence" = 'sound/vox/presence.ogg',
|
||||
"press" = 'sound/vox/press.ogg',
|
||||
"primary" = 'sound/vox/primary.ogg',
|
||||
"proceed" = 'sound/vox/proceed.ogg',
|
||||
"processing" = 'sound/vox/processing.ogg',
|
||||
"progress" = 'sound/vox/progress.ogg',
|
||||
"proper" = 'sound/vox/proper.ogg',
|
||||
"propulsion" = 'sound/vox/propulsion.ogg',
|
||||
"prosecute" = 'sound/vox/prosecute.ogg',
|
||||
"protective" = 'sound/vox/protective.ogg',
|
||||
"push" = 'sound/vox/push.ogg',
|
||||
"quantum" = 'sound/vox/quantum.ogg',
|
||||
"quebec" = 'sound/vox/quebec.ogg',
|
||||
"question" = 'sound/vox/question.ogg',
|
||||
"questioning" = 'sound/vox/questioning.ogg',
|
||||
"quick" = 'sound/vox/quick.ogg',
|
||||
"quit" = 'sound/vox/quit.ogg',
|
||||
"radiation" = 'sound/vox/radiation.ogg',
|
||||
"radioactive" = 'sound/vox/radioactive.ogg',
|
||||
"rads" = 'sound/vox/rads.ogg',
|
||||
"rapid" = 'sound/vox/rapid.ogg',
|
||||
"reach" = 'sound/vox/reach.ogg',
|
||||
"reached" = 'sound/vox/reached.ogg',
|
||||
"reactor" = 'sound/vox/reactor.ogg',
|
||||
"red" = 'sound/vox/red.ogg',
|
||||
"relay" = 'sound/vox/relay.ogg',
|
||||
"released" = 'sound/vox/released.ogg',
|
||||
"remaining" = 'sound/vox/remaining.ogg',
|
||||
"renegade" = 'sound/vox/renegade.ogg',
|
||||
"repair" = 'sound/vox/repair.ogg',
|
||||
"report" = 'sound/vox/report.ogg',
|
||||
"reports" = 'sound/vox/reports.ogg',
|
||||
"required" = 'sound/vox/required.ogg',
|
||||
"research" = 'sound/vox/research.ogg',
|
||||
"reset" = 'sound/vox/reset.ogg',
|
||||
"resevoir" = 'sound/vox/resevoir.ogg',
|
||||
"resistance" = 'sound/vox/resistance.ogg',
|
||||
"returned" = 'sound/vox/returned.ogg',
|
||||
"right" = 'sound/vox/right.ogg',
|
||||
"rocket" = 'sound/vox/rocket.ogg',
|
||||
"roger" = 'sound/vox/roger.ogg',
|
||||
"romeo" = 'sound/vox/romeo.ogg',
|
||||
"room" = 'sound/vox/room.ogg',
|
||||
"round" = 'sound/vox/round.ogg',
|
||||
"run" = 'sound/vox/run.ogg',
|
||||
"safe" = 'sound/vox/safe.ogg',
|
||||
"safety" = 'sound/vox/safety.ogg',
|
||||
"sargeant" = 'sound/vox/sargeant.ogg',
|
||||
"satellite" = 'sound/vox/satellite.ogg',
|
||||
"save" = 'sound/vox/save.ogg',
|
||||
"science" = 'sound/vox/science.ogg',
|
||||
"scores" = 'sound/vox/scores.ogg',
|
||||
"scream" = 'sound/vox/scream.ogg',
|
||||
"screen" = 'sound/vox/screen.ogg',
|
||||
"search" = 'sound/vox/search.ogg',
|
||||
"second" = 'sound/vox/second.ogg',
|
||||
"secondary" = 'sound/vox/secondary.ogg',
|
||||
"seconds" = 'sound/vox/seconds.ogg',
|
||||
"sector" = 'sound/vox/sector.ogg',
|
||||
"secure" = 'sound/vox/secure.ogg',
|
||||
"secured" = 'sound/vox/secured.ogg',
|
||||
"security" = 'sound/vox/security.ogg',
|
||||
"select" = 'sound/vox/select.ogg',
|
||||
"selected" = 'sound/vox/selected.ogg',
|
||||
"service" = 'sound/vox/service.ogg',
|
||||
"seven" = 'sound/vox/seven.ogg',
|
||||
"seventeen" = 'sound/vox/seventeen.ogg',
|
||||
"seventy" = 'sound/vox/seventy.ogg',
|
||||
"severe" = 'sound/vox/severe.ogg',
|
||||
"sewage" = 'sound/vox/sewage.ogg',
|
||||
"sewer" = 'sound/vox/sewer.ogg',
|
||||
"shield" = 'sound/vox/shield.ogg',
|
||||
"shipment" = 'sound/vox/shipment.ogg',
|
||||
"shock" = 'sound/vox/shock.ogg',
|
||||
"shoot" = 'sound/vox/shoot.ogg',
|
||||
"shower" = 'sound/vox/shower.ogg',
|
||||
"shut" = 'sound/vox/shut.ogg',
|
||||
"side" = 'sound/vox/side.ogg',
|
||||
"sierra" = 'sound/vox/sierra.ogg',
|
||||
"sight" = 'sound/vox/sight.ogg',
|
||||
"silo" = 'sound/vox/silo.ogg',
|
||||
"six" = 'sound/vox/six.ogg',
|
||||
"sixteen" = 'sound/vox/sixteen.ogg',
|
||||
"sixty" = 'sound/vox/sixty.ogg',
|
||||
"slime" = 'sound/vox/slime.ogg',
|
||||
"slow" = 'sound/vox/slow.ogg',
|
||||
"soldier" = 'sound/vox/soldier.ogg',
|
||||
"some" = 'sound/vox/some.ogg',
|
||||
"someone" = 'sound/vox/someone.ogg',
|
||||
"something" = 'sound/vox/something.ogg',
|
||||
"son" = 'sound/vox/son.ogg',
|
||||
"sorry" = 'sound/vox/sorry.ogg',
|
||||
"south" = 'sound/vox/south.ogg',
|
||||
"squad" = 'sound/vox/squad.ogg',
|
||||
"square" = 'sound/vox/square.ogg',
|
||||
"stairway" = 'sound/vox/stairway.ogg',
|
||||
"status" = 'sound/vox/status.ogg',
|
||||
"sterile" = 'sound/vox/sterile.ogg',
|
||||
"sterilization" = 'sound/vox/sterilization.ogg',
|
||||
"stolen" = 'sound/vox/stolen.ogg',
|
||||
"storage" = 'sound/vox/storage.ogg',
|
||||
"sub" = 'sound/vox/sub.ogg',
|
||||
"subsurface" = 'sound/vox/subsurface.ogg',
|
||||
"sudden" = 'sound/vox/sudden.ogg',
|
||||
"suit" = 'sound/vox/suit.ogg',
|
||||
"superconducting" = 'sound/vox/superconducting.ogg',
|
||||
"supercooled" = 'sound/vox/supercooled.ogg',
|
||||
"supply" = 'sound/vox/supply.ogg',
|
||||
"surface" = 'sound/vox/surface.ogg',
|
||||
"surrender" = 'sound/vox/surrender.ogg',
|
||||
"surround" = 'sound/vox/surround.ogg',
|
||||
"surrounded" = 'sound/vox/surrounded.ogg',
|
||||
"switch" = 'sound/vox/switch.ogg',
|
||||
"system" = 'sound/vox/system.ogg',
|
||||
"systems" = 'sound/vox/systems.ogg',
|
||||
"tactical" = 'sound/vox/tactical.ogg',
|
||||
"take" = 'sound/vox/take.ogg',
|
||||
"talk" = 'sound/vox/talk.ogg',
|
||||
"tango" = 'sound/vox/tango.ogg',
|
||||
"tank" = 'sound/vox/tank.ogg',
|
||||
"target" = 'sound/vox/target.ogg',
|
||||
"team" = 'sound/vox/team.ogg',
|
||||
"temperature" = 'sound/vox/temperature.ogg',
|
||||
"temporal" = 'sound/vox/temporal.ogg',
|
||||
"ten" = 'sound/vox/ten.ogg',
|
||||
"terminal" = 'sound/vox/terminal.ogg',
|
||||
"terminated" = 'sound/vox/terminated.ogg',
|
||||
"termination" = 'sound/vox/termination.ogg',
|
||||
"test" = 'sound/vox/test.ogg',
|
||||
"that" = 'sound/vox/that.ogg',
|
||||
"the" = 'sound/vox/the.ogg',
|
||||
"then" = 'sound/vox/then.ogg',
|
||||
"there" = 'sound/vox/there.ogg',
|
||||
"third" = 'sound/vox/third.ogg',
|
||||
"thirteen" = 'sound/vox/thirteen.ogg',
|
||||
"thirty" = 'sound/vox/thirty.ogg',
|
||||
"this" = 'sound/vox/this.ogg',
|
||||
"those" = 'sound/vox/those.ogg',
|
||||
"thousand" = 'sound/vox/thousand.ogg',
|
||||
"threat" = 'sound/vox/threat.ogg',
|
||||
"three" = 'sound/vox/three.ogg',
|
||||
"through" = 'sound/vox/through.ogg',
|
||||
"time" = 'sound/vox/time.ogg',
|
||||
"to" = 'sound/vox/to.ogg',
|
||||
"top" = 'sound/vox/top.ogg',
|
||||
"topside" = 'sound/vox/topside.ogg',
|
||||
"touch" = 'sound/vox/touch.ogg',
|
||||
"towards" = 'sound/vox/towards.ogg',
|
||||
"track" = 'sound/vox/track.ogg',
|
||||
"train" = 'sound/vox/train.ogg',
|
||||
"transportation" = 'sound/vox/transportation.ogg',
|
||||
"truck" = 'sound/vox/truck.ogg',
|
||||
"tunnel" = 'sound/vox/tunnel.ogg',
|
||||
"turn" = 'sound/vox/turn.ogg',
|
||||
"turret" = 'sound/vox/turret.ogg',
|
||||
"twelve" = 'sound/vox/twelve.ogg',
|
||||
"twenty" = 'sound/vox/twenty.ogg',
|
||||
"two" = 'sound/vox/two.ogg',
|
||||
"unauthorized" = 'sound/vox/unauthorized.ogg',
|
||||
"under" = 'sound/vox/under.ogg',
|
||||
"uniform" = 'sound/vox/uniform.ogg',
|
||||
"unlocked" = 'sound/vox/unlocked.ogg',
|
||||
"until" = 'sound/vox/until.ogg',
|
||||
"up" = 'sound/vox/up.ogg',
|
||||
"upper" = 'sound/vox/upper.ogg',
|
||||
"uranium" = 'sound/vox/uranium.ogg',
|
||||
"us" = 'sound/vox/us.ogg',
|
||||
"usa" = 'sound/vox/usa.ogg',
|
||||
"use" = 'sound/vox/use.ogg',
|
||||
"used" = 'sound/vox/used.ogg',
|
||||
"user" = 'sound/vox/user.ogg',
|
||||
"vacate" = 'sound/vox/vacate.ogg',
|
||||
"valid" = 'sound/vox/valid.ogg',
|
||||
"vapor" = 'sound/vox/vapor.ogg',
|
||||
"vent" = 'sound/vox/vent.ogg',
|
||||
"ventillation" = 'sound/vox/ventillation.ogg',
|
||||
"victor" = 'sound/vox/victor.ogg',
|
||||
"violated" = 'sound/vox/violated.ogg',
|
||||
"violation" = 'sound/vox/violation.ogg',
|
||||
"voltage" = 'sound/vox/voltage.ogg',
|
||||
"vox_login" = 'sound/vox/vox_login.ogg',
|
||||
"walk" = 'sound/vox/walk.ogg',
|
||||
"wall" = 'sound/vox/wall.ogg',
|
||||
"want" = 'sound/vox/want.ogg',
|
||||
"wanted" = 'sound/vox/wanted.ogg',
|
||||
"warm" = 'sound/vox/warm.ogg',
|
||||
"warn" = 'sound/vox/warn.ogg',
|
||||
"warning" = 'sound/vox/warning.ogg',
|
||||
"waste" = 'sound/vox/waste.ogg',
|
||||
"water" = 'sound/vox/water.ogg',
|
||||
"we" = 'sound/vox/we.ogg',
|
||||
"weapon" = 'sound/vox/weapon.ogg',
|
||||
"west" = 'sound/vox/west.ogg',
|
||||
"whiskey" = 'sound/vox/whiskey.ogg',
|
||||
"white" = 'sound/vox/white.ogg',
|
||||
"wilco" = 'sound/vox/wilco.ogg',
|
||||
"will" = 'sound/vox/will.ogg',
|
||||
"with" = 'sound/vox/with.ogg',
|
||||
"without" = 'sound/vox/without.ogg',
|
||||
"woop" = 'sound/vox/woop.ogg',
|
||||
"xeno" = 'sound/vox/xeno.ogg',
|
||||
"yankee" = 'sound/vox/yankee.ogg',
|
||||
"yards" = 'sound/vox/yards.ogg',
|
||||
"year" = 'sound/vox/year.ogg',
|
||||
"yellow" = 'sound/vox/yellow.ogg',
|
||||
"yes" = 'sound/vox/yes.ogg',
|
||||
"you" = 'sound/vox/you.ogg',
|
||||
"your" = 'sound/vox/your.ogg',
|
||||
"yourself" = 'sound/vox/yourself.ogg',
|
||||
"zero" = 'sound/vox/zero.ogg',
|
||||
"zone" = 'sound/vox/zone.ogg',
|
||||
"zulu" = 'sound/vox/zulu.ogg',))
|
||||
#endif
|
||||
@@ -311,6 +311,10 @@
|
||||
/obj/item/multitool/cyborg,
|
||||
/obj/item/t_scanner,
|
||||
/obj/item/analyzer,
|
||||
/obj/item/storage/part_replacer/cyborg,
|
||||
/obj/item/holosign_creator/atmos,
|
||||
/obj/item/weapon/gripper,
|
||||
/obj/item/lightreplacer/cyborg,
|
||||
/obj/item/geiger_counter/cyborg,
|
||||
/obj/item/assembly/signaler/cyborg,
|
||||
/obj/item/areaeditor/blueprints/cyborg,
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
var/treatment_fire = "kelotane"
|
||||
var/treatment_tox_avoid = "tricordrazine"
|
||||
var/treatment_tox = "charcoal"
|
||||
var/treatment_tox_toxlover = "toxin"
|
||||
var/treatment_virus_avoid = null
|
||||
var/treatment_virus = "spaceacillin"
|
||||
var/treat_virus = 1 //If on, the bot will attempt to treat viral infections, curing them if possible.
|
||||
@@ -381,8 +382,8 @@
|
||||
|
||||
if((!C.reagents.has_reagent(treatment_fire_avoid)) && (C.getFireLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_fire)))
|
||||
return TRUE
|
||||
|
||||
if((!C.reagents.has_reagent(treatment_tox_avoid)) && (C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_tox)))
|
||||
var/treatment_toxavoid = get_avoidchem_toxin(C)
|
||||
if(((treatment_toxavoid && !C.reagents.has_reagent(treatment_toxavoid))) && (C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(get_healchem_toxin(C))))
|
||||
return TRUE
|
||||
|
||||
if(treat_virus && !C.reagents.has_reagent(treatment_virus_avoid) && !C.reagents.has_reagent(treatment_virus))
|
||||
@@ -396,6 +397,12 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/proc/get_avoidchem_toxin(mob/M)
|
||||
return HAS_TRAIT(M, TRAIT_TOXINLOVER)? null : treatment_tox_avoid
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/proc/get_healchem_toxin(mob/M)
|
||||
return HAS_TRAIT(M, TRAIT_TOXINLOVER)? treatment_tox_toxlover : treatment_tox
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/UnarmedAttack(atom/A)
|
||||
if(iscarbon(A))
|
||||
var/mob/living/carbon/C = A
|
||||
@@ -463,8 +470,10 @@
|
||||
reagent_id = treatment_fire
|
||||
|
||||
if(!reagent_id && (C.getToxLoss() >= heal_threshold))
|
||||
if(!C.reagents.has_reagent(treatment_tox) && !C.reagents.has_reagent(treatment_tox_avoid))
|
||||
reagent_id = treatment_tox
|
||||
var/toxin_heal_avoid = get_avoidchem_toxin(C)
|
||||
var/toxin_healchem = get_healchem_toxin(C)
|
||||
if(!C.reagents.has_reagent(toxin_healchem) && (toxin_heal_avoid && !C.reagents.has_reagent(toxin_heal_avoid)))
|
||||
reagent_id = toxin_healchem
|
||||
|
||||
//If the patient is injured but doesn't have our special reagent in them then we should give it to them first
|
||||
if(reagent_id && use_beaker && reagent_glass && reagent_glass.reagents.total_volume)
|
||||
|
||||
@@ -196,3 +196,317 @@
|
||||
volume = 250
|
||||
list_reagents = list("holywater" = 150, "tiresolution" = 50, "dizzysolution" = 50)
|
||||
amount_per_transfer_from_this = 50
|
||||
|
||||
#define HYPO_SPRAY 0
|
||||
#define HYPO_INJECT 1
|
||||
|
||||
#define WAIT_SPRAY 25
|
||||
#define WAIT_INJECT 25
|
||||
#define SELF_SPRAY 15
|
||||
#define SELF_INJECT 15
|
||||
|
||||
#define DELUXE_WAIT_SPRAY 20
|
||||
#define DELUXE_WAIT_INJECT 20
|
||||
#define DELUXE_SELF_SPRAY 10
|
||||
#define DELUXE_SELF_INJECT 10
|
||||
|
||||
#define COMBAT_WAIT_SPRAY 0
|
||||
#define COMBAT_WAIT_INJECT 0
|
||||
#define COMBAT_SELF_SPRAY 0
|
||||
#define COMBAT_SELF_INJECT 0
|
||||
|
||||
//A vial-loaded hypospray. Cartridge-based!
|
||||
/obj/item/hypospray/mkii
|
||||
name = "hypospray mk.II"
|
||||
icon_state = "hypo2"
|
||||
desc = "A new development from DeForest Medical, this hypospray takes 30-unit vials as the drug supply for easy swapping."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small)
|
||||
var/mode = HYPO_INJECT
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/vial
|
||||
var/start_vial = /obj/item/reagent_containers/glass/bottle/vial/small
|
||||
var/spawnwithvial = TRUE
|
||||
var/inject_wait = WAIT_INJECT
|
||||
var/spray_wait = WAIT_SPRAY
|
||||
var/spray_self = SELF_SPRAY
|
||||
var/inject_self = SELF_INJECT
|
||||
var/quickload = FALSE
|
||||
var/penetrates = FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/brute
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
|
||||
|
||||
/obj/item/hypospray/mkii/toxin
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
|
||||
|
||||
/obj/item/hypospray/mkii/oxygen
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
|
||||
|
||||
/obj/item/hypospray/mkii/burn
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
|
||||
|
||||
/obj/item/hypospray/mkii/tricord
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord
|
||||
|
||||
/obj/item/hypospray/mkii/enlarge
|
||||
spawnwithvial = FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/CMO
|
||||
name = "hypospray mk.II deluxe"
|
||||
allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
|
||||
icon_state = "cmo2"
|
||||
desc = "The Deluxe Hypospray can take larger-size vials. It also acts faster and delivers more reagents per spray."
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
|
||||
inject_wait = DELUXE_WAIT_INJECT
|
||||
spray_wait = DELUXE_WAIT_SPRAY
|
||||
spray_self = DELUXE_SELF_SPRAY
|
||||
inject_self = DELUXE_SELF_INJECT
|
||||
|
||||
/obj/item/hypospray/mkii/CMO/combat
|
||||
name = "combat hypospray mk.II"
|
||||
desc = "A combat-ready deluxe hypospray that acts almost instantly. It can be tactically reloaded by using a vial on it."
|
||||
icon_state = "combat2"
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat
|
||||
inject_wait = COMBAT_WAIT_INJECT
|
||||
spray_wait = COMBAT_WAIT_SPRAY
|
||||
spray_self = COMBAT_SELF_SPRAY
|
||||
inject_self = COMBAT_SELF_INJECT
|
||||
quickload = TRUE
|
||||
penetrates = TRUE
|
||||
|
||||
/obj/item/hypospray/mkii/Initialize()
|
||||
. = ..()
|
||||
if(!spawnwithvial)
|
||||
update_icon()
|
||||
return
|
||||
if(start_vial)
|
||||
vial = new start_vial
|
||||
update_icon()
|
||||
|
||||
/obj/item/hypospray/mkii/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_hands()
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/examine(mob/user)
|
||||
. = ..()
|
||||
if(vial)
|
||||
to_chat(user, "[vial] has [vial.reagents.total_volume]u remaining.")
|
||||
else
|
||||
to_chat(user, "It has no vial loaded in.")
|
||||
to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.")
|
||||
|
||||
/obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/V = I
|
||||
V.forceMove(user.loc)
|
||||
user.put_in_hands(V)
|
||||
to_chat(user, "<span class='notice'>You remove [vial] from [src].</span>")
|
||||
vial = null
|
||||
update_icon()
|
||||
playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This hypo isn't loaded!</span>")
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/attackby(obj/item/I, mob/living/user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null))
|
||||
if(!quickload)
|
||||
to_chat(user, "<span class='warning'>[src] can not hold more than one vial!</span>")
|
||||
return FALSE
|
||||
unload_hypo(vial, user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/V = I
|
||||
if(!is_type_in_list(V, allowed_containers))
|
||||
to_chat(user, "<span class='notice'>[src] doesn't accept this type of vial.</span>")
|
||||
return FALSE
|
||||
if(!user.transferItemToLoc(V,src))
|
||||
return FALSE
|
||||
vial = V
|
||||
user.visible_message("<span class='notice'>[user] has loaded a vial into [src].</span>","<span class='notice'>You have loaded [vial] into [src].</span>")
|
||||
update_icon()
|
||||
playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This doesn't fit in [src].</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/AltClick(mob/user)
|
||||
if(vial)
|
||||
vial.attack_self(user)
|
||||
|
||||
// Gunna allow this for now, still really don't approve - Pooj
|
||||
/obj/item/hypospray/mkii/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "[src] happens to be already overcharged.")
|
||||
return
|
||||
inject_wait = COMBAT_WAIT_INJECT
|
||||
spray_wait = COMBAT_WAIT_SPRAY
|
||||
spray_self = COMBAT_SELF_INJECT
|
||||
inject_self = COMBAT_SELF_SPRAY
|
||||
penetrates = TRUE
|
||||
to_chat(user, "You overcharge [src]'s control circuit.")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/hypospray/mkii/attack_hand(mob/user)
|
||||
. = ..() //Don't bother changing this or removing it from containers will break.
|
||||
|
||||
/obj/item/hypospray/mkii/attack(obj/item/I, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
|
||||
if(!vial)
|
||||
return
|
||||
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!ismob(target))
|
||||
return
|
||||
|
||||
var/mob/living/L
|
||||
if(isliving(target))
|
||||
L = target
|
||||
if(!penetrates && !L.can_inject(user, 1)) //This check appears another four times, since otherwise the penetrating sprays will break in do_mob.
|
||||
return
|
||||
|
||||
if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles
|
||||
to_chat(user, "<span class='warning'>You cannot directly fill [target]!</span>")
|
||||
return
|
||||
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
if(ishuman(L))
|
||||
var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting)
|
||||
to_chat(user, "<span class='warning'>The limb is missing!</span>")
|
||||
return
|
||||
if(affecting.status != BODYPART_ORGANIC)
|
||||
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
|
||||
return
|
||||
|
||||
var/contained = vial.reagents.log_list()
|
||||
log_combat(user, L, "attemped to inject", src, addition="which had [contained]")
|
||||
//Always log attemped injections for admins
|
||||
if(vial != null)
|
||||
switch(mode)
|
||||
if(HYPO_INJECT)
|
||||
if(L) //living mob
|
||||
if(L != user)
|
||||
L.visible_message("<span class='danger'>[user] is trying to inject [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to inject [L] with [src]!</span>")
|
||||
if(!do_mob(user, L, inject_wait))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
|
||||
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
|
||||
else
|
||||
if(!do_mob(user, L, inject_self))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
|
||||
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
|
||||
vial.reagents.reaction(L, INJECT, fraction)
|
||||
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
|
||||
if(vial.amount_per_transfer_from_this >= 15)
|
||||
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
|
||||
if(vial.amount_per_transfer_from_this < 15)
|
||||
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You inject [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
|
||||
|
||||
if(HYPO_SPRAY)
|
||||
if(L) //living mob
|
||||
if(L != user)
|
||||
L.visible_message("<span class='danger'>[user] is trying to spray [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to spray [L] with [src]!</span>")
|
||||
if(!do_mob(user, L, spray_wait))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
|
||||
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
|
||||
else
|
||||
if(!do_mob(user, L, spray_self))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
|
||||
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
|
||||
vial.reagents.reaction(L, PATCH, fraction)
|
||||
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
|
||||
if(vial.amount_per_transfer_from_this >= 15)
|
||||
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
|
||||
if(vial.amount_per_transfer_from_this < 15)
|
||||
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You spray [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] doesn't work here!</span>")
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/attack_self(mob/living/user)
|
||||
if(user)
|
||||
if(user.incapacitated())
|
||||
return
|
||||
else if(!vial)
|
||||
to_chat(user, "This Hypo needs to be loaded first!")
|
||||
return
|
||||
else
|
||||
unload_hypo(vial,user)
|
||||
|
||||
/obj/item/hypospray/mkii/verb/modes()
|
||||
set name = "Toggle Application Mode"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
var/mob/M = usr
|
||||
switch(mode)
|
||||
if(HYPO_SPRAY)
|
||||
mode = HYPO_INJECT
|
||||
to_chat(M, "[src] is now set to inject contents on application.")
|
||||
if(HYPO_INJECT)
|
||||
mode = HYPO_SPRAY
|
||||
to_chat(M, "[src] is now set to spray contents on application.")
|
||||
|
||||
#undef HYPO_SPRAY
|
||||
#undef HYPO_INJECT
|
||||
#undef WAIT_SPRAY
|
||||
#undef WAIT_INJECT
|
||||
#undef SELF_SPRAY
|
||||
#undef SELF_INJECT
|
||||
#undef DELUXE_WAIT_SPRAY
|
||||
#undef DELUXE_WAIT_INJECT
|
||||
#undef DELUXE_SELF_SPRAY
|
||||
#undef DELUXE_SELF_INJECT
|
||||
#undef COMBAT_WAIT_SPRAY
|
||||
#undef COMBAT_WAIT_INJECT
|
||||
#undef COMBAT_SELF_SPRAY
|
||||
#undef COMBAT_SELF_INJECT
|
||||
|
||||
7
modular_citadel/code/modules/reagents/reagent container/hypovial.dm → code/modules/reagents/reagent_containers/hypovial.dm
Executable file → Normal file
@@ -1,7 +1,8 @@
|
||||
//hypovials used with the MkII hypospray. See hypospray.dm.
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial
|
||||
name = "broken hypovial"
|
||||
desc = "A hypovial compatible with most hyposprays."
|
||||
icon = 'modular_citadel/icons/obj/vial.dmi'
|
||||
icon_state = "hypovial"
|
||||
spillable = FALSE
|
||||
var/comes_with = list() //Easy way of doing this.
|
||||
@@ -34,7 +35,7 @@
|
||||
/obj/item/reagent_containers/glass/bottle/vial/update_icon()
|
||||
cut_overlays()
|
||||
if(reagents.total_volume)
|
||||
var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "hypovial10")
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "hypovial10")
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
@@ -86,7 +87,7 @@
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/update_icon()
|
||||
cut_overlays()
|
||||
if(reagents.total_volume)
|
||||
var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "hypoviallarge10")
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "hypoviallarge10")
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
@@ -186,7 +186,6 @@
|
||||
/obj/item/reagent_containers/pill/antirad_plus
|
||||
name = "prussian blue pill"
|
||||
desc = "Used to treat heavy radition poisoning."
|
||||
icon = 'modular_citadel/icons/obj/modularpills.dmi'
|
||||
icon_state = "prussian_blue"
|
||||
list_reagents = list("prussian_blue" = 25, "water" = 10)
|
||||
roundstart = 1
|
||||
@@ -194,7 +193,6 @@
|
||||
/obj/item/reagent_containers/pill/mutarad
|
||||
name = "radiation treatment deluxe pill"
|
||||
desc = "Used to treat heavy radition poisoning and genetic defects."
|
||||
icon = 'modular_citadel/icons/obj/modularpills.dmi'
|
||||
icon_state = "anit_rad_fixgene"
|
||||
list_reagents = list("prussian_blue" = 15, "potass_iodide" = 15, "mutadone" = 15, "water" = 5)
|
||||
roundstart = 1
|
||||
|
||||
@@ -131,3 +131,30 @@
|
||||
category = list("Misc")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenobio_upgrade
|
||||
name = "owo"
|
||||
desc = "someone's bussin"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobiomonkeys
|
||||
name = "Xenobiology console monkey upgrade disk"
|
||||
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
|
||||
id = "xenobio_monkeys"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/monkey
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobioslimebasic
|
||||
name = "Xenobiology console basic slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
|
||||
id = "xenobio_slimebasic"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/slimebasic
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobioslimeadv
|
||||
name = "Xenobiology console advanced slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
|
||||
id = "xenobio_slimeadv"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv
|
||||
|
||||
|
||||
|
||||
@@ -98,3 +98,11 @@
|
||||
build_path = /obj/item/circuitboard/machine/vr_sleeper
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/autoylathe
|
||||
name = "Machine Design (Autoylathe)"
|
||||
desc = "The circuit board for an autoylathe."
|
||||
id = "autoylathe"
|
||||
build_path = /obj/item/circuitboard/machine/autoylathe
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
category = list("Misc. Machinery")
|
||||
|
||||
@@ -67,6 +67,12 @@
|
||||
//Ammo Shells/
|
||||
//////////////
|
||||
|
||||
/datum/design/beanbag_slug/sec
|
||||
id = "sec_beanbag"
|
||||
build_type = PROTOLATHE
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/rubbershot/sec
|
||||
id = "sec_rshot"
|
||||
build_type = PROTOLATHE
|
||||
|
||||
@@ -43,7 +43,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
|
||||
|
||||
/obj/item/storage/part_replacer/bluespace
|
||||
name = "bluespace rapid part exchange device"
|
||||
desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts."
|
||||
desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts. Definitely not just a BSRPED painted orange."
|
||||
icon_state = "BS_RPED"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
works_from_distance = TRUE
|
||||
@@ -52,12 +52,10 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
|
||||
component_type = /datum/component/storage/concrete/bluespace/rped
|
||||
|
||||
/obj/item/storage/part_replacer/cyborg
|
||||
name = "rapid part exchange device"
|
||||
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
|
||||
icon_state = "borgrped"
|
||||
item_state = "RPED"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
|
||||
/obj/item/storage/part_replacer/bluespace/cyborg
|
||||
icon_state = "borg_BS_RPED"
|
||||
|
||||
/proc/cmp_rped_sort(obj/item/A, obj/item/B)
|
||||
return B.get_part_rating() - A.get_part_rating()
|
||||
|
||||
@@ -372,3 +372,7 @@
|
||||
|
||||
/datum/techweb/specialized/autounlocking/exofab
|
||||
allowed_buildtypes = MECHFAB
|
||||
|
||||
/datum/techweb/specialized/autounlocking/autoylathe
|
||||
design_autounlock_buildtypes = AUTOYLATHE
|
||||
allowed_buildtypes = AUTOYLATHE
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
// Default research tech, prevents bricking
|
||||
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani",
|
||||
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab",
|
||||
"space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "sec_38lethal",
|
||||
"space_heater", "xlarge_beaker", "sec_beanbag", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "sec_38lethal",
|
||||
"rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass")
|
||||
|
||||
/datum/techweb_node/mmi
|
||||
|
||||
@@ -31,8 +31,9 @@
|
||||
|
||||
var/list/stored_slimes
|
||||
var/obj/item/slimepotion/slime/current_potion
|
||||
var/max_slimes = 5
|
||||
var/max_slimes = 1
|
||||
var/monkeys = 0
|
||||
var/upgradetier = 0
|
||||
|
||||
icon_screen = "slime_comp"
|
||||
icon_keyboard = "rd_key"
|
||||
@@ -106,6 +107,22 @@
|
||||
stored_slimes -= deleted
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/disk/xenobio_console_upgrade))
|
||||
var/obj/item/disk/xenobio_console_upgrade/diskthing = O
|
||||
var/successfulupgrade = FALSE
|
||||
for(var/I in diskthing.upgradetypes)
|
||||
if(upgradetier & I)
|
||||
continue
|
||||
else
|
||||
upgradetier |= I
|
||||
successfulupgrade = TRUE
|
||||
if(I == XENOBIO_UPGRADE_SLIMEADV)
|
||||
max_slimes = 10
|
||||
if(successfulupgrade)
|
||||
to_chat(user, "<span class='notice'>You have successfully upgraded [src] with [O].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] already has the contents of [O] installed!</span>")
|
||||
return
|
||||
if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
|
||||
monkeys++
|
||||
to_chat(user, "<span class='notice'>You feed [O] to [src]. It now has [monkeys] monkey cubes stored.</span>")
|
||||
@@ -264,3 +281,29 @@
|
||||
break
|
||||
else
|
||||
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
|
||||
|
||||
/obj/item/disk/xenobio_console_upgrade
|
||||
name = "Xenobiology console upgrade disk"
|
||||
desc = "Allan please add detail."
|
||||
icon_state = "datadisk5"
|
||||
var/list/upgradetypes = list()
|
||||
|
||||
/obj/item/disk/xenobio_console_upgrade/admin
|
||||
name = "Xenobio all access thing"
|
||||
desc = "'the consoles are literally useless!!!!!!!!!!!!!!!'"
|
||||
upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC, XENOBIO_UPGRADE_SLIMEADV, XENOBIO_UPGRADE_MONKEYS)
|
||||
|
||||
/obj/item/disk/xenobio_console_upgrade/monkey
|
||||
name = "Xenobiology console monkey upgrade disk"
|
||||
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
|
||||
upgradetypes = list(XENOBIO_UPGRADE_MONKEYS)
|
||||
|
||||
/obj/item/disk/xenobio_console_upgrade/slimebasic
|
||||
name = "Xenobiology console basic slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
|
||||
upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC)
|
||||
|
||||
/obj/item/disk/xenobio_console_upgrade/slimeadv
|
||||
name = "Xenobiology console advanced slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
|
||||
upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC, XENOBIO_UPGRADE_SLIMEADV)
|
||||
|
||||
@@ -1920,6 +1920,13 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
|
||||
Radio headset does not include encryption key. No gun included."
|
||||
item = /obj/item/storage/box/syndie_kit/centcom_costume
|
||||
|
||||
/datum/uplink_item/badass/claymore
|
||||
name = "Claymore"
|
||||
cost = 8
|
||||
player_minimum = 25
|
||||
desc = "A claymore. We don't know why you'd do this."
|
||||
item = /obj/item/claymore
|
||||
|
||||
/datum/uplink_item/badass/costumes/clown
|
||||
name = "Clown Costume"
|
||||
desc = "Nothing is more terrifying than clowns with fully automatic weaponry."
|
||||
|
||||
@@ -1,877 +0,0 @@
|
||||
/*****************************************
|
||||
*
|
||||
* GLOBAL STYLES
|
||||
*
|
||||
******************************************/
|
||||
html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
color: #000000;
|
||||
}
|
||||
body {
|
||||
background: #E0E0E0; /*CIT CHANGE - darkens chatbox a lil*/
|
||||
font-family: Verdana, sans-serif;
|
||||
font-size: 9pt;
|
||||
line-height: 1.2;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1;
|
||||
-ms-interpolation-mode: nearest-neighbor;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
img.icon {
|
||||
height: 1em;
|
||||
min-height: 16px;
|
||||
width: auto;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
|
||||
.r:before { /* "repeated" badge class for combined messages */
|
||||
content: 'x';
|
||||
}
|
||||
.r {
|
||||
display: inline-block;
|
||||
min-width: 0.5em;
|
||||
font-size: 0.7em;
|
||||
padding: 0.2em 0.3em;
|
||||
line-height: 1;
|
||||
color: white;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
background-color: crimson;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
a {color: #0000ff;}
|
||||
a.visited {color: #ff00ff;}
|
||||
a:visited {color: #ff00ff;}
|
||||
a.popt {text-decoration: none;}
|
||||
|
||||
/*****************************************
|
||||
*
|
||||
* OUTPUT NOT RELATED TO ACTUAL MESSAGES
|
||||
*
|
||||
******************************************/
|
||||
#loading {
|
||||
position: fixed;
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin: -75px 0 0 -150px;
|
||||
}
|
||||
#loading i {display: block; padding-bottom: 3px;}
|
||||
|
||||
#messages {
|
||||
font-size: 13px;
|
||||
padding: 3px;
|
||||
margin: 0;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#newMessages {
|
||||
position: fixed;
|
||||
display: block;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
padding: 8px;
|
||||
background: #ddd;
|
||||
text-decoration: none;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
#newMessages:hover {background: #ccc;}
|
||||
#newMessages i {vertical-align: middle; padding-left: 3px;}
|
||||
#ping {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 80px;
|
||||
width: 45px;
|
||||
background: #ddd;
|
||||
height: 30px;
|
||||
padding: 8px 0 2px 0;
|
||||
}
|
||||
#ping i {display: block; text-align: center;}
|
||||
#ping .ms {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 8pt;
|
||||
padding-top: 2px;
|
||||
}
|
||||
#userBar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
#userBar .subCell {
|
||||
background: #ddd;
|
||||
height: 30px;
|
||||
padding: 5px 0;
|
||||
display: block;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
line-height: 28px;
|
||||
border-top: 1px solid #b4b4b4;
|
||||
}
|
||||
#userBar .subCell:hover {background: #ccc;}
|
||||
#userBar .toggle {
|
||||
width: 40px;
|
||||
background: #ccc;
|
||||
border-top: 0;
|
||||
float: right;
|
||||
text-align: center;
|
||||
}
|
||||
#userBar .sub {clear: both; display: none; width: 160px;}
|
||||
#userBar .sub.scroll {overflow-y: scroll;}
|
||||
#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;}
|
||||
#userBar .sub span {
|
||||
display: block;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
}
|
||||
#userBar .sub i {
|
||||
display: block;
|
||||
padding: 0 5px;
|
||||
font-size: 1.1em;
|
||||
width: 22px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
float: right;
|
||||
}
|
||||
#userBar .sub input {
|
||||
position: absolute;
|
||||
padding: 7px 5px;
|
||||
width: 121px;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
}
|
||||
#userBar .topCell {border-top: 0;}
|
||||
|
||||
/* POPUPS */
|
||||
.popup {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
background: #ddd;
|
||||
}
|
||||
.popup .close {
|
||||
position: absolute;
|
||||
background: #aaa;
|
||||
top: 0;
|
||||
right: 0;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
z-index: 2;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.popup .close:hover {background: #999;}
|
||||
.popup .head {
|
||||
background: #999;
|
||||
color: #ddd;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
border-bottom: 2px solid green;
|
||||
}
|
||||
.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;}
|
||||
.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;}
|
||||
.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;}
|
||||
.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;}
|
||||
|
||||
.changeFont {padding: 10px;}
|
||||
.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;}
|
||||
.changeFont a:hover {background: #ccc;}
|
||||
|
||||
.highlightPopup {padding: 10px; text-align: center;}
|
||||
.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;}
|
||||
.highlightPopup input.highlightColor {background-color: #FFFF00;}
|
||||
.highlightPopup input.highlightTermSubmit {margin-top: 5px;}
|
||||
|
||||
/* ADMIN CONTEXT MENU */
|
||||
.contextMenu {
|
||||
background-color: #ddd;
|
||||
position: fixed;
|
||||
margin: 2px;
|
||||
width: 150px;
|
||||
}
|
||||
.contextMenu a {
|
||||
display: block;
|
||||
padding: 2px 5px;
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.contextMenu a:hover {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
/* ADMIN FILTER MESSAGES MENU */
|
||||
.filterMessages {padding: 5px;}
|
||||
.filterMessages div {padding: 2px 0;}
|
||||
.filterMessages input {}
|
||||
.filterMessages label {}
|
||||
|
||||
.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
|
||||
|
||||
|
||||
/*****************************************
|
||||
*
|
||||
* OUTPUT ACTUALLY RELATED TO MESSAGES
|
||||
*
|
||||
******************************************/
|
||||
|
||||
/* MOTD */
|
||||
.motd {color: #638500; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;}
|
||||
|
||||
/* ADD HERE FOR BOLD */
|
||||
.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;}
|
||||
|
||||
/* ADD HERE FOR ITALIC */
|
||||
.italic, .italics, .emote {font-style: italic;}
|
||||
|
||||
/* OUTPUT COLORS */
|
||||
.highlight {background: yellow;}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
em {font-style: normal; font-weight: bold;}
|
||||
|
||||
.ooc { font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #700038; font-weight: bold;}
|
||||
|
||||
.adminobserver {color: #996600; font-weight: bold;}
|
||||
.admin {color: #386aff; font-weight: bold;}
|
||||
|
||||
.name { font-weight: bold;}
|
||||
|
||||
.say {}
|
||||
.deadsay {color: #5c00e6;}
|
||||
.binarysay {color: #20c20e; background-color: #000000; display: block;}
|
||||
.binarysay a {color: #00ff00;}
|
||||
.binarysay a:active, .binarysay a:visited {color: #88ff88;}
|
||||
.radio {color: #008000;}
|
||||
.sciradio {color: #993399;}
|
||||
.comradio {color: #948f02;}
|
||||
.secradio {color: #a30000;}
|
||||
.medradio {color: #337296;}
|
||||
.engradio {color: #fb5613;}
|
||||
.suppradio {color: #a8732b;}
|
||||
.servradio {color: #6eaa2c;}
|
||||
.syndradio {color: #6d3f40;}
|
||||
.centcomradio {color: #686868;}
|
||||
.aiprivradio {color: #ff00ff;}
|
||||
.redteamradio {color: #ff0000;}
|
||||
.blueteamradio {color: #0000ff;}
|
||||
|
||||
.yell { font-weight: bold;}
|
||||
|
||||
.alert {color: #ff0000;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.emote { font-style: italic;}
|
||||
.selecteddna {color: #ffffff; background-color: #001B1B}
|
||||
|
||||
.attack {color: #ff0000;}
|
||||
.disarm {color: #990000;}
|
||||
.passive {color: #660000;}
|
||||
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
.greenannounce {color: #00ff00; font-weight: bold;}
|
||||
.rose {color: #ff5050;}
|
||||
.info {color: #0000CC;}
|
||||
.notice {color: #000099;}
|
||||
.boldnotice {color: #000099; font-weight: bold;}
|
||||
.adminnotice {color: #0000ff;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.green {color: #03ff39;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.shadowling {color: #3b2769;}
|
||||
.cult {color: #960000;}
|
||||
|
||||
.cultitalic {color: #960000; font-style: italic;}
|
||||
.cultbold {color: #960000; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
|
||||
.colossus {color: #7F282A; font-size: 40px;}
|
||||
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #660099; font-style: italic;}
|
||||
.purple {color: #5e2d79;}
|
||||
.holoparasite {color: #35333a;}
|
||||
|
||||
.revennotice {color: #1d2953;}
|
||||
.revenboldnotice {color: #1d2953; font-weight: bold;}
|
||||
.revenbignotice {color: #1d2953; font-weight: bold; font-size: 24px;}
|
||||
.revenminor {color: #823abb}
|
||||
.revenwarning {color: #760fbb; font-style: italic;}
|
||||
.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
|
||||
.umbra {color: #5000A0;}
|
||||
.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
|
||||
.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
|
||||
|
||||
.brass {color: #BE8700;}
|
||||
.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
|
||||
.large_brass {color: #BE8700; font-size: 24px;}
|
||||
.big_brass {color: #BE8700; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;}
|
||||
.alloy {color: #42474D;}
|
||||
.heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nezbere {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_small {color: #42474D;}
|
||||
.sevtug_large {color: #AF0AAF; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.sevtug {color: #AF0AAF; font-weight: bold; font-style: italic;}
|
||||
.sevtug_small {color: #AF0AAF;}
|
||||
.inathneq_large {color: #1E8CE1; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.inathneq {color: #1E8CE1; font-weight: bold; font-style: italic;}
|
||||
.inathneq_small {color: #1E8CE1;}
|
||||
.nzcrentr_large {color: #DAAA18; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr {color: #DAAA18; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr_small {color: #DAAA18;}
|
||||
.neovgre_large {color: #6E001A; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.neovgre {color: #6E001A; font-weight: bold; font-style: italic;}
|
||||
.neovgre_small {color: #6E001A;}
|
||||
|
||||
.newscaster {color: #800000;}
|
||||
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
|
||||
|
||||
.alien {color: #543354;}
|
||||
.noticealien {color: #00c000;}
|
||||
.alertalien {color: #00c000; font-weight: bold;}
|
||||
.changeling {color: #800080; font-style: italic;}
|
||||
|
||||
.spider {color: #4d004d;}
|
||||
|
||||
.interface {color: #330033;}
|
||||
|
||||
.sans {font-family: "Comic Sans MS", cursive, sans-serif;}
|
||||
.papyrus {font-family: "Papyrus", cursive, sans-serif;}
|
||||
.robot {font-family: "Courier New", cursive, sans-serif;}
|
||||
|
||||
.command_headset {font-weight: bold; font-size: 24px;}
|
||||
.small {font-size: 8px;}
|
||||
.big {font-size: 24px;}
|
||||
.reallybig {font-size: 32px;}
|
||||
.extremelybig {font-size: 40px;}
|
||||
.greentext {color: #00FF00; font-size: 24px;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.spooky {color: #FF6100;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
@keyframes velvet {
|
||||
0% { color: #400020; }
|
||||
40% { color: #FF0000; }
|
||||
50% { color: #FF8888; }
|
||||
60% { color: #FF0000; }
|
||||
100% { color: #400020; }
|
||||
}
|
||||
|
||||
.hypnophrase {color: #202020; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #202020; }
|
||||
25% { color: #4b02ac; }
|
||||
50% { color: #9f41f1; }
|
||||
75% { color: #541c9c; }
|
||||
100% { color: #7adbf3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #f75a5a; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #f75a5a; }
|
||||
}
|
||||
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
.memo {color: #638500; text-align: center;}
|
||||
.memoedit {text-align: center; font-size: 16px;}
|
||||
.abductor {color: #800080; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.slime {color: #00CED1;}
|
||||
.drone {color: #848482;}
|
||||
.monkey {color: #975032;}
|
||||
.swarmer {color: #2C75FF;}
|
||||
.resonate {color: #298F85;}
|
||||
|
||||
.monkeyhive {color: #774704;}
|
||||
.monkeylead {color: #774704; font-size: 2;}
|
||||
|
||||
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
|
||||
.connectionClosed.restored {background: green;}
|
||||
.internal.boldnshit {color: blue; font-weight: bold;}
|
||||
|
||||
/* HELPER CLASSES */
|
||||
.text-normal {font-weight: normal; font-style: normal;}
|
||||
.hidden {display: none; visibility: hidden;}/*****************************************
|
||||
*
|
||||
* GLOBAL STYLES
|
||||
*
|
||||
******************************************/
|
||||
html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
color: #000000;
|
||||
}
|
||||
body {
|
||||
background: #E0E0E0; /*CIT CHANGE - darkens chatbox a lil*/
|
||||
font-family: Verdana, sans-serif;
|
||||
font-size: 9pt;
|
||||
line-height: 1.2;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1;
|
||||
-ms-interpolation-mode: nearest-neighbor;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
img.icon {
|
||||
height: 1em;
|
||||
min-height: 16px;
|
||||
width: auto;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
|
||||
.r:before { /* "repeated" badge class for combined messages */
|
||||
content: 'x';
|
||||
}
|
||||
.r {
|
||||
display: inline-block;
|
||||
min-width: 0.5em;
|
||||
font-size: 0.7em;
|
||||
padding: 0.2em 0.3em;
|
||||
line-height: 1;
|
||||
color: white;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
background-color: crimson;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
a {color: #0000ff;}
|
||||
a.visited {color: #ff00ff;}
|
||||
a:visited {color: #ff00ff;}
|
||||
a.popt {text-decoration: none;}
|
||||
|
||||
/*****************************************
|
||||
*
|
||||
* OUTPUT NOT RELATED TO ACTUAL MESSAGES
|
||||
*
|
||||
******************************************/
|
||||
#loading {
|
||||
position: fixed;
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin: -75px 0 0 -150px;
|
||||
}
|
||||
#loading i {display: block; padding-bottom: 3px;}
|
||||
|
||||
#messages {
|
||||
font-size: 13px;
|
||||
padding: 3px;
|
||||
margin: 0;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#newMessages {
|
||||
position: fixed;
|
||||
display: block;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
padding: 8px;
|
||||
background: #ddd;
|
||||
text-decoration: none;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
#newMessages:hover {background: #ccc;}
|
||||
#newMessages i {vertical-align: middle; padding-left: 3px;}
|
||||
#ping {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 80px;
|
||||
width: 45px;
|
||||
background: #ddd;
|
||||
height: 30px;
|
||||
padding: 8px 0 2px 0;
|
||||
}
|
||||
#ping i {display: block; text-align: center;}
|
||||
#ping .ms {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 8pt;
|
||||
padding-top: 2px;
|
||||
}
|
||||
#userBar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
#userBar .subCell {
|
||||
background: #ddd;
|
||||
height: 30px;
|
||||
padding: 5px 0;
|
||||
display: block;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
line-height: 28px;
|
||||
border-top: 1px solid #b4b4b4;
|
||||
}
|
||||
#userBar .subCell:hover {background: #ccc;}
|
||||
#userBar .toggle {
|
||||
width: 40px;
|
||||
background: #ccc;
|
||||
border-top: 0;
|
||||
float: right;
|
||||
text-align: center;
|
||||
}
|
||||
#userBar .sub {clear: both; display: none; width: 160px;}
|
||||
#userBar .sub.scroll {overflow-y: scroll;}
|
||||
#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;}
|
||||
#userBar .sub span {
|
||||
display: block;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
}
|
||||
#userBar .sub i {
|
||||
display: block;
|
||||
padding: 0 5px;
|
||||
font-size: 1.1em;
|
||||
width: 22px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
float: right;
|
||||
}
|
||||
#userBar .sub input {
|
||||
position: absolute;
|
||||
padding: 7px 5px;
|
||||
width: 121px;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
}
|
||||
#userBar .topCell {border-top: 0;}
|
||||
|
||||
/* POPUPS */
|
||||
.popup {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
background: #ddd;
|
||||
}
|
||||
.popup .close {
|
||||
position: absolute;
|
||||
background: #aaa;
|
||||
top: 0;
|
||||
right: 0;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
z-index: 2;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.popup .close:hover {background: #999;}
|
||||
.popup .head {
|
||||
background: #999;
|
||||
color: #ddd;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
border-bottom: 2px solid green;
|
||||
}
|
||||
.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;}
|
||||
.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;}
|
||||
.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;}
|
||||
.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;}
|
||||
|
||||
.changeFont {padding: 10px;}
|
||||
.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;}
|
||||
.changeFont a:hover {background: #ccc;}
|
||||
|
||||
.highlightPopup {padding: 10px; text-align: center;}
|
||||
.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;}
|
||||
.highlightPopup input.highlightColor {background-color: #FFFF00;}
|
||||
.highlightPopup input.highlightTermSubmit {margin-top: 5px;}
|
||||
|
||||
/* ADMIN CONTEXT MENU */
|
||||
.contextMenu {
|
||||
background-color: #ddd;
|
||||
position: fixed;
|
||||
margin: 2px;
|
||||
width: 150px;
|
||||
}
|
||||
.contextMenu a {
|
||||
display: block;
|
||||
padding: 2px 5px;
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.contextMenu a:hover {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
/* ADMIN FILTER MESSAGES MENU */
|
||||
.filterMessages {padding: 5px;}
|
||||
.filterMessages div {padding: 2px 0;}
|
||||
.filterMessages input {}
|
||||
.filterMessages label {}
|
||||
|
||||
.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
|
||||
|
||||
|
||||
/*****************************************
|
||||
*
|
||||
* OUTPUT ACTUALLY RELATED TO MESSAGES
|
||||
*
|
||||
******************************************/
|
||||
|
||||
/* MOTD */
|
||||
.motd {color: #638500; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;}
|
||||
|
||||
/* ADD HERE FOR BOLD */
|
||||
.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;}
|
||||
|
||||
/* ADD HERE FOR ITALIC */
|
||||
.italic, .italics, .emote {font-style: italic;}
|
||||
|
||||
/* OUTPUT COLORS */
|
||||
.highlight {background: yellow;}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
em {font-style: normal; font-weight: bold;}
|
||||
|
||||
.ooc { font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #700038; font-weight: bold;}
|
||||
|
||||
.adminsay {color: #FF4500; font-weight: bold;}
|
||||
.admin {color: #386aff; font-weight: bold;}
|
||||
|
||||
.name { font-weight: bold;}
|
||||
|
||||
.say {}
|
||||
.deadsay {color: #5c00e6;}
|
||||
.binarysay {color: #20c20e; background-color: #000000; display: block;}
|
||||
.binarysay a {color: #00ff00;}
|
||||
.binarysay a:active, .binarysay a:visited {color: #88ff88;}
|
||||
.radio {color: #008000;}
|
||||
.sciradio {color: #993399;}
|
||||
.comradio {color: #948f02;}
|
||||
.secradio {color: #a30000;}
|
||||
.medradio {color: #337296;}
|
||||
.engradio {color: #fb5613;}
|
||||
.suppradio {color: #a8732b;}
|
||||
.servradio {color: #6eaa2c;}
|
||||
.syndradio {color: #6d3f40;}
|
||||
.centcomradio {color: #686868;}
|
||||
.aiprivradio {color: #ff00ff;}
|
||||
.redteamradio {color: #ff0000;}
|
||||
.blueteamradio {color: #0000ff;}
|
||||
|
||||
.yell { font-weight: bold;}
|
||||
|
||||
.alert {color: #ff0000;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.emote { font-style: italic;}
|
||||
.selecteddna {color: #ffffff; background-color: #001B1B}
|
||||
|
||||
.attack {color: #ff0000;}
|
||||
.disarm {color: #990000;}
|
||||
.passive {color: #660000;}
|
||||
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
.greenannounce {color: #00ff00; font-weight: bold;}
|
||||
.rose {color: #ff5050;}
|
||||
.info {color: #0000CC;}
|
||||
.notice {color: #000099;}
|
||||
.boldnotice {color: #000099; font-weight: bold;}
|
||||
.adminnotice {color: #0000ff;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.green {color: #03ff39;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
|
||||
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
|
||||
.shadowling {color: #3b2769;}
|
||||
.cult {color: #960000;}
|
||||
|
||||
.cultitalic {color: #960000; font-style: italic;}
|
||||
.cultbold {color: #960000; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
|
||||
.colossus {color: #7F282A; font-size: 40px;}
|
||||
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #660099; font-style: italic;}
|
||||
.purple {color: #5e2d79;}
|
||||
.holoparasite {color: #35333a;}
|
||||
|
||||
.revennotice {color: #1d2953;}
|
||||
.revenboldnotice {color: #1d2953; font-weight: bold;}
|
||||
.revenbignotice {color: #1d2953; font-weight: bold; font-size: 24px;}
|
||||
.revenminor {color: #823abb}
|
||||
.revenwarning {color: #760fbb; font-style: italic;}
|
||||
.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
|
||||
.umbra {color: #5000A0;}
|
||||
.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
|
||||
.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
|
||||
|
||||
.brass {color: #BE8700;}
|
||||
.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
|
||||
.large_brass {color: #BE8700; font-size: 24px;}
|
||||
.big_brass {color: #BE8700; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;}
|
||||
.alloy {color: #42474D;}
|
||||
.heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nezbere {color: #42474D; font-weight: bold; font-style: italic;}
|
||||
.nezbere_small {color: #42474D;}
|
||||
.sevtug_large {color: #AF0AAF; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.sevtug {color: #AF0AAF; font-weight: bold; font-style: italic;}
|
||||
.sevtug_small {color: #AF0AAF;}
|
||||
.inathneq_large {color: #1E8CE1; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.inathneq {color: #1E8CE1; font-weight: bold; font-style: italic;}
|
||||
.inathneq_small {color: #1E8CE1;}
|
||||
.nzcrentr_large {color: #DAAA18; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr {color: #DAAA18; font-weight: bold; font-style: italic;}
|
||||
.nzcrentr_small {color: #DAAA18;}
|
||||
.neovgre_large {color: #6E001A; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.neovgre {color: #6E001A; font-weight: bold; font-style: italic;}
|
||||
.neovgre_small {color: #6E001A;}
|
||||
|
||||
.newscaster {color: #800000;}
|
||||
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
|
||||
|
||||
.alien {color: #543354;}
|
||||
.noticealien {color: #00c000;}
|
||||
.alertalien {color: #00c000; font-weight: bold;}
|
||||
.changeling {color: #800080; font-style: italic;}
|
||||
|
||||
.spider {color: #4d004d;}
|
||||
|
||||
.interface {color: #330033;}
|
||||
|
||||
.sans {font-family: "Comic Sans MS", cursive, sans-serif;}
|
||||
.papyrus {font-family: "Papyrus", cursive, sans-serif;}
|
||||
.robot {font-family: "Courier New", cursive, sans-serif;}
|
||||
|
||||
.command_headset {font-weight: bold; font-size: 24px;}
|
||||
.small {font-size: 8px;}
|
||||
.big {font-size: 24px;}
|
||||
.reallybig {font-size: 32px;}
|
||||
.extremelybig {font-size: 40px;}
|
||||
.greentext {color: #00FF00; font-size: 24px;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.hypnophrase {color: #202020; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #202020; }
|
||||
25% { color: #4b02ac; }
|
||||
50% { color: #9f41f1; }
|
||||
75% { color: #541c9c; }
|
||||
100% { color: #7adbf3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #f75a5a; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #f75a5a; }
|
||||
}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
.memo {color: #638500; text-align: center;}
|
||||
.memoedit {text-align: center; font-size: 16px;}
|
||||
.abductor {color: #800080; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.slime {color: #00CED1;}
|
||||
.drone {color: #848482;}
|
||||
.monkey {color: #975032;}
|
||||
.swarmer {color: #2C75FF;}
|
||||
.resonate {color: #298F85;}
|
||||
|
||||
.monkeyhive {color: #774704;}
|
||||
.monkeylead {color: #774704; font-size: 2;}
|
||||
|
||||
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
|
||||
.connectionClosed.restored {background: green;}
|
||||
.internal.boldnshit {color: blue; font-weight: bold;}
|
||||
|
||||
/* HELPER CLASSES */
|
||||
.text-normal {font-weight: normal; font-style: normal;}
|
||||
.hidden {display: none; visibility: hidden;}
|
||||
4
html/changelogs/AutoChangeLog-pr-9480.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Poojawa"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Clarified access descriptions of some jobs"
|
||||
4
html/changelogs/AutoChangeLog-pr-9513.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "kevinz000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "Medibots no longer kill slimes when trying to heal their toxins."
|
||||
4
html/changelogs/AutoChangeLog-pr-9539.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "kevinz000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "The Syndicate started selling claymores to their agents."
|
||||
4
html/changelogs/AutoChangeLog-pr-9572.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "kevinz000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixes storage bugs regarding reaching into things you shouldn't be able to reach into."
|
||||
6
html/changelogs/AutoChangeLog-pr-9590.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
author: "Ghommie (original PR by cacogen)"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "The font size of all text in the chat window now scales"
|
||||
- tweak: "High volume (megaphone/head of staff headset) is a slightly smaller"
|
||||
- tweak: "Admins have slightly larger OOC text"
|
||||
4
html/changelogs/AutoChangeLog-pr-9599.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Onule & Nemvar (ported by Ghommie)"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "New Revenant icons"
|
||||
4
html/changelogs/AutoChangeLog-pr-9600.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Trilbyspaceclone"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added two seed packets of cotten to ash walkers base"
|
||||
4
html/changelogs/AutoChangeLog-pr-9603.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "fixing cydonian armor a bit."
|
||||
4
html/changelogs/AutoChangeLog-pr-9613.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Linzolle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Target head and throw a hat at someone to toss it onto their head, knocking whatever they're wearing off if they are wearing a hat. Some headgear can't be knocked off this way."
|
||||
4
html/changelogs/AutoChangeLog-pr-9617.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "JTGSZ"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "barricade girder walls use PlaceOnTop instead of new"
|
||||
5
html/changelogs/AutoChangeLog-pr-9620.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
author: "YakumoChen"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds beanbag slugs to the sec protolathe at round start"
|
||||
- bugfix: "Brings shotgun ammo availability back in like between seclathe and autolathe."
|
||||
4
html/changelogs/AutoChangeLog-pr-9622.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "Improved the Cyber Sylph' good yet cumbersome bar sign a little."
|
||||
5
html/changelogs/AutoChangeLog-pr-9623.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
author: "Sirich96 and Dennok (ported by Ghommie)"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added new Teleporter Station sprites"
|
||||
- rscadd: "Added teleport station calibration animation."
|
||||
4
html/changelogs/AutoChangeLog-pr-9630.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Cyborgs can now use camera consoles on the edge of their widescreen. These consoles are also TK friendly now."
|
||||
17
html/changelogs/AutoChangeLog-pr-9635.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
author: "Thalpy"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "1. Kev asked that there were no antag datums used, so that's been changed.
|
||||
2. Tricks can no longer turn someone into a dullahan, instead you have to spend candies to get that. I felt it was too mean to turn people into that, I didn't realise you couldn't revert it.
|
||||
3. Barth will no longer as for impossible items.
|
||||
4. Barth will no longer as for the same item multiple times.
|
||||
5. Barth will now accept broader things, rather than asking for something, when meaning something specific.
|
||||
6. Jacq will now no longer poof off the z level.
|
||||
7. Jacq will (hopefully) stop spooking the AI by teleporting into there
|
||||
8. Jacq will now try to teleport to a location with someone nearby.
|
||||
9. Barth will tell you where Jacq is currently when you speak to him.
|
||||
10. You can trade 2 candies for a Jacq Tracq (tm)
|
||||
11. Jacq should stop getting mad and cover the station in gas when killed.
|
||||
12. Fixed Jacq not singing (the link died).
|
||||
13. Slightly changed wording so that people will hopefully get to know her.
|
||||
14. Jacq no longer disappears when you're getting to know her."
|
||||
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 284 KiB |
|
Before Width: | Height: | Size: 349 KiB After Width: | Height: | Size: 353 KiB |
BIN
icons/obj/1x2.dmi
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 676 KiB After Width: | Height: | Size: 679 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.8 KiB |