mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Late September Sync (#579)
* Elevators aren't bottomless voids!
* Updates changelog
* Sombrero Code
* Fixes #2365
* Adds changelog
* Sleeper is evil.
* no message
* Changelog
* Stops observers from leaving prints on the ground.
No more spooking the mortals, ghosts.
* Allows autotraitor in secret to start with 0 players
* Adds changelog
* Makes diona slightly less slow
* Adds changelog
* Bowling Shirts
* Updates changelog
* Adds a missing description
* Flat Cap Changes and Hair Bow
* Fixed Error
* Adds an in-hand
* Lower Torso cannot be amputated
* Smoke works, adds changelog
* Updates changelog
* Makes Unathi Voidsuits Less Fat
* Medical related fixes
* Fuzzy Cuffs
* Tube Top
* Made Icons for Security Suit Less Gaunt
* Revert "Medical related fixes"
This reverts commit d7c59520e6.
* Just the fix to random med item now
* Adds organ fixing
* Fixes Evening Glove Coloring
* HAZMAT Suits
* Changes Unathi sprite slightly
* Tweaks skirt pathing
* Corrects changelog
* Adds changelog
* Construction Voidsuits
* makes people bleed real good
* adderino changeling
* Biohazard Voidsuit
* Revert "Revert "Adds hub passwordu""
* Explosive implants should no longer gib on limbs.
* Adds space penguins and space geese.
* Revert "Revert "Revert "Adds hub passwordu"""
* Makes flash rounds respect eye protection
* Water > Fire
* There's plenty lying around, I think
* Naming inconsistencies fixed
The short naming of central command has been really inconsistent across
the game's files. This has always annoyed the shit out of me.
CentComm and Centcomm and Centcom are now all CentCom, specifically with
that capitalization. Why one M instead of two M's? Because Comm with two
'M's = Communications. Hence, Telecomms, NOT Telecoms. Telecoms is
incorrect. CentCom was also chosen because CentCom with one M and this
casing is most found throughout the game's files.
Speaking of Telecomms, I corrected one instance in the game where it's
Telecom. Like I said, this is not correct. There was only one
inconsistency.
Likewise, Nanotrasen has been changed to NanoTrasen. Nanotrasen only
appears 20 times, where NanoTrasen appears 62. NanoTrasen is clearly the
preferred, correct naming.
* Almost forgot plural of Telecomm
* Finalizes work, adds designs to research.
* Press Vest
* Removes Mags/Shells, Adds Recorder and Flashlight
* Fixes spans.
* Raises the number of players needed to start Ninja
* Still needs to fix internal bleeding
* Allows Wirer To Attach to Toolbelts
* Fixes #393
* Tweaks FBP temperature
* Corrects Changelog
* Fixes some Advanced Egun oversights
* Embiggens the laser carbine and the lasercannon.
* Messenger Bags
* Health analyzers detect appendicitis
* Custom Circuit Additions & Fixes
Adds Med Scanner and Advanced Med Scanner circuits.
Clock circuit is now functional.
Five second delay will delay for five seconds and not one second.
Renaming circuitry now respects ability to do so (e.g. being alive).
Firing circuit can now be obtained by science normally.
Examining inside assembly cases now requires adjacency.
* More Additions
You can now cancel inputting on a text or numberpad.
Zero is now displayed properly on the UI and not be shown as null.
The small and medium assemblies now have real sprites.
Total health percentage for med scanners and advanced med scanners now reports a proper percentage and not 1 or 0.
The constant memory chip now can be set by using it in hand, making it usable.
The constant memory chip now accepts refs as data to store. To use, select 'ref' when using inhand, then hit it against the thing you want to store.
* Allows Chemists to View Medical Records on their PDA
* Refactors splinting
* Refactors the forceMove() drop.
Makes dropping a its proc instead, cleaning up forceMove() handling.
* Replaces ORGAN_SPLINTED
* Supportive suits now only loop through bad organs
* Adds changelog
* Lasercannon tweaks
* Bloodloss tweak
* Adds hawaii shirt
Attachable to any uniform, works like suit jackets.
* Changelog cause why not
At this rate I'll forget how to do those otherwise
* Adds randomized alohas
Also some color matrix helpers from TG
* Appendicitis doesn't cancel itself out.
* Removes debug stuff
* Radsuit Sprite Changes
* Allows us to actually use the messenger bags
* Fixes spelling mistake
* Ported ventcrawling from vg.
* Fixes changelog errors
* Updates changelog
* Tweaks vent crawling.
The ability to ventcrawl is now checked by the /handle_ventcrawl() proc, making it possible to properly check before and after the do_after() call.
Moves various checks into the base can_ventcrawl proc.
Now lists the first object that prevents a mob from ventcrawling, making it easier to correct the exception list.
Removes the issmall() check, instead checks if the crawling mob has the relevant verb. Fixes #14081.
* Suit Storage Items
* Adds in IB removal
* More Circuit Things
Adds Locomotion circuit, which makes the machine move in a given direction.
Adds Signaler circuit, which can send and receive signals from a signaler.
Adds a new tool, the Debugger, which lets one directly set data in a specific pin. It can also pulse activation pins.
Adds ability to define custom cooldown times for each component.
Smoke generator now has a 30 second cooldown.
Cleans up some code somewhat.
* Adds design for locomotion circuit.
* Cleans up code
* Even more sprites by Mechoid.
Fixes abs to rel converter.
* Black Messenger Bag
* Powersink fix
* Even More Sodding Circuits
Adds new RNG circuit, to make random numbers each time.
Adds new Concatenating circuit, so you can make lots of small strings into one big one.
Adds new light and advanced light circuit. Basic just has a normal light that can be toggled. Advanced allows it to be any color using RGB, and a brightness between 0 and 6.
New sprites for the debugger and wirer, by Mechoid.
Hopefully finally fixes smoke generator from being unobtainable.
* Adds basic circuit kit and spare circuit tools to Tech Storage.
* Part the first
* Changelog
* Allows robots to be constructed with prosthetic limbs as well as borg limbs.
* Map change
* Secbelt can hold stun revolvers and eguns
* Voidsuit Sprite Changes
* Tweaks burst laser
* Lasers, energy projectiles, and muzzle flashes now produce light.
It's a bit wonky due to lighting only updating once every half-second,
but it's very much functional, at least on my desktop.
* Adds bridge bunnies
* Slightly cleans up the occupation screen, adds uniform to locker
* Map Changes
* Adds Changelog
* Fixes stuff
* Allows jobbanning of cargo department jobs
* Re-adds balance changes to heavy lasers.
They got changed by accident when I did the laser light show.
Also, adds changelogs for my last couple changes, because I'm an
idiot and forgot them.
* Fixed missing sprite
* Dress Loadout Additions
* I Can't Believe It's Not Circuits (it is)
Fixes numberpad and letterpad pulsing.
Debugger and Constant chip can now have null written to it.
Adds new sound output, with two types so far. One being the 'beeper' type, which can do things like buzz, ping, beep, etc. The second type is a securitron speaker, which allows us to get closer to building a functioning Beepsky.
* Adds EPv2 Circuit
Adds a circuit that allows it to send and receive EPv2 messages, allowing for a more robust transmission of data that signalers cannot deliver. Bonus: Communicators can send text messages to custom machines using this.
* Updates changelog
* Fixes not being able to put things in medkits.
* Technomancer Tweaks
Cost for various spells and equipment adjusted greatly. In general, things are cheaper, and everything should now be in multiples of 25, so no points are wasted.
The default jumpsuit for Technomancers is now heavily insulated, protecting them from tasers, batons, and perhaps unfortunate lightning strikes.
Instability between 31 and 50 made less harsh.
Wards made with a scepter of enhancement will break the cloak of anyone invisible that it can see.
Fire aura buffed, increased rate of heating as well as temperature cap for both non-scepter and scepter effects.
Reflect spell made more forgiving for the Technomancer, lasting longer before expiring.
Projectile spells should be able to hit people more reliably.
* Shotgun Reloading Tweak
Adds ability to hit a shotgun or similar weapon with a container containing ammo, to load said ammo into the shotgun one at a time automatically, instead of having to play inventory tetris, as requested by some people.
* Use sanitizeName for the guest pass terminal name input to prevent excessively long names.
* Circuit UI and Assembly Tweaks
Adds new drone assembly, which has stats between the medium and large assembly. Sprites by Mechoid.
Assemblies now have a light UI when examined while opened, which displays what's inside, as well as how close to the cap for parts or complexity you are getting. Click the names of a component to open the wiring interface for that component. You can also rename each component from the UI. Bonus: Having multiple components of the same name will no longer appear as one component.
Adds ability to rename the assembly, using the new UI.
* Revert "Ported ventcrawling from vg."
* Re-adds a nice, useful macro
* Fixes #2431
* Tweaks Riot armor
* Fixes a typo in the DNA Modifier
* Ripped Jeans (And White Shorts)
* Adds shanking
* Adds changelog
* Removes a stray world <<
* Ported ventcrawling from vg.
* Tweaks vent crawling.
The ability to ventcrawl is now checked by the /handle_ventcrawl() proc, making it possible to properly check before and after the do_after() call.
Moves various checks into the base can_ventcrawl proc.
Now lists the first object that prevents a mob from ventcrawling, making it easier to correct the exception list.
Removes the issmall() check, instead checks if the crawling mob has the relevant verb. Fixes #14081.
* Long, time-consuming not one-line fix
* Makes cigs branded too
Description of cig/cigbutt would reveal its brand for dastardly murdersolving revelations.
* Adding a article
* The door hacker now only pings the user
* Removes implants from Deathsquad
* Adds the ability to apply pressure to bleeding wounds
* Shoes
* EVA rigs should use their default sprites on Taj and Unathi
* Fixing some errors
* Update loadout_xeno.dm
* Delete back_vr.dmi
* Add files via upload
This commit is contained in:
@@ -29,6 +29,8 @@ Pipelines + Other Objects -> Pipe network
|
||||
var/pipe_color
|
||||
|
||||
var/global/datum/pipe_icon_manager/icon_manager
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
/obj/machinery/atmospherics/New()
|
||||
if(!icon_manager)
|
||||
|
||||
@@ -6,9 +6,6 @@ obj/machinery/atmospherics/binary
|
||||
var/datum/gas_mixture/air1
|
||||
var/datum/gas_mixture/air2
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
var/datum/pipe_network/network1
|
||||
var/datum/pipe_network/network2
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
|
||||
var/dP = 0
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
var/datum/pipe_network/network1
|
||||
var/datum/pipe_network/network2
|
||||
|
||||
|
||||
@@ -7,8 +7,6 @@ obj/machinery/atmospherics/trinary
|
||||
var/datum/gas_mixture/air2
|
||||
var/datum/gas_mixture/air3
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
var/obj/machinery/atmospherics/node3
|
||||
|
||||
var/datum/pipe_network/network1
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
var/state = 0 // 0 = go straight, 1 = go to side
|
||||
|
||||
// like a trinary component, node1 is input, node2 is side output, node3 is straight output
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
var/obj/machinery/atmospherics/node3
|
||||
|
||||
var/datum/pipe_network/network_node1
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
var/open = 0
|
||||
var/openDuringInit = 0
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
var/datum/pipe_network/network_node1
|
||||
var/datum/pipe_network/network_node2
|
||||
|
||||
@@ -153,9 +153,6 @@
|
||||
dir = SOUTH
|
||||
initialize_directions = SOUTH|NORTH
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
var/minimum_temperature_difference = 300
|
||||
var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No
|
||||
|
||||
@@ -427,8 +424,6 @@
|
||||
dir = SOUTH
|
||||
initialize_directions = EAST|NORTH|WEST
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
var/obj/machinery/atmospherics/node3
|
||||
|
||||
level = 1
|
||||
@@ -687,8 +682,6 @@
|
||||
dir = SOUTH
|
||||
initialize_directions = NORTH|SOUTH|EAST|WEST
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
var/obj/machinery/atmospherics/node3
|
||||
var/obj/machinery/atmospherics/node4
|
||||
|
||||
@@ -1074,8 +1067,6 @@
|
||||
initialize_directions = SOUTH
|
||||
density = 1
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/New()
|
||||
icon_state = "air"
|
||||
initialize_directions = dir
|
||||
@@ -1238,8 +1229,6 @@
|
||||
|
||||
var/build_killswitch = 1
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/vent/New()
|
||||
initialize_directions = dir
|
||||
..()
|
||||
|
||||
@@ -35,9 +35,8 @@
|
||||
#define ORGAN_BLEEDING (1<<1)
|
||||
#define ORGAN_BROKEN (1<<2)
|
||||
#define ORGAN_DESTROYED (1<<3)
|
||||
#define ORGAN_SPLINTED (1<<4)
|
||||
#define ORGAN_DEAD (1<<5)
|
||||
#define ORGAN_MUTATED (1<<6)
|
||||
#define ORGAN_DEAD (1<<4)
|
||||
#define ORGAN_MUTATED (1<<5)
|
||||
|
||||
#define DROPLIMB_EDGE 0
|
||||
#define DROPLIMB_BLUNT 1
|
||||
|
||||
@@ -55,7 +55,7 @@ var/global/list/skin_styles_female_list = list() //unused
|
||||
var/datum/category_collection/underwear/global_underwear = new()
|
||||
|
||||
//Backpacks
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt")
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag")
|
||||
var/global/list/pdachoicelist = list("Default", "Slim", "Old")
|
||||
var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg)
|
||||
|
||||
|
||||
@@ -15,3 +15,101 @@
|
||||
animate(src, transform = m120, time = speed, loops)
|
||||
animate(transform = m240, time = speed)
|
||||
animate(transform = m360, time = speed)
|
||||
|
||||
//The X pixel offset of this matrix
|
||||
/matrix/proc/get_x_shift()
|
||||
. = c
|
||||
|
||||
//The Y pixel offset of this matrix
|
||||
/matrix/proc/get_y_shift()
|
||||
. = f
|
||||
// Color matrices:
|
||||
|
||||
//Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1.
|
||||
#define LUMR 0.2126
|
||||
#define LUMG 0.7152
|
||||
#define LUMB 0.0722
|
||||
|
||||
//Still need color matrix addition, negation, and multiplication.
|
||||
|
||||
//Returns an identity color matrix which does nothing
|
||||
/proc/color_identity()
|
||||
return list(1,0,0, 0,1,0, 0,0,1)
|
||||
|
||||
//Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites
|
||||
//TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone)
|
||||
/proc/color_rotation(angle)
|
||||
if(angle == 0)
|
||||
return color_identity()
|
||||
angle = Clamp(angle, -180, 180)
|
||||
var/cos = cos(angle)
|
||||
var/sin = sin(angle)
|
||||
|
||||
var/constA = 0.143
|
||||
var/constB = 0.140
|
||||
var/constC = -0.283
|
||||
return list(
|
||||
LUMR + cos * (1-LUMR) + sin * -LUMR, LUMR + cos * -LUMR + sin * constA, LUMR + cos * -LUMR + sin * -(1-LUMR),
|
||||
LUMG + cos * -LUMG + sin * -LUMG, LUMG + cos * (1-LUMG) + sin * constB, LUMG + cos * -LUMG + sin * LUMG,
|
||||
LUMB + cos * -LUMB + sin * (1-LUMB), LUMB + cos * -LUMB + sin * constC, LUMB + cos * (1-LUMB) + sin * LUMB
|
||||
)
|
||||
|
||||
//Makes everything brighter or darker without regard to existing color or brightness
|
||||
/proc/color_brightness(power)
|
||||
power = Clamp(power, -255, 255)
|
||||
power = power/255
|
||||
|
||||
return list(1,0,0, 0,1,0, 0,0,1, power,power,power)
|
||||
|
||||
/var/list/delta_index = list(
|
||||
0, 0.01, 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.11,
|
||||
0.12, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.22, 0.24,
|
||||
0.25, 0.27, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42,
|
||||
0.44, 0.46, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.65, 0.68,
|
||||
0.71, 0.74, 0.77, 0.80, 0.83, 0.86, 0.89, 0.92, 0.95, 0.98,
|
||||
1.0, 1.06, 1.12, 1.18, 1.24, 1.30, 1.36, 1.42, 1.48, 1.54,
|
||||
1.60, 1.66, 1.72, 1.78, 1.84, 1.90, 1.96, 2.0, 2.12, 2.25,
|
||||
2.37, 2.50, 2.62, 2.75, 2.87, 3.0, 3.2, 3.4, 3.6, 3.8,
|
||||
4.0, 4.3, 4.7, 4.9, 5.0, 5.5, 6.0, 6.5, 6.8, 7.0,
|
||||
7.3, 7.5, 7.8, 8.0, 8.4, 8.7, 9.0, 9.4, 9.6, 9.8,
|
||||
10.0)
|
||||
|
||||
//Exxagerates or removes brightness
|
||||
/proc/color_contrast(value)
|
||||
value = Clamp(value, -100, 100)
|
||||
if(value == 0)
|
||||
return color_identity()
|
||||
|
||||
var/x = 0
|
||||
if (value < 0)
|
||||
x = 127 + value / 100 * 127;
|
||||
else
|
||||
x = value % 1
|
||||
if(x == 0)
|
||||
x = delta_index[value]
|
||||
else
|
||||
x = delta_index[value] * (1-x) + delta_index[value+1] * x//use linear interpolation for more granularity.
|
||||
x = x * 127 + 127
|
||||
|
||||
var/mult = x / 127
|
||||
var/add = 0.5 * (127-x) / 255
|
||||
return list(mult,0,0, 0,mult,0, 0,0,mult, add,add,add)
|
||||
|
||||
//Exxagerates or removes colors
|
||||
/proc/color_saturation(value as num)
|
||||
if(value == 0)
|
||||
return color_identity()
|
||||
value = Clamp(value, -100, 100)
|
||||
if(value > 0)
|
||||
value *= 3
|
||||
var/x = 1 + value / 100
|
||||
var/inv = 1 - x
|
||||
var/R = LUMR * inv
|
||||
var/G = LUMG * inv
|
||||
var/B = LUMB * inv
|
||||
|
||||
return list(R + x,R,R, G,G + x,G, B,B,B + x)
|
||||
|
||||
#undef LUMR
|
||||
#undef LUMG
|
||||
#undef LUMB
|
||||
@@ -158,7 +158,7 @@ Proc for attack log creation, because really why not
|
||||
else
|
||||
return pick("chest", "groin")
|
||||
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1)
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, target_zone = 0, uninterruptible = 0, progress = 1)
|
||||
if(!user || !target)
|
||||
return 0
|
||||
var/user_loc = user.loc
|
||||
@@ -194,6 +194,10 @@ Proc for attack log creation, because really why not
|
||||
. = 0
|
||||
break
|
||||
|
||||
if(target_zone && user.zone_sel.selecting != target_zone)
|
||||
. = 0
|
||||
break
|
||||
|
||||
if (progbar)
|
||||
qdel(progbar)
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#define Clamp(x, y, z) (x <= y ? y : (x >= z ? z : x))
|
||||
|
||||
#define CLAMP01(x) (Clamp(x, 0, 1))
|
||||
|
||||
#define get_turf(A) get_step(A,0)
|
||||
@@ -42,3 +43,5 @@
|
||||
#define isxeno(A) istype(A, /mob/living/simple_animal/xeno)
|
||||
|
||||
#define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
|
||||
|
||||
#define to_chat(target, message) target << message
|
||||
|
||||
@@ -209,7 +209,7 @@ var/global/datum/shuttle_controller/shuttle_controller
|
||||
shuttle.docking_controller_tag = "centcom_shuttle"
|
||||
shuttle.dock_target_station = "centcom_shuttle_dock_airlock"
|
||||
shuttle.dock_target_offsite = "centcom_shuttle_bay"
|
||||
shuttles["Centcom"] = shuttle
|
||||
shuttles["CentCom"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
shuttle = new()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
||||
..()
|
||||
|
||||
/******************** Nanotrasen/Malf ********************/
|
||||
/******************** NanoTrasen/Malf ********************/
|
||||
/datum/ai_laws/nanotrasen
|
||||
name = "NT Default"
|
||||
selectable = 1
|
||||
@@ -30,7 +30,7 @@
|
||||
set_zeroth_law(config.law_zero)
|
||||
..()
|
||||
|
||||
/************* Nanotrasen Aggressive *************/
|
||||
/************* NanoTrasen Aggressive *************/
|
||||
/datum/ai_laws/nanotrasen_aggressive
|
||||
name = "NT Aggressive"
|
||||
selectable = 1
|
||||
|
||||
@@ -43,15 +43,15 @@
|
||||
|
||||
/datum/locations/exodus
|
||||
name = "NSS Exodus"
|
||||
desc = "A highly profitable research, mining, and supply dock for Nanotrasen that serves as one of their many facilities in exploiting the \
|
||||
desc = "A highly profitable research, mining, and supply dock for NanoTrasen that serves as one of their many facilities in exploiting the \
|
||||
wonders of phoron. It is currently orbiting around Erebus and maintains close contact with the NAS Crescent. The station itself has been \
|
||||
a target for a large number of Mercenaries and other companies wishing to steal Nanotrasen's secrets."
|
||||
a target for a large number of Mercenaries and other companies wishing to steal NanoTrasen's secrets."
|
||||
|
||||
/datum/locations/crescent
|
||||
name = "NAS Crescent"
|
||||
desc = "The main hub for Nanotrasen in the Nyx system and is commonly referred to it by their workers as central command or \"Centcomm\". \
|
||||
desc = "The main hub for NanoTrasen in the Nyx system and is commonly referred to it by their workers as central command or \"CentCom\". \
|
||||
The Crescent refines and stores much of the products that stations (such as the Exodus) bring in. It is also a large refueling and supply \
|
||||
station of phoron and tritium in the Nyx system due to Nanotrasen being able to outsell almost any other company."
|
||||
station of phoron and tritium in the Nyx system due to NanoTrasen being able to outsell almost any other company."
|
||||
|
||||
/datum/locations/emerald_habitation
|
||||
name = "Emerald Habitation"
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
/datum/locations/northern_star //Inception joke here
|
||||
name = "Northern Star"
|
||||
desc = "The Northern Star is an asteroid colony owned and operated by Nanotrasen, among many other asteroid installations. \
|
||||
desc = "The Northern Star is an asteroid colony owned and operated by NanoTrasen, among many other asteroid installations. \
|
||||
Originally conceived as 'just another pitstop' for weary asteroid miners, it has grown to become a significant installation in the Kara subsystem."
|
||||
|
||||
/datum/locations/northern_star/New(var/creator)
|
||||
|
||||
@@ -49,7 +49,7 @@ var/datum/antagonist/deathsquad/deathsquad
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(player), slot_r_hand)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/rig/ert/assetprotection(player), slot_back)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(player), slot_s_store)
|
||||
player.implant_loyalty()
|
||||
// player.implant_loyalty()
|
||||
|
||||
var/obj/item/weapon/card/id/id = create_id("Asset Protection", player)
|
||||
if(id)
|
||||
|
||||
@@ -41,6 +41,7 @@ var/datum/antagonist/mercenary/mercs
|
||||
if(player.backbag == 2) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(player), slot_back)
|
||||
if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(player), slot_back)
|
||||
if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back)
|
||||
if(player.backbag == 5) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(player), slot_back)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack)
|
||||
player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
|
||||
@@ -83,6 +83,7 @@ var/datum/antagonist/wizard/wizards
|
||||
if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
|
||||
if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(wizard_mob), slot_back)
|
||||
if(wizard_mob.backbag == 4) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(wizard_mob), slot_back)
|
||||
if(wizard_mob.backbag == 5) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
|
||||
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand)
|
||||
|
||||
@@ -166,7 +166,7 @@ area/space/atmosalert()
|
||||
icon_state = "shuttle2"
|
||||
|
||||
/area/shuttle/escape/centcom
|
||||
name = "\improper Emergency Shuttle Centcom"
|
||||
name = "\improper Emergency Shuttle CentCom"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
||||
@@ -282,6 +282,7 @@ area/space/atmosalert()
|
||||
|
||||
/area/shuttle/cryo/station
|
||||
icon_state = "shuttle2"
|
||||
base_turf = /turf/simulated/mineral/floor/ignore_mapgen
|
||||
|
||||
/area/shuttle/cryo/centcom
|
||||
icon_state = "shuttle"
|
||||
@@ -290,9 +291,10 @@ area/space/atmosalert()
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/mining
|
||||
name = "\improper Mining Shuttle"
|
||||
name = "\improper Mining Elevator"
|
||||
music = "music/escape.ogg"
|
||||
lighting_use_dynamic = 0
|
||||
base_turf = /turf/simulated/mineral/floor/ignore_mapgen
|
||||
|
||||
/area/shuttle/mining/station
|
||||
icon_state = "shuttle2"
|
||||
@@ -302,7 +304,7 @@ area/space/atmosalert()
|
||||
|
||||
/area/shuttle/transport1/centcom
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Transport Shuttle Centcom"
|
||||
name = "\improper Transport Shuttle CentCom"
|
||||
|
||||
/area/shuttle/transport1/station
|
||||
icon_state = "shuttle"
|
||||
@@ -344,7 +346,7 @@ area/space/atmosalert()
|
||||
icon_state = "shuttlered2"
|
||||
|
||||
/area/shuttle/administration/centcom
|
||||
name = "\improper Administration Shuttle Centcom"
|
||||
name = "\improper Administration Shuttle CentCom"
|
||||
icon_state = "shuttlered"
|
||||
|
||||
/area/shuttle/administration/station
|
||||
@@ -352,7 +354,7 @@ area/space/atmosalert()
|
||||
icon_state = "shuttlered2"
|
||||
|
||||
/area/shuttle/trade/centcom
|
||||
name = "\improper Trade Shuttle Centcom"
|
||||
name = "\improper Trade Shuttle CentCom"
|
||||
icon_state = "shuttlered"
|
||||
|
||||
/area/shuttle/trade/station
|
||||
@@ -388,9 +390,10 @@ area/space/atmosalert()
|
||||
// === Trying to remove these areas:
|
||||
|
||||
/area/shuttle/research
|
||||
name = "\improper Research Shuttle"
|
||||
name = "\improper Research Elevator"
|
||||
music = "music/escape.ogg"
|
||||
lighting_use_dynamic = 0
|
||||
base_turf = /turf/simulated/mineral/floor/ignore_mapgen
|
||||
|
||||
/area/shuttle/research/station
|
||||
icon_state = "shuttle2"
|
||||
@@ -412,34 +415,34 @@ area/space/atmosalert()
|
||||
// CENTCOM
|
||||
|
||||
/area/centcom
|
||||
name = "\improper Centcom"
|
||||
name = "\improper CentCom"
|
||||
icon_state = "centcom"
|
||||
requires_power = 0
|
||||
lighting_use_dynamic = 0
|
||||
|
||||
/area/centcom/control
|
||||
name = "\improper Centcom Control"
|
||||
name = "\improper CentCom Control"
|
||||
|
||||
/area/centcom/evac
|
||||
name = "\improper Centcom Emergency Shuttle"
|
||||
name = "\improper CentCom Emergency Shuttle"
|
||||
|
||||
/area/centcom/suppy
|
||||
name = "\improper Centcom Supply Shuttle"
|
||||
name = "\improper CentCom Supply Shuttle"
|
||||
|
||||
/area/centcom/ferry
|
||||
name = "\improper Centcom Transport Shuttle"
|
||||
name = "\improper CentCom Transport Shuttle"
|
||||
|
||||
/area/centcom/shuttle
|
||||
name = "\improper Centcom Administration Shuttle"
|
||||
name = "\improper CentCom Administration Shuttle"
|
||||
|
||||
/area/centcom/test
|
||||
name = "\improper Centcom Testing Facility"
|
||||
name = "\improper CentCom Testing Facility"
|
||||
|
||||
/area/centcom/living
|
||||
name = "\improper Centcom Living Quarters"
|
||||
name = "\improper CentCom Living Quarters"
|
||||
|
||||
/area/centcom/specops
|
||||
name = "\improper Centcom Special Ops"
|
||||
name = "\improper CentCom Special Ops"
|
||||
|
||||
/area/centcom/creed
|
||||
name = "Creed's Office"
|
||||
@@ -455,15 +458,15 @@ area/space/atmosalert()
|
||||
name = "\improper Tram Station"
|
||||
|
||||
/area/centcom/security
|
||||
name = "\improper Centcom Security"
|
||||
name = "\improper CentCom Security"
|
||||
icon_state = "centcom_security"
|
||||
|
||||
/area/centcom/medical
|
||||
name = "\improper Centcom Medical"
|
||||
name = "\improper CentCom Medical"
|
||||
icon_state = "centcom_medical"
|
||||
|
||||
/area/centcom/command
|
||||
name = "\improper Centcom Command" //Central Command Command totally isn't RAS Syndrome in action.
|
||||
name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action.
|
||||
icon_state = "centcom_command"
|
||||
|
||||
/area/centcom/main_hall
|
||||
@@ -471,15 +474,15 @@ area/space/atmosalert()
|
||||
icon_state = "centcom_hallway1"
|
||||
|
||||
/area/centcom/bar
|
||||
name = "\improper Centcom Bar"
|
||||
name = "\improper CentCom Bar"
|
||||
icon_state = "centcom_crew"
|
||||
|
||||
/area/centcom/restaurant
|
||||
name = "\improper Centcom Restaurant"
|
||||
name = "\improper CentCom Restaurant"
|
||||
icon_state = "centcom_crew"
|
||||
|
||||
/area/centcom/bathroom
|
||||
name = "\improper Centcom Bathroom"
|
||||
name = "\improper CentCom Bathroom"
|
||||
icon_state = "centcom_crew"
|
||||
|
||||
//SYNDICATES
|
||||
@@ -2319,6 +2322,7 @@ area/space/atmosalert()
|
||||
name = "\improper Construction Site Shuttle"
|
||||
icon_state = "yellow"
|
||||
lighting_use_dynamic = 0
|
||||
base_turf = /turf/simulated/mineral/floor/ignore_mapgen
|
||||
|
||||
/area/shuttle/constructionsite/station
|
||||
name = "\improper Construction Site Shuttle"
|
||||
@@ -2527,20 +2531,20 @@ area/space/atmosalert()
|
||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/tcommsat/entrance
|
||||
name = "\improper Telecoms Teleporter"
|
||||
name = "\improper Telecomms Teleporter"
|
||||
icon_state = "tcomsatentrance"
|
||||
|
||||
/area/tcommsat/chamber
|
||||
name = "\improper Telecoms Central Compartment"
|
||||
name = "\improper Telecomms Central Compartment"
|
||||
icon_state = "tcomsatcham"
|
||||
|
||||
/area/tcomsat
|
||||
name = "\improper Telecoms Satellite"
|
||||
name = "\improper Telecomms Satellite"
|
||||
icon_state = "tcomsatlob"
|
||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/tcomfoyer
|
||||
name = "\improper Telecoms Foyer"
|
||||
name = "\improper Telecomms Foyer"
|
||||
icon_state = "tcomsatentrance"
|
||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
@@ -2555,7 +2559,7 @@ area/space/atmosalert()
|
||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
|
||||
/area/tcommsat/computer
|
||||
name = "\improper Telecoms Control Room"
|
||||
name = "\improper Telecomms Control Room"
|
||||
icon_state = "tcomsatcomp"
|
||||
|
||||
/area/tcommsat/lounge
|
||||
@@ -2632,7 +2636,7 @@ area/space/atmosalert()
|
||||
requires_power = 0
|
||||
|
||||
/area/awaymission/spacebattle/cruiser
|
||||
name = "\improper Nanotrasen Cruiser"
|
||||
name = "\improper NanoTrasen Cruiser"
|
||||
|
||||
/area/awaymission/spacebattle/syndicate1
|
||||
name = "\improper Syndicate Assault Ship 1"
|
||||
|
||||
@@ -463,11 +463,11 @@ its easier to just keep the beam vertical.
|
||||
//spawn(0)
|
||||
//if(I) //It's possible that it could be deleted in the meantime.
|
||||
var/obj/O = I
|
||||
O.show_message( message, 1, blind_message, 2)
|
||||
O.show_message(message, 1, blind_message, 2)
|
||||
else if(ismob(I))
|
||||
var/mob/M = I
|
||||
if(M.see_invisible >= invisibility) // Cannot view the invisible
|
||||
M.show_message( message, 1, blind_message, 2)
|
||||
M.show_message(message, 1, blind_message, 2)
|
||||
else if (blind_message)
|
||||
M.show_message(blind_message, 2)
|
||||
|
||||
@@ -488,7 +488,24 @@ its easier to just keep the beam vertical.
|
||||
spawn(0)
|
||||
if(I) //It's possible that it could be deleted in the meantime.
|
||||
var/obj/O = I
|
||||
O.show_message( message, 2, deaf_message, 1)
|
||||
O.show_message(message, 2, deaf_message, 1)
|
||||
else if(ismob(I))
|
||||
var/mob/M = I
|
||||
M.show_message( message, 2, deaf_message, 1)
|
||||
M.show_message(message, 2, deaf_message, 1)
|
||||
|
||||
/atom/movable/proc/dropInto(var/atom/destination)
|
||||
while(istype(destination))
|
||||
var/atom/drop_destination = destination.onDropInto(src)
|
||||
if(!istype(drop_destination) || drop_destination == destination)
|
||||
return forceMove(destination)
|
||||
destination = drop_destination
|
||||
return forceMove(null)
|
||||
|
||||
/atom/proc/onDropInto(var/atom/movable/AM)
|
||||
return // If onDropInto returns null, then dropInto will forceMove AM into us.
|
||||
|
||||
/atom/movable/onDropInto(var/atom/movable/AM)
|
||||
return loc // If onDropInto returns something, then dropInto will attempt to drop AM there.
|
||||
|
||||
/atom/proc/InsertedContents()
|
||||
return contents
|
||||
|
||||
@@ -63,13 +63,35 @@
|
||||
return
|
||||
|
||||
/atom/movable/proc/forceMove(atom/destination)
|
||||
if(destination)
|
||||
if(loc)
|
||||
loc.Exited(src)
|
||||
loc = destination
|
||||
loc.Entered(src)
|
||||
return 1
|
||||
if(loc == destination)
|
||||
return 0
|
||||
var/is_origin_turf = isturf(loc)
|
||||
var/is_destination_turf = isturf(destination)
|
||||
// It is a new area if:
|
||||
// Both the origin and destination are turfs with different areas.
|
||||
// When either origin or destination is a turf and the other is not.
|
||||
var/is_new_area = (is_origin_turf ^ is_destination_turf) || (is_origin_turf && is_destination_turf && loc.loc != destination.loc)
|
||||
|
||||
var/atom/origin = loc
|
||||
loc = destination
|
||||
|
||||
if(origin)
|
||||
origin.Exited(src, destination)
|
||||
if(is_origin_turf)
|
||||
for(var/atom/movable/AM in origin)
|
||||
AM.Uncrossed(src)
|
||||
if(is_new_area && is_origin_turf)
|
||||
origin.loc.Exited(src, destination)
|
||||
|
||||
if(destination)
|
||||
destination.Entered(src, origin)
|
||||
if(is_destination_turf) // If we're entering a turf, cross all movable atoms
|
||||
for(var/atom/movable/AM in loc)
|
||||
if(AM != src)
|
||||
AM.Crossed(src)
|
||||
if(is_new_area && is_destination_turf)
|
||||
destination.loc.Entered(src, origin)
|
||||
return 1
|
||||
|
||||
//called when src is thrown into hit_atom
|
||||
/atom/movable/proc/throw_impact(atom/hit_atom, var/speed)
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
|
||||
/obj/machinery/computer/scan_consolenew
|
||||
name = "DNA Modifier Access Console"
|
||||
desc = "Scand DNA."
|
||||
desc = "Scan DNA."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_keyboard = "med_key"
|
||||
icon_screen = "dna"
|
||||
|
||||
@@ -273,6 +273,21 @@ var/list/sacrificed = list()
|
||||
for (,drain>0,drain-=5)
|
||||
sleep(2)
|
||||
user.heal_organ_damage(5, 0)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
for(var/obj/item/organ/I in H.internal_organs)
|
||||
if(I.damage > 0)
|
||||
I.damage = max(I.damage - 5, 0) //Heals 5 damage per organ per use
|
||||
if(I.damage <= 5 && I.organ_tag == O_EYES)
|
||||
H.sdisabilities &= ~BLIND
|
||||
for(var/obj/item/organ/E in H.bad_external_organs)
|
||||
var/obj/item/organ/external/affected = E
|
||||
if((affected.damage < affected.min_broken_damage * config.organ_health_multiplier) && (affected.status & ORGAN_BROKEN))
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
for(var/datum/wound/W in affected.wounds)
|
||||
if(istype(W, /datum/wound/internal_bleeding))
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ datum
|
||||
target = targeta
|
||||
job = joba
|
||||
weight = get_points(job)
|
||||
explanation_text = "Frame [target.current.real_name], the [target.assigned_role] for a crime and make sure they are arrested and brought back to the Centcom station alive. We'll handle the rest from there."
|
||||
explanation_text = "Frame [target.current.real_name], the [target.assigned_role] for a crime and make sure they are arrested and brought back to the CentCom station alive. We'll handle the rest from there."
|
||||
|
||||
check_completion()
|
||||
if(!emergency_shuttle.returned())
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
the omniscience of the AI and rival the most hardened weapons your station is capable of. Tread lightly and \
|
||||
only hope this unknown assassin isn't here for you."
|
||||
config_tag = "ninja"
|
||||
required_players = 1
|
||||
required_players_secret = 3
|
||||
required_players = 5
|
||||
required_players_secret = 5
|
||||
required_enemies = 1
|
||||
end_on_antag_death = 0
|
||||
antag_tags = list(MODE_NINJA)
|
||||
@@ -9,27 +9,30 @@
|
||||
|
||||
/obj/item/clothing/under/technomancer
|
||||
name = "initiate's jumpsuit"
|
||||
desc = "It's a blue colored jumpsuit. There appears to be light-weight armor padding underneath, providing some protection."
|
||||
desc = "It's a blue colored jumpsuit. There appears to be light-weight armor padding underneath, providing some protection. \
|
||||
There is also a healthy amount of insulation underneath."
|
||||
icon_state = "initiate"
|
||||
armor = list(melee = 10, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
siemens_coefficient = 0.3
|
||||
|
||||
/obj/item/clothing/under/technomancer/apprentice
|
||||
name = "apprentice's jumpsuit"
|
||||
desc = "It's a blue colored jumpsuit with some silver markings. There appears to be light-weight armor padding \
|
||||
underneath, providing some protection."
|
||||
underneath, providing some protection. There is also a healthy amount of insulation underneath."
|
||||
icon_state = "apprentice"
|
||||
|
||||
/obj/item/clothing/under/technomancer/master
|
||||
name = "master's jumpsuit"
|
||||
desc = "It's a blue colored jumpsuit with some gold markings. There appears to be light-weight armor padding \
|
||||
underneath, providing some protection."
|
||||
underneath, providing some protection. There is also a healthy amount of insulation underneath."
|
||||
icon_state = "technomancer"
|
||||
|
||||
/obj/item/clothing/head/technomancer
|
||||
name = "initiate's hat"
|
||||
desc = "It's a somewhat silly looking blue pointed hat."
|
||||
icon_state = "initiate"
|
||||
armor = list(melee = 10, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.3
|
||||
|
||||
/obj/item/clothing/head/technomancer/apprentice
|
||||
name = "apprentice's hat"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Disposable Teleporter"
|
||||
desc = "An ultra-safe teleportation device that can directly teleport you to a number of locations at minimal risk, however \
|
||||
it has a limited amount of charges."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/disposable_teleporter
|
||||
|
||||
/obj/item/weapon/disposable_teleporter
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
of which your Core can provide. When you are struck by something, the shield will block 75% of the damage, deducting energy \
|
||||
proportional to the amount of force that was inflicted. Armor penetration has no effect on the shield's ability to protect \
|
||||
you from harm, however the shield will fail if the energy supply cannot meet demand."
|
||||
cost = 300
|
||||
cost = 200
|
||||
obj_path = /obj/item/clothing/suit/armor/shield
|
||||
|
||||
/obj/item/clothing/suit/armor/shield
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
the next attack you suffer, and strike the attacker with a strong bolt of lightning. This effect requires twenty seconds to \
|
||||
recharge. If you are attacked while this is recharging, a weaker lightning bolt is sent out, however you won't be protected from \
|
||||
the person beating you."
|
||||
cost = 250
|
||||
cost = 150
|
||||
obj_path = /obj/item/clothing/suit/armor/tesla
|
||||
|
||||
/obj/item/clothing/suit/armor/tesla
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
desc = "A core optimized for passive regeneration, however at the cost of capacity. Has a capacity of 7,000 units of energy, and \
|
||||
recharges at a rate of 70 units. Complex gravatics and force manipulation allows the wearer to also run slightly faster, and \
|
||||
reduces incoming instability from functions by 10%."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/rapid
|
||||
|
||||
/datum/technomancer/equipment/bulky_core
|
||||
@@ -20,7 +20,7 @@
|
||||
purchase one or more energy-generating Functions as well if using this core. Has a capacity of 20,000 units of energy, \
|
||||
and recharges at a rate of 25 units. The intense weight of the core unfortunately can cause the wear to move slightly slower, \
|
||||
and the closeness of the capacitors causes a slight increase in incoming instability by 10%."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/bulky
|
||||
|
||||
/datum/technomancer/equipment/unstable
|
||||
@@ -29,7 +29,7 @@
|
||||
better as the user has more instability, which could prove dangerous to the inexperienced or unprepared. Has a capacity of 13,000 \
|
||||
units of energy, and recharges at a rate of 35 units at no instability, and approximately 110 units when within the \
|
||||
'yellow zone' of instability. Incoming instability is also amplified by 30%, due to the nature of this core."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/unstable
|
||||
|
||||
/datum/technomancer/equipment/recycling
|
||||
@@ -38,7 +38,7 @@
|
||||
cores. The focus on efficency also makes instability less of an issue, as incoming instability from functions are reduced by \
|
||||
40%. The capacitor is also slightly better, holding 12,000 units of energy, however the reactor is slower to recharge, at a rate \
|
||||
of 40 units."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/recycling
|
||||
|
||||
/datum/technomancer/equipment/summoning
|
||||
@@ -47,13 +47,13 @@
|
||||
entities from vast distances, and keeping them there. Wearers of this core can maintain up to 30 summons at once, and the energy \
|
||||
demand for maintaining summons is severely reduced. This comes at the price of capcitors that can only hold 8,000 units of energy, \
|
||||
a recharging rate of 35 energy, and no shielding from instability."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/technomancer_core/summoner
|
||||
|
||||
/datum/technomancer/equipment/hypo_belt
|
||||
name = "Hypo Belt"
|
||||
desc = "A medical belt designed to carry autoinjectors and other medical equipment. Comes with one of each hypo."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/storage/belt/medical/technomancer
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/technomancer
|
||||
@@ -76,7 +76,7 @@
|
||||
desc = "A belt with a literal pocket which opens to a localized pocket of 'Blue-Space', allowing for more storage. \
|
||||
The nature of the pocket allows for storage of larger objects than what is typical for other belts, and in larger quanities. \
|
||||
It will also help keep your pants on."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/storage/belt/holding
|
||||
|
||||
/obj/item/weapon/storage/belt/holding
|
||||
@@ -103,7 +103,7 @@
|
||||
/datum/technomancer/equipment/omni_sight
|
||||
name = "Omnisight Scanner"
|
||||
desc = "A very rare scanner worn on the face, which allows the wearer to see nearly anything across walls."
|
||||
cost = 400
|
||||
cost = 300
|
||||
obj_path = /obj/item/clothing/glasses/omni
|
||||
|
||||
/obj/item/clothing/glasses/omni
|
||||
@@ -122,7 +122,7 @@
|
||||
name = "Medical HUD"
|
||||
desc = "A commonly available HUD for medical professionals, which displays how healthy an individual is. \
|
||||
Recommended for support-based apprentices!"
|
||||
cost = 30
|
||||
cost = 25
|
||||
obj_path = /obj/item/clothing/glasses/thermal/plain/monocle
|
||||
|
||||
/datum/technomancer/equipment/scepter
|
||||
@@ -130,7 +130,7 @@
|
||||
desc = "A gem sometimes found in the depths of asteroids makes up the basis for this device. Energy is channeled into it from \
|
||||
the Core and the user, causing many functions to be enhanced in various ways, so long as it is held in the off-hand. \
|
||||
Be careful not to lose this!"
|
||||
cost = 300
|
||||
cost = 200
|
||||
obj_path = /obj/item/weapon/scepter
|
||||
|
||||
/obj/item/weapon/scepter
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
rng = rand(0,8)
|
||||
switch(rng)
|
||||
if(0)
|
||||
apply_effect(instability * 0.5, IRRADIATE)
|
||||
apply_effect(instability * 0.3, IRRADIATE)
|
||||
if(1)
|
||||
return
|
||||
// visible_message("<span class='warning'>\The [src] suddenly collapses!</span>",
|
||||
@@ -120,21 +120,21 @@
|
||||
// Weaken(instability * 0.1)
|
||||
if(2)
|
||||
if(can_feel_pain())
|
||||
apply_effect(instability * 0.5, AGONY)
|
||||
apply_effect(instability * 0.3, AGONY)
|
||||
src << "<span class='danger'>You feel a sharp pain!</span>"
|
||||
if(3)
|
||||
apply_effect(instability * 0.5, EYE_BLUR)
|
||||
apply_effect(instability * 0.3, EYE_BLUR)
|
||||
src << "<span class='danger'>Your eyes start to get cloudy!</span>"
|
||||
if(4)
|
||||
electrocute_act(instability * 0.3, "unstable energies")
|
||||
if(5)
|
||||
adjustFireLoss(instability * 0.2) //10 burn @ 50 instability
|
||||
adjustFireLoss(instability * 0.15) //7.5 burn @ 50 instability
|
||||
src << "<span class='danger'>You feel your skin burn!</span>"
|
||||
if(6)
|
||||
adjustBruteLoss(instability * 0.2) //10 brute @ 50 instability
|
||||
adjustBruteLoss(instability * 0.15) //7.5 brute @ 50 instability
|
||||
src << "<span class='danger'>You feel a sharp pain as an unseen force harms your body!</span>"
|
||||
if(7)
|
||||
adjustToxLoss(instability * 0.2) //10 tox @ 50 instability
|
||||
adjustToxLoss(instability * 0.15) //7.5 tox @ 50 instability
|
||||
if(8)
|
||||
safe_blink(src, range = 6)
|
||||
src << "<span class='warning'>You're teleported against your will!</span>"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Abjuration"
|
||||
desc = "This ability attempts to send summoned or teleported entities or anomalies to the place from whence they came, or at least \
|
||||
far away from the caster. Failing that, it may inhibit those entities in some form."
|
||||
cost = 40
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/abjuration
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Apportation"
|
||||
desc = "This allows you to teleport objects into your hand, or to pull people towards you. If they're close enough, the function \
|
||||
will grab them automatically."
|
||||
cost = 50
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/apportation
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Allows you to create a specific sound at a location of your choosing."
|
||||
enhancement_desc = "An extremely loud sound that a large amount of energy and instability becomes available, which will \
|
||||
deafen and stun all who are near the targeted tile, including yourself if unprotected."
|
||||
cost = 150
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/audible_deception
|
||||
ability_icon_state = "tech_audibledeception"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/biomed_aura
|
||||
name = "Restoration Aura"
|
||||
desc = "Heals you and your allies (or everyone, if you want) of trauma and burns slowly, as long as they remain within four meters."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/biomed
|
||||
ability_icon_state = "tech_biomedaura"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
This does not affect you or your allies. It also causes a large amount of fire to erupt around you, however the main threat is \
|
||||
still the heating up."
|
||||
enhancement_desc = "Increased heat generation, more fires, and higher temperature cap."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/fire
|
||||
ability_icon_state = "tech_fireaura"
|
||||
category = OFFENSIVE_SPELLS
|
||||
@@ -21,13 +21,13 @@
|
||||
qdel(src)
|
||||
var/list/nearby_things = range(4,owner)
|
||||
|
||||
var/temp_change = 25
|
||||
var/temp_cap = 500
|
||||
var/temp_change = 40
|
||||
var/temp_cap = 600
|
||||
var/fire_power = 2
|
||||
|
||||
if(check_for_scepter())
|
||||
temp_change = 50
|
||||
temp_cap = 700
|
||||
temp_change = 80
|
||||
temp_cap = 1000
|
||||
fire_power = 4
|
||||
for(var/mob/living/carbon/human/H in nearby_things)
|
||||
if(is_ally(H))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Lowers the core body temperature of everyone around you (except for your friends), causing them to freeze to death if \
|
||||
they stay within four meters of you."
|
||||
enhancement_desc = "The chill becomes lethal."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/frost
|
||||
ability_icon_state = "tech_frostaura"
|
||||
category = DEFENSIVE_SPELLS // Scepter-less frost aura is nonlethal.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/shock_aura
|
||||
name = "Electric Aura"
|
||||
desc = "Repeatively electrocutes enemies within four meters of you, as well as nearby electronics."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/shock
|
||||
ability_icon_state = "tech_shockaura"
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Force the target to teleport a short distance away. This target could be anything from something lying on the ground, to someone trying to \
|
||||
fight you, or even yourself. Using this on someone next to you makes their potential distance after teleportation greater."
|
||||
enhancement_desc = "Blink distance is increased greatly."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/blink
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
targets. This function will have no effect on entities of higher intelligence, such as humans and similar alien species, as it's \
|
||||
not true mind control, but merely pheromone synthesis for living animals, and electronic hacking for simple robots. The green web \
|
||||
around the entity is merely a hologram used to allow the user to know if the creature is safe or not."
|
||||
cost = 200
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/control
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
Every second, electricity is stolen until the link is broken by the target moving too far away, or having no more energy left. \
|
||||
Can drain from powercells, microbatteries, and other Cores. The beam created by the siphoning is harmful to touch."
|
||||
enhancement_desc = "Rate of siphoning is doubled."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/energy_siphon
|
||||
ability_icon_state = "tech_energysiphon"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/flame_tongue
|
||||
name = "Flame Tongue"
|
||||
desc = "Using a miniturized flamethrower in your gloves, you can emit a flame strong enough to melt both your enemies and walls."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/flame_tongue
|
||||
ability_icon_state = "tech_flametongue"
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Illusion"
|
||||
desc = "Allows you to create and control a holographic illusion, that can take the form of most object or entities."
|
||||
enhancement_desc = "Illusions will be made of hard light, allowing the interception of attacks, appearing more realistic."
|
||||
cost = 100
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/illusion
|
||||
ability_icon_state = "tech_illusion"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Corona"
|
||||
desc = "Causes the victim to glow very brightly, which while harmless in itself, makes it easier for them to be hit. The \
|
||||
bright glow also makes it very difficult to be stealthy. The effect lasts for one minute."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/corona
|
||||
ability_icon_state = "tech_corona"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Mend Organs"
|
||||
desc = "Heals the target's internal organs, both organic and robotic. Instability is split between the target \
|
||||
and technomancer, if seperate."
|
||||
cost = 75
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_organs
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Repel Missiles"
|
||||
desc = "Places a repulsion field around you, which attempts to deflect incoming bullets and lasers, making them 30% less likely \
|
||||
to hit you. The field lasts for five minutes and can be granted to yourself or an ally."
|
||||
cost = 60
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/repel_missiles
|
||||
ability_icon_state = "tech_repelmissiles"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Instability Tap"
|
||||
desc = "Creates a large sum of energy, at the cost of a very large amount of instability afflicting you."
|
||||
enhancement_desc = "50% more energy gained, 20% less instability gained."
|
||||
cost = 120
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/instability_tap
|
||||
ability_icon_state = "tech_instabilitytap"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "This function places a specific 'mark' beacon under you, which is used by the Recall function as a destination. \
|
||||
Note that using Mark again will move the destination instead of creating a second destination, and only one destination \
|
||||
can exist, regardless of who casted Mark."
|
||||
cost = 50
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/mark
|
||||
ability_icon_state = "tech_mark"
|
||||
category = UTILITY_SPELLS
|
||||
@@ -50,7 +50,7 @@
|
||||
desc = "This function teleports you to where you placed a mark using the Mark function. Without the Mark function, this \
|
||||
function is useless. Note that teleporting takes three seconds. Being incapacitated while teleporting will cancel it."
|
||||
enhancement_desc = "Recall takes two seconds instead of three."
|
||||
cost = 50
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/recall
|
||||
ability_icon_state = "tech_recall"
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Oxygenate"
|
||||
desc = "This function creates oxygen at a location of your chosing. If used on a humanoid entity, it heals oxygen deprivation. \
|
||||
If casted on the envirnment, air (oxygen and nitrogen) is moved from a distant location to your target."
|
||||
cost = 70
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/oxygenate
|
||||
ability_icon_state = "oxygenate"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Phase Shift"
|
||||
desc = "Hides you in the safest possible place, where no harm can come to you. Unfortunately you can only stay inside for a few moments before \
|
||||
draining your powercell."
|
||||
cost = 80
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/phase_shift
|
||||
category = DEFENSIVE_SPELLS
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/beam
|
||||
name = "Beam"
|
||||
desc = "Fires a laser at your target. Cheap, reliable, and a bit boring."
|
||||
cost = 150
|
||||
cost = 100
|
||||
ability_icon_state = "tech_beam"
|
||||
obj_path = /obj/item/weapon/spell/projectile/beam
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Force Missile"
|
||||
desc = "This fires a missile at your target. It's cheap to use, however the projectile itself moves and impacts in such a way \
|
||||
that armor designed to protect from blunt force will mitigate this function as well."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/projectile/force_missile
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Overload"
|
||||
desc = "Fires a bolt of highly unstable energy, that does damaged equal to 1.5% of the technomancer's current reserve of energy. \
|
||||
This energy pierces all known armor."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/projectile/overload
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
|
||||
@@ -10,10 +10,9 @@
|
||||
var/fire_sound = null
|
||||
|
||||
/obj/item/weapon/spell/projectile/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
if(set_up(hit_atom, user))
|
||||
var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user))
|
||||
new_projectile.launch(T)
|
||||
new_projectile.launch(hit_atom)
|
||||
if(fire_sound)
|
||||
playsound(get_turf(src), fire_sound, 75, 1)
|
||||
owner.adjust_instability(instability_per_shot)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/radiance
|
||||
name = "Radiance"
|
||||
desc = "Causes you to be very radiant, glowing brightly in visible light, thermal energy, and deadly ionizing radiation."
|
||||
cost = 180
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/radiance
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/reflect
|
||||
name = "Reflect"
|
||||
desc = "Emits a protective shield fron your hand in front of you, which will reflect one attack back at the attacker."
|
||||
cost = 120
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/reflect
|
||||
ability_icon_state = "tech_reflect"
|
||||
category = DEFENSIVE_SPELLS
|
||||
@@ -22,7 +22,7 @@
|
||||
spark_system = PoolOrNew(/datum/effect/effect/system/spark_spread)
|
||||
spark_system.set_up(5, 0, src)
|
||||
owner << "<span class='notice'>Your shield will expire in 3 seconds!</span>"
|
||||
spawn(3 SECONDS)
|
||||
spawn(5 SECONDS)
|
||||
if(src)
|
||||
owner << "<span class='danger'>Your shield expires!</span>"
|
||||
qdel(src)
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
if(!reflecting)
|
||||
reflecting = 1
|
||||
spawn(1 SECOND) //To ensure that most or all of a burst fire cycle is reflected.
|
||||
spawn(2 SECONDS) //To ensure that most or all of a burst fire cycle is reflected.
|
||||
owner << "<span class='danger'>Your shield fades due being used up!</span>"
|
||||
qdel(src)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
if(!reflecting)
|
||||
reflecting = 1
|
||||
spawn(1 SECOND) //To ensure that most or all of a burst fire cycle is reflected.
|
||||
spawn(2 SECONDS) //To ensure that most or all of a burst fire cycle is reflected.
|
||||
owner << "<span class='danger'>Your shield fades due being used up!</span>"
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Shield"
|
||||
desc = "Emits a protective shield fron your hand in front of you, which will protect you from almost anything able to harm \
|
||||
you, so long as you can power it."
|
||||
cost = 120
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/shield
|
||||
ability_icon_state = "tech_shield"
|
||||
category = DEFENSIVE_SPELLS
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/darkness
|
||||
name = "Darkness"
|
||||
desc = "Disrupts photons moving in a local area, causing darkness to shroud yourself or a position of your choosing."
|
||||
cost = 30
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/spawner/darkness
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/pulsar
|
||||
name = "Pulsar"
|
||||
desc = "Emits electronic pulses to destroy, disable, or otherwise harm devices and machines. Be sure to not hit yourself with this."
|
||||
cost = 150
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/spawner/pulsar
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
The creatures take a few moments to be teleported to the targeted tile. Note that the creatures summoned are \
|
||||
not inherently loyal to the technomancer, and that the creatures will be hurt slightly from being teleported to you."
|
||||
enhancement_desc = "Summoned entities will never harm their summoner."
|
||||
cost = 200
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/summon/summon_creature
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Teleports a prefabricated 'ward' drone to the target location, which will alert you and your allies when it sees entities \
|
||||
moving around it, or when it is attacked. They can see for up to five meters. Wards expire in six minutes."
|
||||
enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees."
|
||||
cost = 100
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/summon/summon_ward
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -84,6 +84,9 @@
|
||||
if(L.alpha <= 127)
|
||||
continue // Too transparent, as a mercy to camo lings.
|
||||
|
||||
else
|
||||
L.break_cloak()
|
||||
|
||||
// Warn the Technomancer when it sees a new mob.
|
||||
if(!(L in seen_mobs))
|
||||
seen_mobs.Add(L)
|
||||
@@ -111,3 +114,7 @@
|
||||
overlays.Cut()
|
||||
var/image/I = image('icons/mob/critter.dmi',"ward_truesight")
|
||||
overlays.Add(I)
|
||||
|
||||
/mob/living/simple_animal/ward/invisible_detect
|
||||
true_sight = 1
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Targeting Matrix"
|
||||
desc = "Automatically targets and fires a ranged weapon or function at a non-friendly target near a targeted tile. \
|
||||
Each target assisted attack costs some energy and instability."
|
||||
cost = 150
|
||||
cost = 50
|
||||
ability_icon_state = "tech_targetingmatrix"
|
||||
obj_path = /obj/item/weapon/spell/targeting_matrix
|
||||
category = UTILITY_SPELLS
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/technomancer/spell/warp_strike
|
||||
name = "Warp Strike"
|
||||
desc = "Teleports you next to your target, and attacks them with whatever is in your off-hand, spell or object."
|
||||
cost = 200
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/warp_strike
|
||||
ability_icon_state = "tech_warpstrike"
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
their powers can be used for good or if their arrival foreshadows the destruction of the entire colony, or worse."
|
||||
config_tag = "technomancer"
|
||||
votable = 0
|
||||
required_players = 8
|
||||
required_players_secret = 10
|
||||
required_players = 5
|
||||
required_players_secret = 5
|
||||
required_enemies = 1
|
||||
end_on_antag_death = 0
|
||||
antag_tags = list(MODE_TECHNOMANCER)
|
||||
@@ -239,6 +239,11 @@ proc/get_all_job_icons() //For all existing HUD icons
|
||||
if(I.rank in job_icons)
|
||||
return I.rank
|
||||
|
||||
var/centcom = get_all_centcom_jobs()
|
||||
if(I.assignment in centcom) //Return with the NT logo if it is a CentCom job
|
||||
return "CentCom"
|
||||
if(I.rank in centcom)
|
||||
return "CentCom"
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||
if(has_alt_title(H, alt_title,"Visitor")) //I doubt someone visiting the station would want to wear an ugly grey uniform
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform)
|
||||
else if(has_alt_title(H, alt_title,"Resident"))
|
||||
|
||||
@@ -30,6 +30,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/cap(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/com(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/captain(H), slot_w_uniform)
|
||||
if(H.age>49)
|
||||
// Since we can have something other than the default uniform at this
|
||||
@@ -110,3 +111,38 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
H.implant_loyalty()
|
||||
return 1
|
||||
|
||||
/datum/job/secretary
|
||||
title = "Command Secretary"
|
||||
flag = BRIDGE
|
||||
department = "Civilian"
|
||||
head_position = 1
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "command staff"
|
||||
selection_color = "#2F2F7F"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
alt_titles = list("Command Liaison", "Bridge Secretary")
|
||||
minimal_player_age = 5
|
||||
economic_modifier = 7
|
||||
|
||||
access = list(access_heads)
|
||||
minimal_access = list(access_heads)
|
||||
|
||||
/datum/job/secretary/equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(H), slot_l_ear)
|
||||
switch(H.backbag)
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
|
||||
if(H.gender == FEMALE)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/female/skirt(H), slot_w_uniform)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/charcoal(H), slot_w_uniform)
|
||||
return 1
|
||||
@@ -21,6 +21,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
|
||||
@@ -86,6 +87,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/hydroponics(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/hyd(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/hyd(H), slot_back)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -171,6 +173,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
@@ -265,6 +268,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
||||
@@ -73,6 +74,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||
@@ -111,6 +113,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/atmos(H), slot_l_store)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||
|
||||
/datum/job/proc/equip_survival(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt)
|
||||
@@ -63,6 +64,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
|
||||
if(has_alt_title(H, alt_title,"Emergency Physician"))
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
||||
@@ -78,6 +80,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/vir(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/viro(H), slot_back)
|
||||
else if(has_alt_title(H, alt_title,"Medical Doctor"))
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
@@ -128,6 +131,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/chem(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/chem(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
|
||||
return 1
|
||||
|
||||
@@ -185,6 +189,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||
if(has_alt_title(H, alt_title,"Psychiatrist"))
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform)
|
||||
else if(has_alt_title(H, alt_title,"Psychologist"))
|
||||
@@ -221,6 +226,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
|
||||
if(has_alt_title(H, alt_title,"Emergency Medical Technician"))
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
return 1
|
||||
|
||||
@@ -70,6 +71,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
||||
return 1
|
||||
|
||||
@@ -101,6 +103,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||
@@ -70,6 +71,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
|
||||
@@ -108,6 +110,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
|
||||
@@ -151,6 +154,7 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
|
||||
|
||||
@@ -44,6 +44,7 @@ var/const/CHAPLAIN =(1<<10)
|
||||
var/const/CLOWN =(1<<11)
|
||||
var/const/MIME =(1<<12)
|
||||
var/const/ASSISTANT =(1<<13)
|
||||
var/const/BRIDGE =(1<<14)
|
||||
|
||||
|
||||
var/list/assistant_occupations = list(
|
||||
@@ -56,7 +57,8 @@ var/list/command_positions = list(
|
||||
"Head of Security",
|
||||
"Chief Engineer",
|
||||
"Research Director",
|
||||
"Chief Medical Officer"
|
||||
"Chief Medical Officer",
|
||||
"Command Secretary"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -329,7 +329,7 @@
|
||||
organStatus["broken"] = E.broken_description
|
||||
if(E.status & ORGAN_ROBOT)
|
||||
organStatus["robotic"] = 1
|
||||
if(E.status & ORGAN_SPLINTED)
|
||||
if(E.splinted)
|
||||
organStatus["splinted"] = 1
|
||||
if(E.status & ORGAN_BLEEDING)
|
||||
organStatus["bleeding"] = 1
|
||||
@@ -483,7 +483,7 @@
|
||||
break
|
||||
if(istype(e, /obj/item/organ/external/chest) && occupant.is_lung_ruptured())
|
||||
lung_ruptured = "Lung ruptured:"
|
||||
if(e.status & ORGAN_SPLINTED)
|
||||
if(e.splinted)
|
||||
splint = "Splinted:"
|
||||
if(e.status & ORGAN_BLEEDING)
|
||||
bled = "Bleeding:"
|
||||
|
||||
@@ -222,7 +222,7 @@ mob/living/proc/near_camera()
|
||||
|
||||
/mob/living/proc/tracking_status()
|
||||
// Easy checks first.
|
||||
// Don't detect mobs on Centcom. Since the wizard den is on Centcomm, we only need this.
|
||||
// Don't detect mobs on CentCom. Since the wizard den is on CentCom, we only need this.
|
||||
var/obj/item/weapon/card/id/id = GetIdCard()
|
||||
if(id && id.prevent_tracking())
|
||||
return TRACKING_TERMINATE
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
src.updateDialog()
|
||||
|
||||
// OMG CENTCOMM LETTERHEAD
|
||||
if("MessageCentcomm")
|
||||
if("MessageCentCom")
|
||||
if(src.authenticated==2)
|
||||
if(centcomm_message_cooldown)
|
||||
usr << "\red Arrays recycling. Please stand by."
|
||||
@@ -181,7 +181,7 @@
|
||||
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
||||
if(!input || !(usr in view(1,src)))
|
||||
return
|
||||
Centcomm_announce(input, usr)
|
||||
CentCom_announce(input, usr)
|
||||
usr << "\blue Message transmitted."
|
||||
log_say("[key_name(usr)] has made an IA [boss_short] announcement: [input]")
|
||||
centcomm_message_cooldown = 1
|
||||
@@ -295,7 +295,7 @@
|
||||
if (src.authenticated==2)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
|
||||
if(src.emagged == 0)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageCentcomm'>Send an emergency message to [boss_short]</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageCentCom'>Send an emergency message to [boss_short]</A> \]"
|
||||
else
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
if (href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if ("giv_name")
|
||||
var/nam = sanitize(input("Person pass is issued to", "Name", giv_name) as text|null)
|
||||
var/nam = sanitizeName(input("Person pass is issued to", "Name", giv_name) as text|null)
|
||||
if (nam)
|
||||
giv_name = nam
|
||||
if ("reason")
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
|
||||
|
||||
/datum/file/program/communications
|
||||
name = "Centcom communications relay"
|
||||
desc = "Used to connect to Centcom."
|
||||
name = "CentCom communications relay"
|
||||
desc = "Used to connect to CentCom."
|
||||
active_state = "comm"
|
||||
req_access = list(access_heads)
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
computer.updateDialog()
|
||||
|
||||
// OMG CENTCOMM LETTERHEAD
|
||||
if("MessageCentcomm" in href_list)
|
||||
if("MessageCentCom" in href_list)
|
||||
if(!computer.radio.subspace)
|
||||
return
|
||||
if(authenticated==2)
|
||||
@@ -195,7 +195,7 @@
|
||||
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", ""))
|
||||
if(!input || !interactable())
|
||||
return
|
||||
Centcomm_announce(input, usr)
|
||||
CentCom_announce(input, usr)
|
||||
usr << "Message transmitted."
|
||||
log_say("[key_name(usr)] has made a [boss_short] announcement: [input]")
|
||||
centcomm_message_cooldown = 1
|
||||
@@ -288,7 +288,7 @@
|
||||
if (authenticated==2)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
|
||||
if(computer.emagged == 0)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentcomm'>Send an emergency message to [boss_short]</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentCom'>Send an emergency message to [boss_short]</A> \]"
|
||||
else
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||
|
||||
@@ -62,13 +62,13 @@
|
||||
return 1
|
||||
|
||||
/*
|
||||
Centcom root authorization certificate
|
||||
CentCom root authorization certificate
|
||||
|
||||
Non-destructive, officially sanctioned.
|
||||
Has the same effect on computers as an emag.
|
||||
*/
|
||||
/datum/file/centcom_auth
|
||||
name = "Centcom Root Access Token"
|
||||
name = "CentCom Root Access Token"
|
||||
extension = "auth"
|
||||
volume = 100
|
||||
copy()
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentCom Support.</span>"
|
||||
else
|
||||
transfer_and_vend(CH, C)
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
||||
return 0
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentCom Support.</span>"
|
||||
return 0
|
||||
else
|
||||
transfer_and_reimburse(CH)
|
||||
|
||||
@@ -447,6 +447,31 @@
|
||||
state = 3
|
||||
if(frame_type.frame_class == "machine")
|
||||
user << desc
|
||||
else if(state == 3)
|
||||
if(frame_type.frame_class == "machine")
|
||||
for(var/I in req_components)
|
||||
if(istype(P, I) && (req_components[I] > 0))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(istype(P, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CP = P
|
||||
if(CP.get_amount() > 1)
|
||||
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
|
||||
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src)
|
||||
CC.amount = camt
|
||||
CC.update_icon()
|
||||
CP.use(camt)
|
||||
components += CC
|
||||
req_components[I] -= camt
|
||||
update_desc()
|
||||
break
|
||||
|
||||
user.drop_item()
|
||||
P.forceMove(src)
|
||||
components += P
|
||||
req_components[I]--
|
||||
update_desc()
|
||||
break
|
||||
user << desc
|
||||
|
||||
else if(istype(P, /obj/item/weapon/wirecutters))
|
||||
if(state == 3)
|
||||
@@ -506,20 +531,7 @@
|
||||
for(var/I in req_components)
|
||||
if(istype(P, I) && (req_components[I] > 0))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(istype(P, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CP = P
|
||||
if(CP.get_amount() > 1)
|
||||
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
|
||||
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src)
|
||||
CC.amount = camt
|
||||
CC.update_icon()
|
||||
CP.use(camt)
|
||||
components += CC
|
||||
req_components[I] -= camt
|
||||
update_desc()
|
||||
break
|
||||
|
||||
else if(istype(P, /obj/item/stack/material/glass/reinforced))
|
||||
if(istype(P, /obj/item/stack/material/glass/reinforced))
|
||||
var/obj/item/stack/material/glass/reinforced/CP = P
|
||||
if(CP.get_amount() > 1)
|
||||
var/camt = min(CP.amount, req_components[I]) // amount of glass to take, idealy amount required, but limited by amount provided
|
||||
@@ -539,8 +551,65 @@
|
||||
update_desc()
|
||||
break
|
||||
user << desc
|
||||
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material))
|
||||
if(P && P.loc != src && !istype(P, /obj/item/stack/material))
|
||||
user << "<span class='warning'>You cannot add that component to the machine!</span>"
|
||||
return
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/frame/verb/rotate()
|
||||
set name = "Rotate Frame Counter-Clockwise"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
usr << "It is fastened to the floor therefore you can't rotate it!"
|
||||
return 0
|
||||
|
||||
set_dir(turn(dir, 90))
|
||||
|
||||
var/dir_text
|
||||
if(dir == 1)
|
||||
dir_text = "north"
|
||||
else if(dir == 2)
|
||||
dir_text = "south"
|
||||
else if(dir == 4)
|
||||
dir_text = "east"
|
||||
else if(dir == 8)
|
||||
dir_text = "west"
|
||||
|
||||
usr << "<span class='notice'>You rotate the [src] to face [dir_text]!</span>"
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/frame/verb/revrotate()
|
||||
set name = "Rotate Frame Clockwise"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
usr << "It is fastened to the floor therefore you can't rotate it!"
|
||||
return 0
|
||||
|
||||
set_dir(turn(dir, 270))
|
||||
|
||||
var/dir_text
|
||||
if(dir == 1)
|
||||
dir_text = "north"
|
||||
else if(dir == 2)
|
||||
dir_text = "south"
|
||||
else if(dir == 4)
|
||||
dir_text = "east"
|
||||
else if(dir == 8)
|
||||
dir_text = "west"
|
||||
|
||||
usr << "<span class='notice'>You rotate the [src] to face [dir_text]!</span>"
|
||||
|
||||
return
|
||||
@@ -586,7 +586,7 @@
|
||||
var/electrified = 0
|
||||
|
||||
//Departments that the cycler can paint suits to look like.
|
||||
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction")
|
||||
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard")
|
||||
//Species that the suits can be configured to fit.
|
||||
var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari")
|
||||
|
||||
@@ -634,7 +634,7 @@
|
||||
name = "Medical suit cycler"
|
||||
model_text = "Medical"
|
||||
req_access = list(access_medical)
|
||||
departments = list("Medical")
|
||||
departments = list("Medical","Biohazard")
|
||||
|
||||
/obj/machinery/suit_cycler/syndicate
|
||||
name = "Nonstandard suit cycler"
|
||||
@@ -751,8 +751,8 @@
|
||||
|
||||
//Clear the access reqs, disable the safeties, and open up all paintjobs.
|
||||
user << "<span class='danger'>You run the sequencer across the interface, corrupting the operating protocols.</span>"
|
||||
departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","^%###^%$")
|
||||
species = list("Human","Tajara","Skrell","Unathi", "Teshari")
|
||||
departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","^%###^%$")
|
||||
species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid") //VORESTATION EDIT
|
||||
|
||||
emagged = 1
|
||||
safeties = 0
|
||||
@@ -1036,6 +1036,15 @@
|
||||
suit.name = "Construction voidsuit"
|
||||
suit.icon_state = "rig-engineering_con"
|
||||
suit.item_state = "eng_voidsuit_con"
|
||||
if("Biohazard")
|
||||
if(helmet)
|
||||
helmet.name = "Biohazard voidsuit helmet"
|
||||
helmet.icon_state = "rig0-medical_bio"
|
||||
helmet.item_state = "rig0-medical_bio"
|
||||
if(suit)
|
||||
suit.name = "Biohazard voidsuit"
|
||||
suit.icon_state = "rig-medical_bio"
|
||||
suit.item_state = "medical_voidsuit_bio"
|
||||
if("^%###^%$" || "Mercenary")
|
||||
if(helmet)
|
||||
helmet.name = "blood-red voidsuit helmet"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
autolinkers = list("r_relay")
|
||||
|
||||
/obj/machinery/telecomms/relay/preset/centcom
|
||||
id = "Centcom Relay"
|
||||
id = "CentCom Relay"
|
||||
hide = 1
|
||||
toggled = 1
|
||||
//anchored = 1
|
||||
@@ -44,7 +44,7 @@
|
||||
"receiverA", "broadcasterA")
|
||||
|
||||
/obj/machinery/telecomms/hub/preset_cent
|
||||
id = "CentComm Hub"
|
||||
id = "CentCom Hub"
|
||||
network = "tcommsat"
|
||||
produces_heat = 0
|
||||
autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay",
|
||||
@@ -65,7 +65,7 @@
|
||||
..()
|
||||
|
||||
/obj/machinery/telecomms/receiver/preset_cent
|
||||
id = "CentComm Receiver"
|
||||
id = "CentCom Receiver"
|
||||
network = "tcommsat"
|
||||
produces_heat = 0
|
||||
autolinkers = list("receiverCent")
|
||||
@@ -106,7 +106,7 @@
|
||||
autolinkers = list("processor4", "engineering", "common")
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_cent
|
||||
id = "CentComm Bus"
|
||||
id = "CentCom Bus"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||
produces_heat = 0
|
||||
@@ -135,7 +135,7 @@
|
||||
autolinkers = list("processor4")
|
||||
|
||||
/obj/machinery/telecomms/processor/preset_cent
|
||||
id = "CentComm Processor"
|
||||
id = "CentCom Processor"
|
||||
network = "tcommsat"
|
||||
produces_heat = 0
|
||||
autolinkers = list("processorCent")
|
||||
@@ -200,7 +200,7 @@
|
||||
autolinkers = list("security")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/centcomm
|
||||
id = "CentComm Server"
|
||||
id = "CentCom Server"
|
||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||
produces_heat = 0
|
||||
autolinkers = list("centcomm")
|
||||
@@ -216,7 +216,7 @@
|
||||
autolinkers = list("broadcasterA")
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/preset_cent
|
||||
id = "CentComm Broadcaster"
|
||||
id = "CentCom Broadcaster"
|
||||
network = "tcommsat"
|
||||
produces_heat = 0
|
||||
autolinkers = list("broadcasterCent")
|
||||
@@ -41,10 +41,10 @@
|
||||
|
||||
/datum/poster/tg_9
|
||||
name = "Missing Gloves"
|
||||
desc = "This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases."
|
||||
desc = "This poster is about the uproar that followed NanoTrasen's financial cuts towards insulated-glove purchases."
|
||||
icon_state="poster9"
|
||||
|
||||
/datum/poster/tg_10
|
||||
name = "Hacking Guide"
|
||||
desc = "This poster details the internal workings of the common Nanotrasen airlock."
|
||||
desc = "This poster details the internal workings of the common NanoTrasen airlock."
|
||||
icon_state="poster10"
|
||||
@@ -97,6 +97,7 @@ var/list/civilian_cartridges = list(
|
||||
name = "\improper ChemWhiz cartridge"
|
||||
icon_state = "cart-chem"
|
||||
access_reagent_scanner = 1
|
||||
access_medical = 1
|
||||
|
||||
/obj/item/weapon/cartridge/security
|
||||
name = "\improper R.O.B.U.S.T. cartridge"
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
if(hack_result && in_hack_mode)
|
||||
user << "<span class='notice'>Your hacking attempt was succesful!</span>"
|
||||
playsound(src.loc, 'sound/piano/A#6.ogg', 75)
|
||||
user.playsound_local(get_turf(src), 'sound/piano/A#6.ogg', 50)
|
||||
else
|
||||
user << "<span class='warning'>Your hacking attempt failed!</span>"
|
||||
return 0
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts.
|
||||
var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts.
|
||||
var/power_drained = 0 // Amount of power drained.
|
||||
var/max_power = 5e9 // Detonation point.
|
||||
var/max_power = 1e9 // Detonation point.
|
||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||
var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs.
|
||||
|
||||
|
||||
@@ -143,13 +143,25 @@ REAGENT SCANNER
|
||||
user.show_message("<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
for(var/name_i in H.internal_organs_by_name)
|
||||
var/obj/item/organ/internal/i = H.internal_organs_by_name[name_i]
|
||||
if(istype(i, /obj/item/organ/internal/appendix))
|
||||
var/obj/item/organ/internal/appendix/a = H.internal_organs_by_name[name_i]
|
||||
if(a.inflamed > 3)
|
||||
user.show_message(text("<span class='warning'>Severe inflammation detected in subject [a.name].</span>"), 1)
|
||||
else if(a.inflamed > 2)
|
||||
user.show_message(text("<span class='warning'>Moderate inflammation detected in subject [a.name].</span>"), 1)
|
||||
else if(a.inflamed >= 1)
|
||||
user.show_message(text("<span class='warning'>Mild inflammation detected in subject [a.name].</span>"), 1)
|
||||
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
var/obj/item/organ/external/e = H.organs_by_name[name]
|
||||
if(!e)
|
||||
continue
|
||||
var/limb = e.name
|
||||
if(e.status & ORGAN_BROKEN)
|
||||
if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!(e.status & ORGAN_SPLINTED)))
|
||||
if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!e.splinted))
|
||||
user << "<span class='warning'>Unsecured fracture in subject [limb]. Splinting recommended for transport.</span>"
|
||||
if(e.has_infected_wound())
|
||||
user << "<span class='warning'>Infected wound detected in subject [limb]. Disinfection recommended.</span>"
|
||||
@@ -165,6 +177,7 @@ REAGENT SCANNER
|
||||
for(var/datum/wound/W in e.wounds) if(W.internal)
|
||||
user.show_message(text("<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span>"), 1)
|
||||
break
|
||||
|
||||
if(M:vessel)
|
||||
var/blood_volume = H.vessel.get_reagent_amount("blood")
|
||||
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
if(!(affecting.organ_tag in splintable_organs))
|
||||
user << "<span class='danger'>You can't use \the [src] to apply a splint there!</span>"
|
||||
return
|
||||
if(affecting.status & ORGAN_SPLINTED)
|
||||
if(affecting.splinted)
|
||||
user << "<span class='danger'>[M]'s [limb] is already splinted!</span>"
|
||||
return
|
||||
if (M != user)
|
||||
@@ -275,17 +275,21 @@
|
||||
user << "<span class='danger'>You can't apply a splint to the arm you're using!</span>"
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
if(do_after(user, 50))
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>[user] finishes applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
if(prob(25))
|
||||
user.visible_message("<span class='danger'>[user] successfully applies \the [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] fumbles \the [src].</span>", "<span class='danger'>You fumble \the [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
if(do_after(user, 50, M))
|
||||
if(M == user && prob(75))
|
||||
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
affecting.status |= ORGAN_SPLINTED
|
||||
use(1)
|
||||
var/obj/item/stack/medical/splint/S = split(1)
|
||||
if(S)
|
||||
if(affecting.apply_splint(S))
|
||||
S.forceMove(affecting)
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>\The [user] successfully applies [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
S.dropInto(src.loc) //didn't get applied, so just drop it
|
||||
user.visible_message("<span class='danger'>\The [user] fails to apply [src].</span>", "<span class='danger'>You fail to apply [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/zippomes = "USER lights NAME with FLAME"
|
||||
var/weldermes = "USER lights NAME with FLAME"
|
||||
var/ignitermes = "USER lights NAME with FLAME"
|
||||
var/brand
|
||||
|
||||
/obj/item/clothing/mask/smokable/New()
|
||||
..()
|
||||
@@ -169,6 +170,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if (type_butt)
|
||||
var/obj/item/butt = new type_butt(T)
|
||||
transfer_fingerprints_to(butt)
|
||||
if(brand)
|
||||
butt.desc += " This one is \a [brand]."
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
if (!nomessage)
|
||||
|
||||
@@ -280,3 +280,62 @@
|
||||
name = "emergency response team medical backpack"
|
||||
desc = "A spacious backpack with lots of pockets, worn by medical members of an Emergency Response Team."
|
||||
icon_state = "ert_medical"
|
||||
|
||||
/*
|
||||
* Courier Bags
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger
|
||||
name = "messenger bag"
|
||||
desc = "A sturdy backpack worn over one shoulder."
|
||||
icon_state = "courierbag"
|
||||
item_state_slots = list(slot_r_hand_str = "backpack", slot_l_hand_str = "backpack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/chem
|
||||
name = "chemistry messenger bag"
|
||||
desc = "A serile backpack worn over one shoulder. This one is in Chemsitry colors."
|
||||
icon_state = "courierbagchem"
|
||||
item_state_slots = list(slot_r_hand_str = "chempack", slot_l_hand_str = "chempack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/med
|
||||
name = "medical messenger bag"
|
||||
desc = "A sterile backpack worn over one shoulder used in medical departments."
|
||||
icon_state = "courierbagmed"
|
||||
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/viro
|
||||
name = "virology messenger bag"
|
||||
desc = "A sterile backpack worn over one shoulder. This one is in Virology colors."
|
||||
icon_state = "courierbagviro"
|
||||
item_state_slots = list(slot_r_hand_str = "viropack", slot_l_hand_str = "viropack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/tox
|
||||
name = "research messenger bag"
|
||||
desc = "A backpack worn over one shoulder. Useful for holding science materials."
|
||||
icon_state = "courierbagtox"
|
||||
item_state_slots = list(slot_r_hand_str = "toxpack", slot_l_hand_str = "toxpack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/com
|
||||
name = "command messenger bag"
|
||||
desc = "A special backpack worn over one shoulder. This one is made specifically for officers."
|
||||
icon_state = "courierbagcom"
|
||||
item_state_slots = list(slot_r_hand_str = "captainpack", slot_l_hand_str = "captainpack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/engi
|
||||
name = "engineering messenger bag"
|
||||
icon_state = "courierbagengi"
|
||||
item_state_slots = list(slot_r_hand_str = "engiepack", slot_l_hand_str = "engiepack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/hyd
|
||||
name = "hydroponics messenger bag"
|
||||
desc = "A backpack worn over one shoulder. This one is designed for plant-related work."
|
||||
icon_state = "courierbaghyd"
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/sec
|
||||
name = "security messenger bag"
|
||||
desc = "A tactical backpack worn over one shoulder. This one is in Security colors."
|
||||
icon_state = "courierbagsec"
|
||||
item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack")
|
||||
|
||||
/obj/item/weapon/storage/backpack/messenger/black
|
||||
icon_state = "courierbagblk"
|
||||
@@ -56,6 +56,7 @@
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/device/flashlight/maglight,
|
||||
/obj/item/weapon/tape_roll,
|
||||
/obj/item/device/integrated_electronics/wirer,
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full/New()
|
||||
@@ -128,6 +129,8 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/weapon/gun/energy/stunrevolver,
|
||||
/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/weapon/flame/lighter,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/device/pda,
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
storage_slots = 6
|
||||
can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter)
|
||||
icon_type = "cigarette"
|
||||
var/brand = "\improper Trans-Stellar Duty-free"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/New()
|
||||
..()
|
||||
@@ -142,6 +143,10 @@
|
||||
new /obj/item/clothing/mask/smokable/cigarette(src)
|
||||
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
|
||||
flags |= OPENCONTAINER
|
||||
if(brand)
|
||||
for(var/obj/item/clothing/mask/smokable/cigarette/C in src)
|
||||
C.brand = brand
|
||||
C.desc += " This one is \a [brand]."
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
|
||||
icon_state = "[initial(icon_state)][contents.len]"
|
||||
@@ -186,11 +191,13 @@
|
||||
name = "\improper DromedaryCo packet"
|
||||
desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\""
|
||||
icon_state = "Dpacket"
|
||||
brand = "\improper Dromedary Co. cigarette"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/killthroat
|
||||
name = "\improper AcmeCo packet"
|
||||
desc = "A packet of six AcmeCo cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors."
|
||||
icon_state = "Bpacket"
|
||||
brand = "\improper Acme Co. cigarette"
|
||||
|
||||
// New()
|
||||
// ..()
|
||||
@@ -202,26 +209,31 @@
|
||||
name = "\improper pack of Lucky Stars"
|
||||
desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head."
|
||||
icon_state = "LSpacket"
|
||||
brand = "\improper Lucky Star"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos
|
||||
name = "\improper pack of Jerichos"
|
||||
desc = "Typically seen dangling from the lips of Martian soldiers and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs."
|
||||
icon_state = "Jpacket"
|
||||
brand = "\improper Jericho"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols
|
||||
name = "\improper pack of Temperamento Menthols"
|
||||
desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!"
|
||||
icon_state = "TMpacket"
|
||||
brand = "\improper Temperamento Menthol"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/carcinomas
|
||||
name = "\improper pack of Carcinoma Angels"
|
||||
desc = "This unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too."
|
||||
icon_state = "CApacket"
|
||||
brand = "\improper Carcinoma Angel"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/professionals
|
||||
name = "\improper pack of Professional 120s"
|
||||
desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They are, however, very good quality."
|
||||
icon_state = "P100packet"
|
||||
brand = "\improper Professional 120"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigar
|
||||
name = "cigar case"
|
||||
|
||||
@@ -127,10 +127,10 @@
|
||||
filled = TRUE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nt
|
||||
name = "Nanotrasen brand lunchbox"
|
||||
name = "NanoTrasen brand lunchbox"
|
||||
icon_state = "lunchbox_nanotrasen"
|
||||
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
|
||||
desc = "A little lunchbox. This one is branded with the Nanotrasen logo!"
|
||||
desc = "A little lunchbox. This one is branded with the NanoTrasen logo!"
|
||||
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nt/filled
|
||||
filled = TRUE
|
||||
|
||||
@@ -394,3 +394,6 @@
|
||||
var/shake_dir = pick(-1, 1)
|
||||
animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
|
||||
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
|
||||
|
||||
/obj/structure/closet/onDropInto(var/atom/movable/AM)
|
||||
return
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
new /obj/item/clothing/mask/bandana(src)
|
||||
new /obj/item/clothing/mask/bandana(src)
|
||||
new /obj/item/clothing/mask/bandana(src)
|
||||
new /obj/item/weapon/storage/backpack/messenger/black(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -539,6 +540,8 @@
|
||||
new /obj/item/clothing/under/pants/khaki(src)
|
||||
new /obj/item/clothing/mask/bandana/blue(src)
|
||||
new /obj/item/clothing/mask/bandana/blue(src)
|
||||
new /obj/item/clothing/accessory/hawaii(src)
|
||||
new /obj/item/clothing/accessory/hawaii/random(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/tactical
|
||||
@@ -603,6 +606,7 @@
|
||||
new /obj/item/clothing/under/sl_suit(src)
|
||||
new /obj/item/clothing/under/suit_jacket(src)
|
||||
new /obj/item/clothing/under/suit_jacket/female(src)
|
||||
new /obj/item/clothing/under/suit_jacket/female/skirt(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/under/suit_jacket/red(src)
|
||||
new /obj/item/clothing/under/scratch(src)
|
||||
|
||||
@@ -265,7 +265,7 @@
|
||||
|
||||
/obj/structure/closet/crate/contraband
|
||||
name = "Poster crate"
|
||||
desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist."
|
||||
desc = "A random assortment of posters manufactured by providers NOT listed under NanoTrasen's whitelist."
|
||||
icon_state = "crate"
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
|
||||
@@ -30,7 +30,7 @@ var/const/station_orig = "Virgo Orbital Research Establishment" //station_name c
|
||||
var/const/station_short = "V.O.R.E."
|
||||
var/const/dock_name = "Virgo-Erigone Central Command"
|
||||
var/const/boss_name = "Central Command"
|
||||
var/const/boss_short = "Centcom"
|
||||
var/const/boss_short = "CentCom"
|
||||
var/const/company_name = "NanoTrasen"
|
||||
var/const/company_short = "NT"
|
||||
var/const/star_name = "Virgo-Erigone"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user