mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
+14
-8
@@ -168,6 +168,7 @@
|
||||
#include "code\datums\spells\turf_teleport.dm"
|
||||
#include "code\datums\spells\wizard.dm"
|
||||
#include "code\defines\obj.dm"
|
||||
#include "code\defines\vox_sounds.dm"
|
||||
#include "code\defines\obj\hydro.dm"
|
||||
#include "code\defines\obj\weapon.dm"
|
||||
#include "code\defines\procs\AStar.dm"
|
||||
@@ -614,6 +615,7 @@
|
||||
#include "code\game\objects\structures\musician.dm"
|
||||
#include "code\game\objects\structures\noticeboard.dm"
|
||||
#include "code\game\objects\structures\safe.dm"
|
||||
#include "code\game\objects\structures\segway.dm"
|
||||
#include "code\game\objects\structures\signs.dm"
|
||||
#include "code\game\objects\structures\tables_racks.dm"
|
||||
#include "code\game\objects\structures\tank_dispenser.dm"
|
||||
@@ -862,6 +864,9 @@
|
||||
#include "code\modules\mining\money_bag.dm"
|
||||
#include "code\modules\mining\ores_coins.dm"
|
||||
#include "code\modules\mining\satchel_ore_boxdm.dm"
|
||||
#include "code\modules\mining\laborcamp\laborminerals.dm"
|
||||
#include "code\modules\mining\laborcamp\laborshuttle.dm"
|
||||
#include "code\modules\mining\laborcamp\laborstacker.dm"
|
||||
#include "code\modules\mob\death.dm"
|
||||
#include "code\modules\mob\emote.dm"
|
||||
#include "code\modules\mob\inventory.dm"
|
||||
@@ -966,7 +971,6 @@
|
||||
#include "code\modules\mob\living\carbon\monkey\monkey.dm"
|
||||
#include "code\modules\mob\living\carbon\monkey\powers.dm"
|
||||
#include "code\modules\mob\living\carbon\monkey\update_icons.dm"
|
||||
#include "code\modules\mob\living\carbon\zombie\zombie.dm"
|
||||
#include "code\modules\mob\living\silicon\death.dm"
|
||||
#include "code\modules\mob\living\silicon\login.dm"
|
||||
#include "code\modules\mob\living\silicon\say.dm"
|
||||
@@ -1114,6 +1118,7 @@
|
||||
#include "code\modules\projectiles\targeting.dm"
|
||||
#include "code\modules\projectiles\ammunition\boxes.dm"
|
||||
#include "code\modules\projectiles\ammunition\bullets.dm"
|
||||
#include "code\modules\projectiles\ammunition\magazines.dm"
|
||||
#include "code\modules\projectiles\guns\energy.dm"
|
||||
#include "code\modules\projectiles\guns\projectile.dm"
|
||||
#include "code\modules\projectiles\guns\energy\laser.dm"
|
||||
@@ -1224,22 +1229,18 @@
|
||||
#include "code\modules\research\xenoarchaeology\finds\finds_fossils.dm"
|
||||
#include "code\modules\research\xenoarchaeology\finds\finds_misc.dm"
|
||||
#include "code\modules\research\xenoarchaeology\finds\finds_talkingitem.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_accelerator.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_base.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_fourier_transform.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_gas_chromatography.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_hyperspectral.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_ion_mobility.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\analysis_isotope_ratio.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\artifact_analyser.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\artifact_harvester.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\artifact_scanner.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\coolant.dm"
|
||||
#include "code\modules\research\xenoarchaeology\machinery\geosample_scanner.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\ano_device_battery.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\anomaly_suit.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\bunsen_burner.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\gearbelt.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\suspension_generator.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_anoscanner.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_coresampler.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_depthscanner.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_locater.dm"
|
||||
@@ -1274,6 +1275,7 @@
|
||||
#include "code\modules\surgery\eye.dm"
|
||||
#include "code\modules\surgery\face.dm"
|
||||
#include "code\modules\surgery\generic.dm"
|
||||
#include "code\modules\surgery\headreattach.dm"
|
||||
#include "code\modules\surgery\implant.dm"
|
||||
#include "code\modules\surgery\other.dm"
|
||||
#include "code\modules\surgery\ribcage.dm"
|
||||
@@ -1333,6 +1335,9 @@
|
||||
#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_capacitor.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_gen.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\ShieldGen\shield_gen_external.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\Laser2.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\LaserComputer.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm"
|
||||
#include "code\WorkInProgress\Chinsky\ashtray.dm"
|
||||
#include "code\WorkInProgress\Cib\MedicalSideEffects.dm"
|
||||
#include "code\WorkInProgress\kilakk\fax.dm"
|
||||
@@ -1341,6 +1346,7 @@
|
||||
#include "code\WorkInProgress\Ported\policetape.dm"
|
||||
#include "code\WorkInProgress\SkyMarshal\officer_stuff.dm"
|
||||
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
|
||||
#include "code\WorkInProgress\Yinadele\Supermatter.dm"
|
||||
#include "code\WorkInProgress\ZomgPonies\karma.dm"
|
||||
#include "code\WorkInProgress\ZomgPonies\clothing\civilian.dm"
|
||||
#include "code\WorkInProgress\ZomgPonies\mobs\pony.dm"
|
||||
|
||||
@@ -161,9 +161,9 @@
|
||||
var/obj/structure/closet/crate/secure/weapon/C = new(src.loc)
|
||||
var/new_type = pick(
|
||||
200; /obj/item/weapon/hatchet, \
|
||||
/obj/item/weapon/gun/projectile/pistol, \
|
||||
/obj/item/weapon/gun/projectile/deagle, \
|
||||
/obj/item/weapon/gun/projectile/russian, \
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol, \
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle, \
|
||||
/obj/item/weapon/gun/projectile/revolver/russian, \
|
||||
)
|
||||
new new_type(C)
|
||||
if("spacesuit")
|
||||
|
||||
@@ -145,14 +145,14 @@ datum/fusion_reaction/pergium_tritium
|
||||
energy_production = 0
|
||||
radiation = 5
|
||||
|
||||
datum/fusion_reaction/pergium_deuterium
|
||||
datum/fusion_reaction/pergium_obdurium
|
||||
primary_reactant = "Pergium"
|
||||
secondary_reactant = "Obdurium"
|
||||
energy_consumption = 5
|
||||
energy_production = 0
|
||||
radiation = 5
|
||||
|
||||
datum/fusion_reaction/pergium_tritium
|
||||
datum/fusion_reaction/pergium_solonium
|
||||
primary_reactant = "Pergium"
|
||||
secondary_reactant = "Solonium"
|
||||
energy_consumption = 5
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
src.hit()
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/HasEntered(atom/movable/AM as mob|obj)
|
||||
/obj/beam/e_beam/Crossed(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/beam))
|
||||
return
|
||||
spawn( 0 )
|
||||
|
||||
@@ -0,0 +1,257 @@
|
||||
|
||||
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
|
||||
#define THERMAL_RELEASE_MODIFIER 10 //Higher == less heat released during reaction
|
||||
#define PLASMA_RELEASE_MODIFIER 1500 //Higher == less plasma released by reaction
|
||||
#define OXYGEN_RELEASE_MODIFIER 750 //Higher == less oxygen released at high temperature/power
|
||||
#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power
|
||||
|
||||
|
||||
//These would be what you would get at point blank, decreases with distance
|
||||
#define DETONATION_RADS 200
|
||||
#define DETONATION_HALLUCINATION 600
|
||||
|
||||
|
||||
#define WARNING_DELAY 60 //45 seconds between warnings.
|
||||
|
||||
/obj/machinery/power/supermatter
|
||||
name = "Supermatter"
|
||||
desc = "A strangely translucent and iridescent crystal. \red You get headaches just from looking at it."
|
||||
icon = 'icons/obj/engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 0
|
||||
|
||||
var/gasefficency = 0.25
|
||||
|
||||
var/base_icon_state = "darkmatter"
|
||||
|
||||
var/damage = 0
|
||||
var/damage_archived = 0
|
||||
var/safe_alert = "Crystaline hyperstructure returning to safe operating levels."
|
||||
var/warning_point = 100
|
||||
var/warning_alert = "Danger! Crystal hyperstructure instability!"
|
||||
var/emergency_point = 700
|
||||
var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT."
|
||||
var/explosion_point = 1000
|
||||
|
||||
var/emergency_issued = 0
|
||||
|
||||
var/explosion_power = 8
|
||||
|
||||
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
|
||||
|
||||
var/power = 0
|
||||
|
||||
//Temporary values so that we can optimize this
|
||||
//How much the bullets damage should be multiplied by when it is added to the internal variables
|
||||
var/config_bullet_energy = 2
|
||||
//How much of the power is left after processing is finished?
|
||||
// var/config_power_reduction_per_tick = 0.5
|
||||
//How much hallucination should it produce per unit of power?
|
||||
var/config_hallucination_power = 0.1
|
||||
|
||||
var/obj/item/device/radio/radio
|
||||
|
||||
shard //Small subtype, less efficient and more sensitive, but less boom.
|
||||
name = "Supermatter Shard"
|
||||
desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. \red You get headaches just from looking at it."
|
||||
icon_state = "darkmatter_shard"
|
||||
base_icon_state = "darkmatter_shard"
|
||||
|
||||
warning_point = 50
|
||||
emergency_point = 500
|
||||
explosion_point = 900
|
||||
|
||||
gasefficency = 0.125
|
||||
|
||||
explosion_power = 3 //3,6,9,12? Or is that too small?
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/New()
|
||||
. = ..()
|
||||
radio = new (src)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/Del()
|
||||
del radio
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/power/supermatter/proc/explode()
|
||||
explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1)
|
||||
del src
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter/process()
|
||||
|
||||
var/turf/L = loc
|
||||
|
||||
if(!istype(L)) //If we are not on a turf, uh oh.
|
||||
del src
|
||||
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
|
||||
//Remove gas from surrounding area
|
||||
var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles)
|
||||
|
||||
if(!removed || !removed.total_moles)
|
||||
damage += max((power-1600)/10, 0)
|
||||
power = min(power, 1600)
|
||||
return 1
|
||||
|
||||
if (!removed)
|
||||
return 1
|
||||
|
||||
damage_archived = damage
|
||||
damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
|
||||
|
||||
if(damage > warning_point) // while the core is still damaged and it's still worth noting its status
|
||||
if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY)
|
||||
|
||||
if(damage > emergency_point)
|
||||
radio.autosay(emergency_alert, "Supermatter Monitor")
|
||||
lastwarning = world.timeofday
|
||||
|
||||
else if(damage >= damage_archived) // The damage is still going up
|
||||
radio.autosay(warning_alert, "Supermatter Monitor")
|
||||
lastwarning = world.timeofday - 150
|
||||
|
||||
else // Phew, we're safe
|
||||
radio.autosay(safe_alert, "Supermatter Monitor")
|
||||
lastwarning = world.timeofday
|
||||
|
||||
if(damage > explosion_point)
|
||||
for(var/mob/living/mob in living_mob_list)
|
||||
if(istype(mob, /mob/living/carbon/human))
|
||||
//Hilariously enough, running into a closet should make you get hit the hardest.
|
||||
mob:hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
|
||||
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) )
|
||||
mob.apply_effect(rads, IRRADIATE)
|
||||
|
||||
explode()
|
||||
|
||||
//Ok, 100% oxygen atmosphere = best reaction
|
||||
//Maxes out at 100% oxygen pressure
|
||||
var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
|
||||
|
||||
var/temp_factor = 100
|
||||
|
||||
if(oxygen > 0.8)
|
||||
// with a perfect gas mix, make the power less based on heat
|
||||
icon_state = "[base_icon_state]_glow"
|
||||
else
|
||||
// in normal mode, base the produced energy around the heat
|
||||
temp_factor = 60
|
||||
icon_state = base_icon_state
|
||||
|
||||
power = max( (removed.temperature * temp_factor / T0C) * oxygen + power, 0) //Total laser power plus an overload
|
||||
|
||||
//We've generated power, now let's transfer it to the collectors for storing/usage
|
||||
transfer_energy()
|
||||
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
removed.temperature += (device_energy / THERMAL_RELEASE_MODIFIER)
|
||||
|
||||
removed.temperature = max(0, min(removed.temperature, 2500))
|
||||
|
||||
//Calculate how much gas to release
|
||||
removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
|
||||
|
||||
removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
|
||||
|
||||
removed.update_values()
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
for(var/mob/living/carbon/human/l in view(src, round(power ** 0.25))) // you have to be seeing the core to get hallucinations
|
||||
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / get_dist(l, src) ) ) )
|
||||
|
||||
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
|
||||
var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) )
|
||||
l.apply_effect(rads, IRRADIATE)
|
||||
|
||||
power -= (power/500)**3
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
power += Proj.damage * config_bullet_energy
|
||||
else
|
||||
damage += Proj.damage * config_bullet_energy
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/attack_robot(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/attack_hand(mob/user as mob)
|
||||
user.visible_message("<span class=\"warning\">\The [user] reaches out and touches \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You reach out and touch \the [src], everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"</span>",\
|
||||
"<span class=\"warning\">You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.</span>")
|
||||
|
||||
Consume(user)
|
||||
|
||||
/obj/machinery/power/supermatter/proc/transfer_energy()
|
||||
for(var/obj/machinery/power/rad_collector/R in rad_collectors)
|
||||
if(get_dist(R, src) <= 15) // Better than using orange() every process
|
||||
R.receive_pulse(power)
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
||||
user.visible_message("<span class=\"warning\">\The [user] touches \a [W] to \the [src] as a silence fills the room...</span>",\
|
||||
"<span class=\"danger\">You touch \the [W] to \the [src] when everything suddenly goes silent.\"</span>\n<span class=\"notice\">\The [W] flashes into dust as you flinch away from \the [src].</span>",\
|
||||
"<span class=\"warning\">Everything suddenly goes silent.</span>")
|
||||
|
||||
user.drop_from_inventory(W)
|
||||
Consume(W)
|
||||
|
||||
user.apply_effect(150, IRRADIATE)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj)
|
||||
if(istype(AM, /mob/living))
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
|
||||
"<span class=\"warning\">You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.</span>")
|
||||
else
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class=\"warning\">You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
|
||||
Consume(AM)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/proc/Consume(var/mob/living/user)
|
||||
if(istype(user))
|
||||
user.dust()
|
||||
power += 200
|
||||
else
|
||||
del user
|
||||
|
||||
power += 200
|
||||
|
||||
//Some poor sod got eaten, go ahead and irradiate people nearby.
|
||||
for(var/mob/living/l in range(10))
|
||||
if(l in view())
|
||||
l.show_message("<span class=\"warning\">As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.</span>", 1,\
|
||||
"<span class=\"warning\">The unearthly ringing subsides and you notice you have new radiation burns.</span>", 2)
|
||||
else
|
||||
l.show_message("<span class=\"warning\">You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.</span>", 2)
|
||||
var/rads = 500 * sqrt( 1 / (get_dist(l, src) + 1) )
|
||||
l.apply_effect(rads, IRRADIATE)
|
||||
|
||||
@@ -1,19 +1,35 @@
|
||||
var/list/obj/machinery/faxmachine/allfaxes = list()
|
||||
var/list/alldepartments = list("Central Command")
|
||||
|
||||
/obj/machinery/faxmachine
|
||||
name = "fax machine"
|
||||
icon = 'icons/obj/library.dmi'
|
||||
icon_state = "fax"
|
||||
req_access = list(access_lawyer)
|
||||
req_one_access = list(access_lawyer, access_heads)
|
||||
anchored = 1
|
||||
density = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 30
|
||||
active_power_usage = 200
|
||||
power_channel = EQUIP
|
||||
|
||||
var/obj/item/weapon/card/id/scan = null // identification
|
||||
var/authenticated = 0
|
||||
var/obj/item/weapon/paper/tofax = null // what we're sending to central
|
||||
|
||||
var/obj/item/weapon/paper/tofax = null // what we're sending
|
||||
var/sendcooldown = 0 // to avoid spamming fax messages
|
||||
|
||||
var/department = "Unknown" // our department
|
||||
|
||||
var/dpt = "Central Command" // the department we're sending to
|
||||
|
||||
/obj/machinery/faxmachine/New()
|
||||
..()
|
||||
allfaxes += src
|
||||
|
||||
if( !("[department]" in alldepartments) )
|
||||
alldepartments += department
|
||||
|
||||
/obj/machinery/faxmachine/process()
|
||||
return 0
|
||||
|
||||
@@ -26,7 +42,7 @@
|
||||
/obj/machinery/faxmachine/attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
|
||||
var/dat = "Central Command Fax Machine<BR>"
|
||||
var/dat = "Fax Machine<BR>"
|
||||
|
||||
var/scan_name
|
||||
if(scan)
|
||||
@@ -54,14 +70,15 @@
|
||||
|
||||
else
|
||||
dat += "<a href='byond://?src=\ref[src];send=1'>Send</a><br>"
|
||||
dat += "<b>Currently sending:</b> [tofax.name]"
|
||||
dat += "<b>Currently sending:</b> [tofax.name]<br>"
|
||||
dat += "<b>Sending to:</b> <a href='byond://?src=\ref[src];dept=1'>[dpt]</a><br>"
|
||||
|
||||
else
|
||||
if(sendcooldown)
|
||||
dat += "Please insert paper to send to Central Command via secure connection.<br><br>"
|
||||
dat += "Please insert paper to send via secure connection.<br><br>"
|
||||
dat += "<b>Transmitter arrays realigning. Please stand by.</b><br>"
|
||||
else
|
||||
dat += "Please insert paper to send to Central Command via secure connection.<br><br>"
|
||||
dat += "Please insert paper to send via secure connection.<br><br>"
|
||||
|
||||
else
|
||||
dat += "Proper authentication is required to use this device.<br><br>"
|
||||
@@ -76,10 +93,18 @@
|
||||
/obj/machinery/faxmachine/Topic(href, href_list)
|
||||
if(href_list["send"])
|
||||
if(tofax)
|
||||
Centcomm_fax(tofax.info, tofax.name, usr)
|
||||
usr << "Message transmitted."
|
||||
sendcooldown = 1
|
||||
spawn(3000) // three minute cooldown. might mess with this number a bit as time goes on
|
||||
|
||||
if(dpt == "Central Command")
|
||||
Centcomm_fax(tofax.info, tofax.name, usr)
|
||||
sendcooldown = 1800
|
||||
|
||||
else
|
||||
SendFax(tofax.info, tofax.name, usr, dpt)
|
||||
sendcooldown = 600
|
||||
|
||||
usr << "Message transmitted successfully."
|
||||
|
||||
spawn(sendcooldown) // cooldown time
|
||||
sendcooldown = 0
|
||||
|
||||
if(href_list["remove"])
|
||||
@@ -107,6 +132,9 @@
|
||||
scan = I
|
||||
authenticated = 0
|
||||
|
||||
if(href_list["dept"])
|
||||
dpt = input(usr, "Which department?", "Choose a department", "") as null|anything in alldepartments
|
||||
|
||||
if(href_list["auth"])
|
||||
if ( (!( authenticated ) && (scan)) )
|
||||
if (check_access(scan))
|
||||
@@ -148,3 +176,20 @@
|
||||
|
||||
var/msg = "\blue <b><font color='orange'>CENTCOMM FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;CentcommFaxReply=\ref[Sender]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>"
|
||||
admins << msg
|
||||
|
||||
proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt)
|
||||
|
||||
for(var/obj/machinery/faxmachine/F in allfaxes)
|
||||
if( F.department == dpt )
|
||||
if(! (F.stat & (BROKEN|NOPOWER) ) )
|
||||
|
||||
flick("faxreceive", F)
|
||||
|
||||
// give the sprite some time to flick
|
||||
spawn(20)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( F.loc )
|
||||
P.name = "[sentname]"
|
||||
P.info = "[sent]"
|
||||
P.update_icon()
|
||||
|
||||
playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1)
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
#define ui_action_slot4 "4:12,14:26"
|
||||
#define ui_action_slot5 "5:14,14:26"
|
||||
|
||||
//Middle left indicators
|
||||
#define ui_alienplasmadisplay "1,6:15"
|
||||
|
||||
//Lower left, persistant menu
|
||||
#define ui_inventory "1:6,1:5"
|
||||
|
||||
|
||||
@@ -216,6 +216,12 @@
|
||||
mymob.pullin.name = "pull"
|
||||
mymob.pullin.screen_loc = ui_pull_resist
|
||||
|
||||
alien_plasma_display = new /obj/screen()
|
||||
alien_plasma_display.icon = 'icons/mob/screen_gen.dmi'
|
||||
alien_plasma_display.icon_state = "power_display"
|
||||
alien_plasma_display.name = "plasma stored"
|
||||
alien_plasma_display.screen_loc = ui_alienplasmadisplay
|
||||
|
||||
mymob.blind = new /obj/screen()
|
||||
mymob.blind.icon = 'icons/mob/screen1_full.dmi'
|
||||
mymob.blind.icon_state = "blackimageoverlay"
|
||||
@@ -237,5 +243,5 @@
|
||||
|
||||
mymob.client.screen = null
|
||||
|
||||
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
|
||||
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, mymob.pullin, alien_plasma_display, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
|
||||
mymob.client.screen += src.adding + src.other
|
||||
@@ -96,6 +96,7 @@ var/datum/global_hud/global_hud = new()
|
||||
var/obj/screen/lingchemdisplay
|
||||
var/obj/screen/blobpwrdisplay
|
||||
var/obj/screen/blobhealthdisplay
|
||||
var/obj/screen/alien_plasma_display
|
||||
var/obj/screen/r_hand_hud_object
|
||||
var/obj/screen/l_hand_hud_object
|
||||
var/obj/screen/action_intent
|
||||
|
||||
@@ -456,6 +456,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containername = "fuel tank crate"
|
||||
group = "Engineering"
|
||||
|
||||
/datum/supply_packs/coolanttank
|
||||
name = "Coolant tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/coolanttank)
|
||||
cost = 16
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "coolant tank crate"
|
||||
group = "Medical / Science"
|
||||
|
||||
|
||||
/datum/supply_packs/solar
|
||||
name = "Solar Pack crate"
|
||||
contains = list(/obj/item/solar_assembly,
|
||||
|
||||
@@ -179,20 +179,20 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/dangerous/revolver
|
||||
name = "Fully Loaded Revolver"
|
||||
desc = "A traditional handgun which fires .357 rounds. Has 7 chambers. Can down an unarmoured target with two shots."
|
||||
item = /obj/item/weapon/gun/projectile
|
||||
item = /obj/item/weapon/gun/projectile/revolver
|
||||
cost = 6
|
||||
|
||||
/datum/uplink_item/dangerous/ammo
|
||||
name = "Ammo-357"
|
||||
desc = "Seven additional rounds for the revolver. Reports indicate the presence of machinery aboard Nanotrasen space stations suitable for producing extra .357 cartridges."
|
||||
item = /obj/item/ammo_magazine/a357
|
||||
item = /obj/item/ammo_box/a357
|
||||
cost = 2
|
||||
|
||||
/datum/uplink_item/dangerous/crossbow
|
||||
name = "Energy Crossbow"
|
||||
desc = "A miniature energy crossbow that is small enough both to fit into a pocket and to slip into a backpack unnoticed by observers. Fires bolts tipped with toxin, a poisonous substance that is the product of a living organism. Stuns enemies for a short period of time. Recharges automatically."
|
||||
item = /obj/item/weapon/gun/energy/crossbow
|
||||
cost = 5
|
||||
cost = 7
|
||||
|
||||
/datum/uplink_item/dangerous/sword
|
||||
name = "Energy Sword"
|
||||
@@ -200,6 +200,12 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/melee/energy/sword
|
||||
cost = 4
|
||||
|
||||
/datum/uplink_item/dangerous/manhacks
|
||||
name = "Manhack Delivery Grenade"
|
||||
desc = "The manhack grenade is a highly specialized grenades that, once thrown, will deploy a swarm of Viscerators to attack any nearby crewmembers. WARNING: Viscerator progrmaming does not include safeties. They may turn on you!"
|
||||
item = /obj/item/weapon/grenade/spawnergrenade/manhacks
|
||||
cost = 7
|
||||
|
||||
/datum/uplink_item/dangerous/emp
|
||||
name = "5 EMP Grenades"
|
||||
desc = "A box that contains 5 EMP grenades. Useful to disrupt communication and silicon lifeforms."
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
icon_state = "beartrap[armed]"
|
||||
user << "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>"
|
||||
|
||||
/obj/item/weapon/legcuffs/beartrap/HasEntered(AM as mob|obj)
|
||||
/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj)
|
||||
if(armed)
|
||||
if(ishuman(AM))
|
||||
if(isturf(src.loc))
|
||||
|
||||
@@ -0,0 +1,722 @@
|
||||
// List is required to compile the resources into the game when it loads.
|
||||
// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
|
||||
|
||||
var/list/vox_sounds = list("," = 'sound/vox/,.wav',
|
||||
"." = 'sound/vox/..wav',
|
||||
"a" = 'sound/vox_fem/a.ogg',
|
||||
"abortions" = 'sound/vox_fem/abortions.ogg',
|
||||
"accelerating" = 'sound/vox_fem/accelerating.ogg',
|
||||
"accelerator" = 'sound/vox_fem/accelerator.ogg',
|
||||
"accepted" = 'sound/vox_fem/accepted.ogg',
|
||||
"access" = 'sound/vox_fem/access.ogg',
|
||||
"acknowledge" = 'sound/vox_fem/acknowledge.ogg',
|
||||
"acknowledged" = 'sound/vox_fem/acknowledged.ogg',
|
||||
"acquired" = 'sound/vox_fem/acquired.ogg',
|
||||
"acquisition" = 'sound/vox_fem/acquisition.ogg',
|
||||
"across" = 'sound/vox_fem/across.ogg',
|
||||
"activate" = 'sound/vox_fem/activate.ogg',
|
||||
"activated" = 'sound/vox_fem/activated.ogg',
|
||||
"activity" = 'sound/vox_fem/activity.ogg',
|
||||
"adios" = 'sound/vox_fem/adios.ogg',
|
||||
"administration" = 'sound/vox_fem/administration.ogg',
|
||||
"advanced" = 'sound/vox_fem/advanced.ogg',
|
||||
"aft" = 'sound/vox_fem/aft.ogg',
|
||||
"after" = 'sound/vox_fem/after.ogg',
|
||||
"agent" = 'sound/vox_fem/agent.ogg',
|
||||
"ai" = 'sound/vox_fem/ai.ogg',
|
||||
"alarm" = 'sound/vox_fem/alarm.ogg',
|
||||
"alert" = 'sound/vox_fem/alert.ogg',
|
||||
"alien" = 'sound/vox_fem/alien.ogg',
|
||||
"aligned" = 'sound/vox_fem/aligned.ogg',
|
||||
"all" = 'sound/vox_fem/all.ogg',
|
||||
"alpha" = 'sound/vox_fem/alpha.ogg',
|
||||
"am" = 'sound/vox_fem/am.ogg',
|
||||
"amigo" = 'sound/vox_fem/amigo.ogg',
|
||||
"ammunition" = 'sound/vox_fem/ammunition.ogg',
|
||||
"an" = 'sound/vox_fem/an.ogg',
|
||||
"and" = 'sound/vox_fem/and.ogg',
|
||||
"announcement" = 'sound/vox_fem/announcement.ogg',
|
||||
"anomalous" = 'sound/vox_fem/anomalous.ogg',
|
||||
"antenna" = 'sound/vox_fem/antenna.ogg',
|
||||
"any" = 'sound/vox_fem/any.ogg',
|
||||
"apprehend" = 'sound/vox_fem/apprehend.ogg',
|
||||
"approach" = 'sound/vox_fem/approach.ogg',
|
||||
"are" = 'sound/vox_fem/are.ogg',
|
||||
"area" = 'sound/vox_fem/area.ogg',
|
||||
"arm" = 'sound/vox_fem/arm.ogg',
|
||||
"armed" = 'sound/vox_fem/armed.ogg',
|
||||
"armor" = 'sound/vox_fem/armor.ogg',
|
||||
"armory" = 'sound/vox_fem/armory.ogg',
|
||||
"array" = 'sound/vox_fem/array.ogg',
|
||||
"arrest" = 'sound/vox_fem/arrest.ogg',
|
||||
"asimov" = 'sound/vox_fem/asimov.ogg',
|
||||
"ass" = 'sound/vox_fem/ass.ogg',
|
||||
"asshole" = 'sound/vox_fem/asshole.ogg',
|
||||
"assholes" = 'sound/vox_fem/assholes.ogg',
|
||||
"at" = 'sound/vox_fem/at.ogg',
|
||||
"atomic" = 'sound/vox_fem/atomic.ogg',
|
||||
"attention" = 'sound/vox_fem/attention.ogg',
|
||||
"authorize" = 'sound/vox_fem/authorize.ogg',
|
||||
"authorized" = 'sound/vox_fem/authorized.ogg',
|
||||
"automatic" = 'sound/vox_fem/automatic.ogg',
|
||||
"away" = 'sound/vox_fem/away.ogg',
|
||||
"b" = 'sound/vox_fem/b.ogg',
|
||||
"back" = 'sound/vox_fem/back.ogg',
|
||||
"backman" = 'sound/vox_fem/backman.ogg',
|
||||
"bad" = 'sound/vox_fem/bad.ogg',
|
||||
"bag" = 'sound/vox_fem/bag.ogg',
|
||||
"bailey" = 'sound/vox_fem/bailey.ogg',
|
||||
"barracks" = 'sound/vox_fem/barracks.ogg',
|
||||
"base" = 'sound/vox_fem/base.ogg',
|
||||
"bay" = 'sound/vox_fem/bay.ogg',
|
||||
"be" = 'sound/vox_fem/be.ogg',
|
||||
"been" = 'sound/vox_fem/been.ogg',
|
||||
"before" = 'sound/vox_fem/before.ogg',
|
||||
"beyond" = 'sound/vox_fem/beyond.ogg',
|
||||
"biohazard" = 'sound/vox_fem/biohazard.ogg',
|
||||
"biological" = 'sound/vox_fem/biological.ogg',
|
||||
"birdwell" = 'sound/vox_fem/birdwell.ogg',
|
||||
"bitch" = 'sound/vox_fem/bitch.ogg',
|
||||
"bitches" = 'sound/vox_fem/bitches.ogg',
|
||||
"bizwarn" = 'sound/vox/bizwarn.wav',
|
||||
"black" = 'sound/vox_fem/black.ogg',
|
||||
"blast" = 'sound/vox_fem/blast.ogg',
|
||||
"blocked" = 'sound/vox_fem/blocked.ogg',
|
||||
"bloop" = 'sound/vox/bloop.wav',
|
||||
"blue" = 'sound/vox_fem/blue.ogg',
|
||||
"bottom" = 'sound/vox_fem/bottom.ogg',
|
||||
"bravo" = 'sound/vox_fem/bravo.ogg',
|
||||
"breach" = 'sound/vox_fem/breach.ogg',
|
||||
"breached" = 'sound/vox_fem/breached.ogg',
|
||||
"break" = 'sound/vox_fem/break.ogg',
|
||||
"bridge" = 'sound/vox_fem/bridge.ogg',
|
||||
"bust" = 'sound/vox_fem/bust.ogg',
|
||||
"but" = 'sound/vox_fem/but.ogg',
|
||||
"button" = 'sound/vox_fem/button.ogg',
|
||||
"buzwarn" = 'sound/vox/buzwarn.wav',
|
||||
"bypass" = 'sound/vox_fem/bypass.ogg',
|
||||
"c" = 'sound/vox_fem/c.ogg',
|
||||
"cable" = 'sound/vox_fem/cable.ogg',
|
||||
"call" = 'sound/vox_fem/call.ogg',
|
||||
"called" = 'sound/vox_fem/called.ogg',
|
||||
"canal" = 'sound/vox_fem/canal.ogg',
|
||||
"cap" = 'sound/vox_fem/cap.ogg',
|
||||
"captain" = 'sound/vox_fem/captain.ogg',
|
||||
"capture" = 'sound/vox_fem/capture.ogg',
|
||||
"cargo" = 'sound/vox_fem/cargo.ogg',
|
||||
"ceiling" = 'sound/vox_fem/ceiling.ogg',
|
||||
"celsius" = 'sound/vox_fem/celsius.ogg',
|
||||
"centcomm" = 'sound/vox_fem/centcomm.ogg',
|
||||
"center" = 'sound/vox_fem/center.ogg',
|
||||
"centi" = 'sound/vox_fem/centi.ogg',
|
||||
"central" = 'sound/vox_fem/central.ogg',
|
||||
"chamber" = 'sound/vox_fem/chamber.ogg',
|
||||
"changed" = 'sound/vox_fem/changed.ogg',
|
||||
"charlie" = 'sound/vox_fem/charlie.ogg',
|
||||
"check" = 'sound/vox_fem/check.ogg',
|
||||
"checkpoint" = 'sound/vox_fem/checkpoint.ogg',
|
||||
"chemical" = 'sound/vox_fem/chemical.ogg',
|
||||
"cleanup" = 'sound/vox_fem/cleanup.ogg',
|
||||
"clear" = 'sound/vox_fem/clear.ogg',
|
||||
"clearance" = 'sound/vox_fem/clearance.ogg',
|
||||
"close" = 'sound/vox_fem/close.ogg',
|
||||
"clown" = 'sound/vox_fem/clown.ogg',
|
||||
"code" = 'sound/vox_fem/code.ogg',
|
||||
"coded" = 'sound/vox_fem/coded.ogg',
|
||||
"collider" = 'sound/vox_fem/collider.ogg',
|
||||
"come" = 'sound/vox_fem/come.ogg',
|
||||
"command" = 'sound/vox_fem/command.ogg',
|
||||
"communication" = 'sound/vox_fem/communication.ogg',
|
||||
"complex" = 'sound/vox_fem/complex.ogg',
|
||||
"computer" = 'sound/vox_fem/computer.ogg',
|
||||
"condition" = 'sound/vox_fem/condition.ogg',
|
||||
"connor" = 'sound/vox_fem/connor.ogg',
|
||||
"containment" = 'sound/vox_fem/containment.ogg',
|
||||
"contamination" = 'sound/vox_fem/contamination.ogg',
|
||||
"contraband" = 'sound/vox_fem/contraband.ogg',
|
||||
"control" = 'sound/vox_fem/control.ogg',
|
||||
"coolant" = 'sound/vox_fem/coolant.ogg',
|
||||
"coomer" = 'sound/vox_fem/coomer.ogg',
|
||||
"core" = 'sound/vox_fem/core.ogg',
|
||||
"correct" = 'sound/vox_fem/correct.ogg',
|
||||
"corridor" = 'sound/vox_fem/corridor.ogg',
|
||||
"coward" = 'sound/vox_fem/coward.ogg',
|
||||
"cowards" = 'sound/vox_fem/cowards.ogg',
|
||||
"crew" = 'sound/vox_fem/crew.ogg',
|
||||
"cross" = 'sound/vox_fem/cross.ogg',
|
||||
"cryogenic" = 'sound/vox_fem/cryogenic.ogg',
|
||||
"cunt" = 'sound/vox_fem/cunt.ogg',
|
||||
"cyborg" = 'sound/vox_fem/cyborg.ogg',
|
||||
"cyborgs" = 'sound/vox_fem/cyborgs.ogg',
|
||||
"d" = 'sound/vox_fem/d.ogg',
|
||||
"dadeda" = 'sound/vox/dadeda.wav',
|
||||
"damage" = 'sound/vox_fem/damage.ogg',
|
||||
"damaged" = 'sound/vox_fem/damaged.ogg',
|
||||
"danger" = 'sound/vox_fem/danger.ogg',
|
||||
"day" = 'sound/vox_fem/day.ogg',
|
||||
"deactivated" = 'sound/vox_fem/deactivated.ogg',
|
||||
"decompression" = 'sound/vox_fem/decompression.ogg',
|
||||
"decontamination" = 'sound/vox_fem/decontamination.ogg',
|
||||
"deeoo" = 'sound/vox_fem/deeoo.ogg',
|
||||
"defense" = 'sound/vox_fem/defense.ogg',
|
||||
"degrees" = 'sound/vox_fem/degrees.ogg',
|
||||
"delta" = 'sound/vox_fem/delta.ogg',
|
||||
"denied" = 'sound/vox_fem/denied.ogg',
|
||||
"deploy" = 'sound/vox_fem/deploy.ogg',
|
||||
"deployed" = 'sound/vox_fem/deployed.ogg',
|
||||
"destroy" = 'sound/vox_fem/destroy.ogg',
|
||||
"destroyed" = 'sound/vox_fem/destroyed.ogg',
|
||||
"detain" = 'sound/vox_fem/detain.ogg',
|
||||
"detected" = 'sound/vox_fem/detected.ogg',
|
||||
"detonation" = 'sound/vox_fem/detonation.ogg',
|
||||
"device" = 'sound/vox_fem/device.ogg',
|
||||
"did" = 'sound/vox_fem/did.ogg',
|
||||
"die" = 'sound/vox_fem/die.ogg',
|
||||
"dimensional" = 'sound/vox_fem/dimensional.ogg',
|
||||
"dirt" = 'sound/vox_fem/dirt.ogg',
|
||||
"disengaged" = 'sound/vox_fem/disengaged.ogg',
|
||||
"dish" = 'sound/vox_fem/dish.ogg',
|
||||
"disposal" = 'sound/vox_fem/disposal.ogg',
|
||||
"distance" = 'sound/vox_fem/distance.ogg',
|
||||
"distortion" = 'sound/vox_fem/distortion.ogg',
|
||||
"do" = 'sound/vox_fem/do.ogg',
|
||||
"doctor" = 'sound/vox_fem/doctor.ogg',
|
||||
"doop" = 'sound/vox/doop.wav',
|
||||
"door" = 'sound/vox_fem/door.ogg',
|
||||
"down" = 'sound/vox_fem/down.ogg',
|
||||
"dual" = 'sound/vox_fem/dual.ogg',
|
||||
"duct" = 'sound/vox_fem/duct.ogg',
|
||||
"e" = 'sound/vox_fem/e.ogg',
|
||||
"east" = 'sound/vox_fem/east.ogg',
|
||||
"echo" = 'sound/vox_fem/echo.ogg',
|
||||
"ed" = 'sound/vox_fem/ed.ogg',
|
||||
"effect" = 'sound/vox_fem/effect.ogg',
|
||||
"egress" = 'sound/vox_fem/egress.ogg',
|
||||
"eight" = 'sound/vox_fem/eight.ogg',
|
||||
"eighteen" = 'sound/vox_fem/eighteen.ogg',
|
||||
"eighty" = 'sound/vox_fem/eighty.ogg',
|
||||
"electric" = 'sound/vox_fem/electric.ogg',
|
||||
"electromagnetic" = 'sound/vox_fem/electromagnetic.ogg',
|
||||
"elevator" = 'sound/vox_fem/elevator.ogg',
|
||||
"eleven" = 'sound/vox_fem/eleven.ogg',
|
||||
"eliminate" = 'sound/vox_fem/eliminate.ogg',
|
||||
"emergency" = 'sound/vox_fem/emergency.ogg',
|
||||
"energy" = 'sound/vox_fem/energy.ogg',
|
||||
"engage" = 'sound/vox_fem/engage.ogg',
|
||||
"engaged" = 'sound/vox_fem/engaged.ogg',
|
||||
"engine" = 'sound/vox_fem/engine.ogg',
|
||||
"enter" = 'sound/vox_fem/enter.ogg',
|
||||
"entry" = 'sound/vox_fem/entry.ogg',
|
||||
"environment" = 'sound/vox_fem/environment.ogg',
|
||||
"error" = 'sound/vox_fem/error.ogg',
|
||||
"escape" = 'sound/vox_fem/escape.ogg',
|
||||
"evacuate" = 'sound/vox_fem/evacuate.ogg',
|
||||
"exchange" = 'sound/vox_fem/exchange.ogg',
|
||||
"exit" = 'sound/vox_fem/exit.ogg',
|
||||
"expect" = 'sound/vox_fem/expect.ogg',
|
||||
"experiment" = 'sound/vox_fem/experiment.ogg',
|
||||
"experimental" = 'sound/vox_fem/experimental.ogg',
|
||||
"explode" = 'sound/vox_fem/explode.ogg',
|
||||
"explosion" = 'sound/vox_fem/explosion.ogg',
|
||||
"exposure" = 'sound/vox_fem/exposure.ogg',
|
||||
"exterminate" = 'sound/vox_fem/exterminate.ogg',
|
||||
"extinguish" = 'sound/vox_fem/extinguish.ogg',
|
||||
"extinguisher" = 'sound/vox_fem/extinguisher.ogg',
|
||||
"extreme" = 'sound/vox_fem/extreme.ogg',
|
||||
"f" = 'sound/vox_fem/f.ogg',
|
||||
"facility" = 'sound/vox_fem/facility.ogg',
|
||||
"fahrenheit" = 'sound/vox_fem/fahrenheit.ogg',
|
||||
"failed" = 'sound/vox_fem/failed.ogg',
|
||||
"failure" = 'sound/vox_fem/failure.ogg',
|
||||
"farthest" = 'sound/vox_fem/farthest.ogg',
|
||||
"fast" = 'sound/vox_fem/fast.ogg',
|
||||
"feet" = 'sound/vox_fem/feet.ogg',
|
||||
"field" = 'sound/vox_fem/field.ogg',
|
||||
"fifteen" = 'sound/vox_fem/fifteen.ogg',
|
||||
"fifth" = 'sound/vox_fem/fifth.ogg',
|
||||
"fifty" = 'sound/vox_fem/fifty.ogg',
|
||||
"final" = 'sound/vox_fem/final.ogg',
|
||||
"fine" = 'sound/vox_fem/fine.ogg',
|
||||
"fire" = 'sound/vox_fem/fire.ogg',
|
||||
"first" = 'sound/vox_fem/first.ogg',
|
||||
"five" = 'sound/vox_fem/five.ogg',
|
||||
"flooding" = 'sound/vox_fem/flooding.ogg',
|
||||
"floor" = 'sound/vox_fem/floor.ogg',
|
||||
"fool" = 'sound/vox_fem/fool.ogg',
|
||||
"for" = 'sound/vox_fem/for.ogg',
|
||||
"forbidden" = 'sound/vox_fem/forbidden.ogg',
|
||||
"force" = 'sound/vox_fem/force.ogg',
|
||||
"fore" = 'sound/vox_fem/fore.ogg',
|
||||
"forms" = 'sound/vox_fem/forms.ogg',
|
||||
"found" = 'sound/vox_fem/found.ogg',
|
||||
"four" = 'sound/vox_fem/four.ogg',
|
||||
"fourteen" = 'sound/vox_fem/fourteen.ogg',
|
||||
"fourth" = 'sound/vox_fem/fourth.ogg',
|
||||
"fourty" = 'sound/vox_fem/fourty.ogg',
|
||||
"foxtrot" = 'sound/vox_fem/foxtrot.ogg',
|
||||
"freeman" = 'sound/vox_fem/freeman.ogg',
|
||||
"freezer" = 'sound/vox_fem/freezer.ogg',
|
||||
"from" = 'sound/vox_fem/from.ogg',
|
||||
"front" = 'sound/vox_fem/front.ogg',
|
||||
"fuck" = 'sound/vox_fem/fuck.ogg',
|
||||
"fucking" = 'sound/vox_fem/fucking.ogg',
|
||||
"fucks" = 'sound/vox_fem/fucks.ogg',
|
||||
"fuel" = 'sound/vox_fem/fuel.ogg',
|
||||
"g" = 'sound/vox_fem/g.ogg',
|
||||
"gas" = 'sound/vox_fem/gas.ogg',
|
||||
"get" = 'sound/vox_fem/get.ogg',
|
||||
"glory" = 'sound/vox_fem/glory.ogg',
|
||||
"go" = 'sound/vox_fem/go.ogg',
|
||||
"going" = 'sound/vox_fem/going.ogg',
|
||||
"good" = 'sound/vox_fem/good.ogg',
|
||||
"goodbye" = 'sound/vox_fem/goodbye.ogg',
|
||||
"gordon" = 'sound/vox_fem/gordon.ogg',
|
||||
"got" = 'sound/vox_fem/got.ogg',
|
||||
"government" = 'sound/vox_fem/government.ogg',
|
||||
"granted" = 'sound/vox_fem/granted.ogg',
|
||||
"gray" = 'sound/vox_fem/gray.ogg',
|
||||
"great" = 'sound/vox_fem/great.ogg',
|
||||
"green" = 'sound/vox_fem/green.ogg',
|
||||
"grenade" = 'sound/vox_fem/grenade.ogg',
|
||||
"guard" = 'sound/vox_fem/guard.ogg',
|
||||
"gulf" = 'sound/vox_fem/gulf.ogg',
|
||||
"gun" = 'sound/vox_fem/gun.ogg',
|
||||
"guthrie" = 'sound/vox_fem/guthrie.ogg',
|
||||
"h" = 'sound/vox_fem/h.ogg',
|
||||
"hacker" = 'sound/vox_fem/hacker.ogg',
|
||||
"hackers" = 'sound/vox_fem/hackers.ogg',
|
||||
"handling" = 'sound/vox_fem/handling.ogg',
|
||||
"hangar" = 'sound/vox_fem/hangar.ogg',
|
||||
"harm" = 'sound/vox_fem/harm.ogg',
|
||||
"has" = 'sound/vox_fem/has.ogg',
|
||||
"have" = 'sound/vox_fem/have.ogg',
|
||||
"hazard" = 'sound/vox_fem/hazard.ogg',
|
||||
"head" = 'sound/vox_fem/head.ogg',
|
||||
"health" = 'sound/vox_fem/health.ogg',
|
||||
"heat" = 'sound/vox_fem/heat.ogg',
|
||||
"helicopter" = 'sound/vox_fem/helicopter.ogg',
|
||||
"helium" = 'sound/vox_fem/helium.ogg',
|
||||
"hello" = 'sound/vox_fem/hello.ogg',
|
||||
"help" = 'sound/vox_fem/help.ogg',
|
||||
"here" = 'sound/vox_fem/here.ogg',
|
||||
"hide" = 'sound/vox_fem/hide.ogg',
|
||||
"high" = 'sound/vox_fem/high.ogg',
|
||||
"highest" = 'sound/vox_fem/highest.ogg',
|
||||
"hit" = 'sound/vox_fem/hit.ogg',
|
||||
"hole" = 'sound/vox_fem/hole.ogg',
|
||||
"hostile" = 'sound/vox_fem/hostile.ogg',
|
||||
"hot" = 'sound/vox_fem/hot.ogg',
|
||||
"hotel" = 'sound/vox_fem/hotel.ogg',
|
||||
"hour" = 'sound/vox_fem/hour.ogg',
|
||||
"hours" = 'sound/vox_fem/hours.ogg',
|
||||
"human" = 'sound/vox_fem/human.ogg',
|
||||
"hundred" = 'sound/vox_fem/hundred.ogg',
|
||||
"hunger" = 'sound/vox_fem/hunger.ogg',
|
||||
"hydro" = 'sound/vox_fem/hydro.ogg',
|
||||
"hydroponics" = 'sound/vox_fem/hydroponics.ogg',
|
||||
"i" = 'sound/vox_fem/i.ogg',
|
||||
"idiot" = 'sound/vox_fem/idiot.ogg',
|
||||
"illegal" = 'sound/vox_fem/illegal.ogg',
|
||||
"immediate" = 'sound/vox_fem/immediate.ogg',
|
||||
"immediately" = 'sound/vox_fem/immediately.ogg',
|
||||
"in" = 'sound/vox_fem/in.ogg',
|
||||
"inches" = 'sound/vox_fem/inches.ogg',
|
||||
"india" = 'sound/vox_fem/india.ogg',
|
||||
"ing" = 'sound/vox_fem/ing.ogg',
|
||||
"inoperative" = 'sound/vox_fem/inoperative.ogg',
|
||||
"inside" = 'sound/vox_fem/inside.ogg',
|
||||
"inspection" = 'sound/vox_fem/inspection.ogg',
|
||||
"inspector" = 'sound/vox_fem/inspector.ogg',
|
||||
"interchange" = 'sound/vox_fem/interchange.ogg',
|
||||
"intruder" = 'sound/vox_fem/intruder.ogg',
|
||||
"invalid" = 'sound/vox_fem/invalid.ogg',
|
||||
"invasion" = 'sound/vox_fem/invasion.ogg',
|
||||
"is" = 'sound/vox_fem/is.ogg',
|
||||
"it" = 'sound/vox_fem/it.ogg',
|
||||
"j" = 'sound/vox_fem/j.ogg',
|
||||
"johnson" = 'sound/vox_fem/johnson.ogg',
|
||||
"juliet" = 'sound/vox_fem/juliet.ogg',
|
||||
"k" = 'sound/vox_fem/k.ogg',
|
||||
"key" = 'sound/vox_fem/key.ogg',
|
||||
"kill" = 'sound/vox_fem/kill.ogg',
|
||||
"kilo" = 'sound/vox_fem/kilo.ogg',
|
||||
"kit" = 'sound/vox_fem/kit.ogg',
|
||||
"l" = 'sound/vox_fem/l.ogg',
|
||||
"lab" = 'sound/vox_fem/lab.ogg',
|
||||
"lambda" = 'sound/vox_fem/lambda.ogg',
|
||||
"laser" = 'sound/vox_fem/laser.ogg',
|
||||
"last" = 'sound/vox_fem/last.ogg',
|
||||
"launch" = 'sound/vox_fem/launch.ogg',
|
||||
"law" = 'sound/vox_fem/law.ogg',
|
||||
"laws" = 'sound/vox_fem/laws.ogg',
|
||||
"leak" = 'sound/vox_fem/leak.ogg',
|
||||
"leave" = 'sound/vox_fem/leave.ogg',
|
||||
"left" = 'sound/vox_fem/left.ogg',
|
||||
"legal" = 'sound/vox_fem/legal.ogg',
|
||||
"level" = 'sound/vox_fem/level.ogg',
|
||||
"lever" = 'sound/vox_fem/lever.ogg',
|
||||
"lie" = 'sound/vox_fem/lie.ogg',
|
||||
"lieutenant" = 'sound/vox_fem/lieutenant.ogg',
|
||||
"life" = 'sound/vox_fem/life.ogg',
|
||||
"light" = 'sound/vox_fem/light.ogg',
|
||||
"lima" = 'sound/vox_fem/lima.ogg',
|
||||
"liquid" = 'sound/vox_fem/liquid.ogg',
|
||||
"loading" = 'sound/vox_fem/loading.ogg',
|
||||
"locate" = 'sound/vox_fem/locate.ogg',
|
||||
"located" = 'sound/vox_fem/located.ogg',
|
||||
"location" = 'sound/vox_fem/location.ogg',
|
||||
"lock" = 'sound/vox_fem/lock.ogg',
|
||||
"locked" = 'sound/vox_fem/locked.ogg',
|
||||
"locker" = 'sound/vox_fem/locker.ogg',
|
||||
"lockout" = 'sound/vox_fem/lockout.ogg',
|
||||
"loose" = 'sound/vox_fem/loose.ogg',
|
||||
"lower" = 'sound/vox_fem/lower.ogg',
|
||||
"lowest" = 'sound/vox_fem/lowest.ogg',
|
||||
"m" = 'sound/vox_fem/m.ogg',
|
||||
"magnetic" = 'sound/vox_fem/magnetic.ogg',
|
||||
"main" = 'sound/vox_fem/main.ogg',
|
||||
"maintenance" = 'sound/vox_fem/maintenance.ogg',
|
||||
"malfunction" = 'sound/vox_fem/malfunction.ogg',
|
||||
"man" = 'sound/vox_fem/man.ogg',
|
||||
"mass" = 'sound/vox_fem/mass.ogg',
|
||||
"materials" = 'sound/vox_fem/materials.ogg',
|
||||
"maximum" = 'sound/vox_fem/maximum.ogg',
|
||||
"may" = 'sound/vox_fem/may.ogg',
|
||||
"me" = 'sound/vox_fem/me.ogg',
|
||||
"medbay" = 'sound/vox_fem/medbay.ogg',
|
||||
"medical" = 'sound/vox_fem/medical.ogg',
|
||||
"men" = 'sound/vox_fem/men.ogg',
|
||||
"mercy" = 'sound/vox_fem/mercy.ogg',
|
||||
"mesa" = 'sound/vox_fem/mesa.ogg',
|
||||
"message" = 'sound/vox_fem/message.ogg',
|
||||
"meter" = 'sound/vox_fem/meter.ogg',
|
||||
"micro" = 'sound/vox_fem/micro.ogg',
|
||||
"middle" = 'sound/vox_fem/middle.ogg',
|
||||
"mike" = 'sound/vox_fem/mike.ogg',
|
||||
"miles" = 'sound/vox_fem/miles.ogg',
|
||||
"military" = 'sound/vox_fem/military.ogg',
|
||||
"milli" = 'sound/vox_fem/milli.ogg',
|
||||
"million" = 'sound/vox_fem/million.ogg',
|
||||
"minefield" = 'sound/vox_fem/minefield.ogg',
|
||||
"minimum" = 'sound/vox_fem/minimum.ogg',
|
||||
"minutes" = 'sound/vox_fem/minutes.ogg',
|
||||
"mister" = 'sound/vox_fem/mister.ogg',
|
||||
"mode" = 'sound/vox_fem/mode.ogg',
|
||||
"money" = 'sound/vox_fem/money.ogg',
|
||||
"motor" = 'sound/vox_fem/motor.ogg',
|
||||
"motorpool" = 'sound/vox_fem/motorpool.ogg',
|
||||
"move" = 'sound/vox_fem/move.ogg',
|
||||
"must" = 'sound/vox_fem/must.ogg',
|
||||
"my" = 'sound/vox_fem/my.ogg',
|
||||
"n" = 'sound/vox_fem/n.ogg',
|
||||
"nanotrasen" = 'sound/vox_fem/nanotrasen.ogg',
|
||||
"nearest" = 'sound/vox_fem/nearest.ogg',
|
||||
"nice" = 'sound/vox_fem/nice.ogg',
|
||||
"nine" = 'sound/vox_fem/nine.ogg',
|
||||
"nineteen" = 'sound/vox_fem/nineteen.ogg',
|
||||
"ninety" = 'sound/vox_fem/ninety.ogg',
|
||||
"no" = 'sound/vox_fem/no.ogg',
|
||||
"nominal" = 'sound/vox_fem/nominal.ogg',
|
||||
"north" = 'sound/vox_fem/north.ogg',
|
||||
"not" = 'sound/vox_fem/not.ogg',
|
||||
"november" = 'sound/vox_fem/november.ogg',
|
||||
"now" = 'sound/vox_fem/now.ogg',
|
||||
"number" = 'sound/vox_fem/number.ogg',
|
||||
"o" = 'sound/vox_fem/o.ogg',
|
||||
"objective" = 'sound/vox_fem/objective.ogg',
|
||||
"observation" = 'sound/vox_fem/observation.ogg',
|
||||
"obtain" = 'sound/vox_fem/obtain.ogg',
|
||||
"of" = 'sound/vox_fem/of.ogg',
|
||||
"officer" = 'sound/vox_fem/officer.ogg',
|
||||
"ok" = 'sound/vox_fem/ok.ogg',
|
||||
"on" = 'sound/vox_fem/on.ogg',
|
||||
"one" = 'sound/vox_fem/one.ogg',
|
||||
"open" = 'sound/vox_fem/open.ogg',
|
||||
"operating" = 'sound/vox_fem/operating.ogg',
|
||||
"operations" = 'sound/vox_fem/operations.ogg',
|
||||
"operative" = 'sound/vox_fem/operative.ogg',
|
||||
"option" = 'sound/vox_fem/option.ogg',
|
||||
"order" = 'sound/vox_fem/order.ogg',
|
||||
"organic" = 'sound/vox_fem/organic.ogg',
|
||||
"oscar" = 'sound/vox_fem/oscar.ogg',
|
||||
"out" = 'sound/vox_fem/out.ogg',
|
||||
"outside" = 'sound/vox_fem/outside.ogg',
|
||||
"over" = 'sound/vox_fem/over.ogg',
|
||||
"overload" = 'sound/vox_fem/overload.ogg',
|
||||
"override" = 'sound/vox_fem/override.ogg',
|
||||
"p" = 'sound/vox_fem/p.ogg',
|
||||
"pacify" = 'sound/vox_fem/pacify.ogg',
|
||||
"pain" = 'sound/vox_fem/pain.ogg',
|
||||
"pal" = 'sound/vox_fem/pal.ogg',
|
||||
"panel" = 'sound/vox_fem/panel.ogg',
|
||||
"percent" = 'sound/vox_fem/percent.ogg',
|
||||
"perimeter" = 'sound/vox_fem/perimeter.ogg',
|
||||
"permitted" = 'sound/vox_fem/permitted.ogg',
|
||||
"personnel" = 'sound/vox_fem/personnel.ogg',
|
||||
"pipe" = 'sound/vox_fem/pipe.ogg',
|
||||
"plant" = 'sound/vox_fem/plant.ogg',
|
||||
"plasma" = 'sound/vox_fem/plasma.ogg',
|
||||
"platform" = 'sound/vox_fem/platform.ogg',
|
||||
"please" = 'sound/vox_fem/please.ogg',
|
||||
"point" = 'sound/vox_fem/point.ogg',
|
||||
"port" = 'sound/vox_fem/port.ogg',
|
||||
"portal" = 'sound/vox_fem/portal.ogg',
|
||||
"power" = 'sound/vox_fem/power.ogg',
|
||||
"presence" = 'sound/vox_fem/presence.ogg',
|
||||
"press" = 'sound/vox_fem/press.ogg',
|
||||
"primary" = 'sound/vox_fem/primary.ogg',
|
||||
"proceed" = 'sound/vox_fem/proceed.ogg',
|
||||
"processing" = 'sound/vox_fem/processing.ogg',
|
||||
"progress" = 'sound/vox_fem/progress.ogg',
|
||||
"proper" = 'sound/vox_fem/proper.ogg',
|
||||
"propulsion" = 'sound/vox_fem/propulsion.ogg',
|
||||
"prosecute" = 'sound/vox_fem/prosecute.ogg',
|
||||
"protective" = 'sound/vox_fem/protective.ogg',
|
||||
"push" = 'sound/vox_fem/push.ogg',
|
||||
"q" = 'sound/vox_fem/q.ogg',
|
||||
"quantum" = 'sound/vox_fem/quantum.ogg',
|
||||
"quebec" = 'sound/vox_fem/quebec.ogg',
|
||||
"queen" = 'sound/vox_fem/queen.ogg',
|
||||
"question" = 'sound/vox_fem/question.ogg',
|
||||
"questioning" = 'sound/vox_fem/questioning.ogg',
|
||||
"quick" = 'sound/vox_fem/quick.ogg',
|
||||
"quit" = 'sound/vox_fem/quit.ogg',
|
||||
"r" = 'sound/vox_fem/r.ogg',
|
||||
"radiation" = 'sound/vox_fem/radiation.ogg',
|
||||
"radioactive" = 'sound/vox_fem/radioactive.ogg',
|
||||
"rads" = 'sound/vox_fem/rads.ogg',
|
||||
"raider" = 'sound/vox_fem/raider.ogg',
|
||||
"raiders" = 'sound/vox_fem/raiders.ogg',
|
||||
"rapid" = 'sound/vox_fem/rapid.ogg',
|
||||
"reach" = 'sound/vox_fem/reach.ogg',
|
||||
"reached" = 'sound/vox_fem/reached.ogg',
|
||||
"reactor" = 'sound/vox_fem/reactor.ogg',
|
||||
"red" = 'sound/vox_fem/red.ogg',
|
||||
"relay" = 'sound/vox_fem/relay.ogg',
|
||||
"released" = 'sound/vox_fem/released.ogg',
|
||||
"remaining" = 'sound/vox_fem/remaining.ogg',
|
||||
"removal" = 'sound/vox_fem/removal.ogg',
|
||||
"renegade" = 'sound/vox_fem/renegade.ogg',
|
||||
"repair" = 'sound/vox_fem/repair.ogg',
|
||||
"report" = 'sound/vox_fem/report.ogg',
|
||||
"reports" = 'sound/vox_fem/reports.ogg',
|
||||
"required" = 'sound/vox_fem/required.ogg',
|
||||
"research" = 'sound/vox_fem/research.ogg',
|
||||
"resevoir" = 'sound/vox_fem/resevoir.ogg',
|
||||
"resistance" = 'sound/vox_fem/resistance.ogg',
|
||||
"rest" = 'sound/vox_fem/rest.ogg',
|
||||
"right" = 'sound/vox_fem/right.ogg',
|
||||
"rocket" = 'sound/vox_fem/rocket.ogg',
|
||||
"roger" = 'sound/vox_fem/roger.ogg',
|
||||
"romeo" = 'sound/vox_fem/romeo.ogg',
|
||||
"room" = 'sound/vox_fem/room.ogg',
|
||||
"round" = 'sound/vox_fem/round.ogg',
|
||||
"run" = 'sound/vox_fem/run.ogg',
|
||||
"s" = 'sound/vox_fem/s.ogg',
|
||||
"safe" = 'sound/vox_fem/safe.ogg',
|
||||
"safety" = 'sound/vox_fem/safety.ogg',
|
||||
"sarah" = 'sound/vox_fem/sarah.ogg',
|
||||
"sargeant" = 'sound/vox_fem/sargeant.ogg',
|
||||
"satellite" = 'sound/vox_fem/satellite.ogg',
|
||||
"save" = 'sound/vox_fem/save.ogg',
|
||||
"science" = 'sound/vox_fem/science.ogg',
|
||||
"scream" = 'sound/vox_fem/scream.ogg',
|
||||
"screen" = 'sound/vox_fem/screen.ogg',
|
||||
"search" = 'sound/vox_fem/search.ogg',
|
||||
"second" = 'sound/vox_fem/second.ogg',
|
||||
"secondary" = 'sound/vox_fem/secondary.ogg',
|
||||
"seconds" = 'sound/vox_fem/seconds.ogg',
|
||||
"sector" = 'sound/vox_fem/sector.ogg',
|
||||
"secure" = 'sound/vox_fem/secure.ogg',
|
||||
"secured" = 'sound/vox_fem/secured.ogg',
|
||||
"security" = 'sound/vox_fem/security.ogg',
|
||||
"select" = 'sound/vox_fem/select.ogg',
|
||||
"selected" = 'sound/vox_fem/selected.ogg',
|
||||
"sensors" = 'sound/vox_fem/sensors.ogg',
|
||||
"service" = 'sound/vox_fem/service.ogg',
|
||||
"seven" = 'sound/vox_fem/seven.ogg',
|
||||
"seventeen" = 'sound/vox_fem/seventeen.ogg',
|
||||
"seventy" = 'sound/vox_fem/seventy.ogg',
|
||||
"severe" = 'sound/vox_fem/severe.ogg',
|
||||
"sewage" = 'sound/vox_fem/sewage.ogg',
|
||||
"sewer" = 'sound/vox_fem/sewer.ogg',
|
||||
"shield" = 'sound/vox_fem/shield.ogg',
|
||||
"shipment" = 'sound/vox_fem/shipment.ogg',
|
||||
"shirt" = 'sound/vox_fem/shirt.ogg',
|
||||
"shit" = 'sound/vox_fem/shit.ogg',
|
||||
"shitlord" = 'sound/vox_fem/shitlord.ogg',
|
||||
"shits" = 'sound/vox_fem/shits.ogg',
|
||||
"shitting" = 'sound/vox_fem/shitting.ogg',
|
||||
"shock" = 'sound/vox_fem/shock.ogg',
|
||||
"shoot" = 'sound/vox_fem/shoot.ogg',
|
||||
"shower" = 'sound/vox_fem/shower.ogg',
|
||||
"shut" = 'sound/vox_fem/shut.ogg',
|
||||
"shuttle" = 'sound/vox_fem/shuttle.ogg',
|
||||
"side" = 'sound/vox_fem/side.ogg',
|
||||
"sierra" = 'sound/vox_fem/sierra.ogg',
|
||||
"sight" = 'sound/vox_fem/sight.ogg',
|
||||
"silo" = 'sound/vox_fem/silo.ogg',
|
||||
"singularity" = 'sound/vox_fem/singularity.ogg',
|
||||
"six" = 'sound/vox_fem/six.ogg',
|
||||
"sixteen" = 'sound/vox_fem/sixteen.ogg',
|
||||
"sixty" = 'sound/vox_fem/sixty.ogg',
|
||||
"slime" = 'sound/vox_fem/slime.ogg',
|
||||
"slow" = 'sound/vox_fem/slow.ogg',
|
||||
"solar" = 'sound/vox_fem/solar.ogg',
|
||||
"solars" = 'sound/vox_fem/solars.ogg',
|
||||
"soldier" = 'sound/vox_fem/soldier.ogg',
|
||||
"some" = 'sound/vox_fem/some.ogg',
|
||||
"someone" = 'sound/vox_fem/someone.ogg',
|
||||
"something" = 'sound/vox_fem/something.ogg',
|
||||
"son" = 'sound/vox_fem/son.ogg',
|
||||
"sorry" = 'sound/vox_fem/sorry.ogg',
|
||||
"south" = 'sound/vox_fem/south.ogg',
|
||||
"squad" = 'sound/vox_fem/squad.ogg',
|
||||
"square" = 'sound/vox_fem/square.ogg',
|
||||
"ss13" = 'sound/vox_fem/ss13.ogg',
|
||||
"stairway" = 'sound/vox_fem/stairway.ogg',
|
||||
"starboard" = 'sound/vox_fem/starboard.ogg',
|
||||
"station" = 'sound/vox_fem/station.ogg',
|
||||
"status" = 'sound/vox_fem/status.ogg',
|
||||
"sterile" = 'sound/vox_fem/sterile.ogg',
|
||||
"sterilization" = 'sound/vox_fem/sterilization.ogg',
|
||||
"storage" = 'sound/vox_fem/storage.ogg',
|
||||
"stuck" = 'sound/vox_fem/stuck.ogg',
|
||||
"sub" = 'sound/vox_fem/sub.ogg',
|
||||
"subsurface" = 'sound/vox_fem/subsurface.ogg',
|
||||
"sudden" = 'sound/vox_fem/sudden.ogg',
|
||||
"suffer" = 'sound/vox_fem/suffer.ogg',
|
||||
"suit" = 'sound/vox_fem/suit.ogg',
|
||||
"superconducting" = 'sound/vox_fem/superconducting.ogg',
|
||||
"supercooled" = 'sound/vox_fem/supercooled.ogg',
|
||||
"supply" = 'sound/vox_fem/supply.ogg',
|
||||
"surface" = 'sound/vox_fem/surface.ogg',
|
||||
"surrender" = 'sound/vox_fem/surrender.ogg',
|
||||
"surround" = 'sound/vox_fem/surround.ogg',
|
||||
"surrounded" = 'sound/vox_fem/surrounded.ogg',
|
||||
"switch" = 'sound/vox_fem/switch.ogg',
|
||||
"syndicate" = 'sound/vox_fem/syndicate.ogg',
|
||||
"system" = 'sound/vox_fem/system.ogg',
|
||||
"systems" = 'sound/vox_fem/systems.ogg',
|
||||
"t" = 'sound/vox_fem/t.ogg',
|
||||
"tactical" = 'sound/vox_fem/tactical.ogg',
|
||||
"take" = 'sound/vox_fem/take.ogg',
|
||||
"talk" = 'sound/vox_fem/talk.ogg',
|
||||
"tango" = 'sound/vox_fem/tango.ogg',
|
||||
"tank" = 'sound/vox_fem/tank.ogg',
|
||||
"target" = 'sound/vox_fem/target.ogg',
|
||||
"team" = 'sound/vox_fem/team.ogg',
|
||||
"temperature" = 'sound/vox_fem/temperature.ogg',
|
||||
"temporal" = 'sound/vox_fem/temporal.ogg',
|
||||
"ten" = 'sound/vox_fem/ten.ogg',
|
||||
"terminal" = 'sound/vox_fem/terminal.ogg',
|
||||
"terminated" = 'sound/vox_fem/terminated.ogg',
|
||||
"termination" = 'sound/vox_fem/termination.ogg',
|
||||
"test" = 'sound/vox_fem/test.ogg',
|
||||
"that" = 'sound/vox_fem/that.ogg',
|
||||
"the" = 'sound/vox_fem/the.ogg',
|
||||
"then" = 'sound/vox_fem/then.ogg',
|
||||
"there" = 'sound/vox_fem/there.ogg',
|
||||
"third" = 'sound/vox_fem/third.ogg',
|
||||
"thirteen" = 'sound/vox_fem/thirteen.ogg',
|
||||
"thirty" = 'sound/vox_fem/thirty.ogg',
|
||||
"this" = 'sound/vox_fem/this.ogg',
|
||||
"those" = 'sound/vox_fem/those.ogg',
|
||||
"thousand" = 'sound/vox_fem/thousand.ogg',
|
||||
"threat" = 'sound/vox_fem/threat.ogg',
|
||||
"three" = 'sound/vox_fem/three.ogg',
|
||||
"through" = 'sound/vox_fem/through.ogg',
|
||||
"tide" = 'sound/vox_fem/tide.ogg',
|
||||
"time" = 'sound/vox_fem/time.ogg',
|
||||
"to" = 'sound/vox_fem/to.ogg',
|
||||
"top" = 'sound/vox_fem/top.ogg',
|
||||
"topside" = 'sound/vox_fem/topside.ogg',
|
||||
"touch" = 'sound/vox_fem/touch.ogg',
|
||||
"towards" = 'sound/vox_fem/towards.ogg',
|
||||
"toxins" = 'sound/vox_fem/toxins.ogg',
|
||||
"track" = 'sound/vox_fem/track.ogg',
|
||||
"train" = 'sound/vox_fem/train.ogg',
|
||||
"traitor" = 'sound/vox_fem/traitor.ogg',
|
||||
"transportation" = 'sound/vox_fem/transportation.ogg',
|
||||
"truck" = 'sound/vox_fem/truck.ogg',
|
||||
"tunnel" = 'sound/vox_fem/tunnel.ogg',
|
||||
"turn" = 'sound/vox_fem/turn.ogg',
|
||||
"turret" = 'sound/vox_fem/turret.ogg',
|
||||
"twelve" = 'sound/vox_fem/twelve.ogg',
|
||||
"twenty" = 'sound/vox_fem/twenty.ogg',
|
||||
"two" = 'sound/vox_fem/two.ogg',
|
||||
"u" = 'sound/vox_fem/u.ogg',
|
||||
"unauthorized" = 'sound/vox_fem/unauthorized.ogg',
|
||||
"under" = 'sound/vox_fem/under.ogg',
|
||||
"uniform" = 'sound/vox_fem/uniform.ogg',
|
||||
"unlocked" = 'sound/vox_fem/unlocked.ogg',
|
||||
"until" = 'sound/vox_fem/until.ogg',
|
||||
"up" = 'sound/vox_fem/up.ogg',
|
||||
"update" = 'sound/vox_fem/update.ogg',
|
||||
"updated" = 'sound/vox_fem/updated.ogg',
|
||||
"updating" = 'sound/vox_fem/updating.ogg',
|
||||
"upload" = 'sound/vox_fem/upload.ogg',
|
||||
"upper" = 'sound/vox_fem/upper.ogg',
|
||||
"uranium" = 'sound/vox_fem/uranium.ogg',
|
||||
"us" = 'sound/vox_fem/us.ogg',
|
||||
"usa" = 'sound/vox_fem/usa.ogg',
|
||||
"use" = 'sound/vox_fem/use.ogg',
|
||||
"used" = 'sound/vox_fem/used.ogg',
|
||||
"user" = 'sound/vox_fem/user.ogg',
|
||||
"v" = 'sound/vox_fem/v.ogg',
|
||||
"vacate" = 'sound/vox_fem/vacate.ogg',
|
||||
"valid" = 'sound/vox_fem/valid.ogg',
|
||||
"vapor" = 'sound/vox_fem/vapor.ogg',
|
||||
"vent" = 'sound/vox_fem/vent.ogg',
|
||||
"ventilation" = 'sound/vox_fem/ventilation.ogg',
|
||||
"victor" = 'sound/vox_fem/victor.ogg',
|
||||
"violated" = 'sound/vox_fem/violated.ogg',
|
||||
"violation" = 'sound/vox_fem/violation.ogg',
|
||||
"virology" = 'sound/vox_fem/virology.ogg',
|
||||
"voltage" = 'sound/vox_fem/voltage.ogg',
|
||||
"vox" = 'sound/vox_fem/vox.ogg',
|
||||
"vox_login" = 'sound/vox_fem/vox_login.ogg',
|
||||
"voxtest" = 'sound/vox_fem/voxtest.ogg',
|
||||
"voxtest2" = 'sound/vox_fem/voxtest2.ogg',
|
||||
"w" = 'sound/vox_fem/w.ogg',
|
||||
"walk" = 'sound/vox_fem/walk.ogg',
|
||||
"wall" = 'sound/vox_fem/wall.ogg',
|
||||
"wanker" = 'sound/vox_fem/wanker.ogg',
|
||||
"want" = 'sound/vox_fem/want.ogg',
|
||||
"wanted" = 'sound/vox_fem/wanted.ogg',
|
||||
"warm" = 'sound/vox_fem/warm.ogg',
|
||||
"warn" = 'sound/vox_fem/warn.ogg',
|
||||
"warning" = 'sound/vox_fem/warning.ogg',
|
||||
"waste" = 'sound/vox_fem/waste.ogg',
|
||||
"water" = 'sound/vox_fem/water.ogg',
|
||||
"we" = 'sound/vox_fem/we.ogg',
|
||||
"weapon" = 'sound/vox_fem/weapon.ogg',
|
||||
"welcome" = 'sound/vox_fem/welcome.ogg',
|
||||
"west" = 'sound/vox_fem/west.ogg',
|
||||
"whiskey" = 'sound/vox_fem/whiskey.ogg',
|
||||
"white" = 'sound/vox_fem/white.ogg',
|
||||
"wilco" = 'sound/vox_fem/wilco.ogg',
|
||||
"will" = 'sound/vox_fem/will.ogg',
|
||||
"with" = 'sound/vox_fem/with.ogg',
|
||||
"without" = 'sound/vox_fem/without.ogg',
|
||||
"woody" = 'sound/vox_fem/woody.ogg',
|
||||
"woop" = 'sound/vox/woop.wav',
|
||||
"x" = 'sound/vox_fem/x.ogg',
|
||||
"xeno" = 'sound/vox_fem/xeno.ogg',
|
||||
"xenobiology" = 'sound/vox_fem/xenobiology.ogg',
|
||||
"xenomorph" = 'sound/vox_fem/xenomorph.ogg',
|
||||
"xenomorphs" = 'sound/vox_fem/xenomorphs.ogg',
|
||||
"y" = 'sound/vox_fem/y.ogg',
|
||||
"yankee" = 'sound/vox_fem/yankee.ogg',
|
||||
"yards" = 'sound/vox_fem/yards.ogg',
|
||||
"year" = 'sound/vox_fem/year.ogg',
|
||||
"yellow" = 'sound/vox_fem/yellow.ogg',
|
||||
"yes" = 'sound/vox_fem/yes.ogg',
|
||||
"you" = 'sound/vox_fem/you.ogg',
|
||||
"your" = 'sound/vox_fem/your.ogg',
|
||||
"yourself" = 'sound/vox_fem/yourself.ogg',
|
||||
"z" = 'sound/vox_fem/z.ogg',
|
||||
"zero" = 'sound/vox_fem/zero.ogg',
|
||||
"zone" = 'sound/vox_fem/zone.ogg',
|
||||
"zulu" = 'sound/vox_fem/zulu.ogg',
|
||||
)
|
||||
@@ -20,6 +20,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
var/atmosalm = 0
|
||||
var/poweralm = 1
|
||||
var/party = null
|
||||
var/radalert = 0
|
||||
level = null
|
||||
name = "Space"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
@@ -247,6 +248,21 @@ proc/process_ghost_teleport_locs()
|
||||
/area/shuttle/prison/prison
|
||||
icon_state = "shuttle2"
|
||||
|
||||
/area/shuttle/siberia
|
||||
name = "\improper Labor Camp Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
|
||||
/area/shuttle/siberia/station
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/siberia/outpost
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/transport1/centcom
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Transport Shuttle Centcom"
|
||||
|
||||
|
||||
/area/shuttle/specops/centcom
|
||||
name = "\improper Special Ops Shuttle"
|
||||
icon_state = "shuttlered"
|
||||
@@ -1196,6 +1212,10 @@ proc/process_ghost_teleport_locs()
|
||||
name = "\improper Prison Wing"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/processing
|
||||
name = "\improper Prisoner Processing"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/warden
|
||||
name = "\improper Warden"
|
||||
icon_state = "Warden"
|
||||
|
||||
+21
-2
@@ -156,6 +156,22 @@
|
||||
updateicon()
|
||||
return
|
||||
|
||||
/area/proc/radiation_alert()
|
||||
if(name == "Space")
|
||||
return
|
||||
if(!radalert)
|
||||
radalert = 1
|
||||
updateicon()
|
||||
return
|
||||
|
||||
/area/proc/reset_radiation_alert()
|
||||
if(name == "Space")
|
||||
return
|
||||
if(radalert)
|
||||
radalert = 0
|
||||
updateicon()
|
||||
return
|
||||
|
||||
/area/proc/partyalert()
|
||||
if(name == "Space") //no parties in space!!!
|
||||
return
|
||||
@@ -180,8 +196,11 @@
|
||||
return
|
||||
|
||||
/area/proc/updateicon()
|
||||
if ((fire || eject || party) && ((!requires_power)?(!requires_power):power_environ))//If it doesn't require power, can still activate this proc.
|
||||
if(fire && !eject && !party)
|
||||
if ((fire || eject || party || radalert) && ((!requires_power)?(!requires_power):power_environ))//If it doesn't require power, can still activate this proc.
|
||||
// Highest priority at the top.
|
||||
if(radalert && !fire)
|
||||
icon_state = "radiation"
|
||||
else if(fire && !radalert && !eject && !party)
|
||||
icon_state = "blue"
|
||||
/*else if(atmosalm && !fire && !eject && !party)
|
||||
icon_state = "bluenew"*/
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
|
||||
|
||||
var/global/list/space_surprises = list( /obj/item/clothing/mask/facehugger =4,
|
||||
/obj/item/weapon/pickaxe/silver =4,
|
||||
/obj/item/weapon/pickaxe/drill =4,
|
||||
|
||||
@@ -91,9 +91,6 @@
|
||||
/atom/proc/CheckExit()
|
||||
return 1
|
||||
|
||||
/atom/proc/HasEntered(atom/movable/AM as mob|obj)
|
||||
return
|
||||
|
||||
/atom/proc/HasProximity(atom/movable/AM as mob|obj)
|
||||
return
|
||||
|
||||
|
||||
@@ -22,6 +22,11 @@
|
||||
src.last_move = get_dir(A, src.loc)
|
||||
return
|
||||
|
||||
// Previously known as Crossed()
|
||||
// This is automatically called when something enters your square
|
||||
/atom/movable/Crossed(atom/movable/AM)
|
||||
return
|
||||
|
||||
/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes)
|
||||
if(src.throwing)
|
||||
src.throw_impact(A)
|
||||
@@ -41,6 +46,8 @@
|
||||
loc.Exited(src)
|
||||
loc = destination
|
||||
loc.Entered(src)
|
||||
for(var/atom/movable/AM in loc)
|
||||
AM.Crossed(src)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
name = "changeling"
|
||||
config_tag = "changeling"
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield")
|
||||
required_players = 2
|
||||
required_players_secret = 10
|
||||
required_enemies = 1
|
||||
|
||||
@@ -74,7 +74,7 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
name = "Silence Sting"
|
||||
desc = "We silently sting a human, completely silencing them for a short time."
|
||||
helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and cannot."
|
||||
genomecost = 2
|
||||
genomecost = 3
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_silence_sting
|
||||
|
||||
@@ -103,7 +103,7 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
/datum/power/changeling/paralysis_sting
|
||||
name = "Paralysis Sting"
|
||||
desc = "We silently sting a human, paralyzing them for a short time."
|
||||
genomecost = 3
|
||||
genomecost = 4
|
||||
verbpath = /mob/proc/changeling_paralysis_sting
|
||||
|
||||
/datum/power/changeling/LSDSting
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/datum/game_mode/cult
|
||||
name = "cult"
|
||||
config_tag = "cult"
|
||||
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain")
|
||||
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield")
|
||||
protected_jobs = list()
|
||||
required_players = 5
|
||||
required_players_secret = 15
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/gateway/HasEntered(AM as mob|obj)
|
||||
/obj/effect/gateway/Crossed(AM as mob|obj)
|
||||
spawn(0)
|
||||
return
|
||||
return
|
||||
@@ -216,8 +216,8 @@
|
||||
if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back)
|
||||
if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back)
|
||||
if(synd_mob.backbag == 4) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(synd_mob), slot_back)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/ammo_magazine/a12mm(synd_mob), slot_in_backpack)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/ammo_magazine/a12mm(synd_mob), slot_in_backpack)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m12mm(synd_mob), slot_in_backpack)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m12mm(synd_mob), slot_in_backpack)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), slot_in_backpack)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), slot_belt)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
/datum/game_mode/revolution
|
||||
name = "revolution"
|
||||
config_tag = "revolution"
|
||||
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
|
||||
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield")
|
||||
required_players = 4
|
||||
required_players_secret = 15
|
||||
required_enemies = 3
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
name = "traitor"
|
||||
config_tag = "traitor"
|
||||
restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")//AI", Currently out of the list as malf does not work for shit
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield")//AI", Currently out of the list as malf does not work for shit
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
recommended_enemies = 4
|
||||
|
||||
@@ -26,21 +26,21 @@
|
||||
if("laser")
|
||||
new /obj/item/weapon/gun/energy/laser(get_turf(H))
|
||||
if("revolver")
|
||||
new /obj/item/weapon/gun/projectile(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/revolver(get_turf(H))
|
||||
if("detective")
|
||||
new /obj/item/weapon/gun/projectile/detective(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/revolver/detective(get_turf(H))
|
||||
if("smg")
|
||||
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
|
||||
if("nuclear")
|
||||
new /obj/item/weapon/gun/energy/gun/nuclear(get_turf(H))
|
||||
if("deagle")
|
||||
new /obj/item/weapon/gun/projectile/deagle/camo(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/automatic/deagle/camo(get_turf(H))
|
||||
if("gyrojet")
|
||||
new /obj/item/weapon/gun/projectile/gyropistol(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/automatic/gyropistol(get_turf(H))
|
||||
if("pulse")
|
||||
new /obj/item/weapon/gun/energy/pulse_rifle(get_turf(H))
|
||||
if("silenced")
|
||||
new /obj/item/weapon/gun/projectile/pistol(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol(get_turf(H))
|
||||
new /obj/item/weapon/silencer(get_turf(H))
|
||||
if("cannon")
|
||||
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
|
||||
@@ -51,7 +51,7 @@
|
||||
if("combatshotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/pump/combat(get_turf(H))
|
||||
if("mateba")
|
||||
new /obj/item/weapon/gun/projectile/mateba(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/revolver/mateba(get_turf(H))
|
||||
if("smg")
|
||||
new /obj/item/weapon/gun/projectile/automatic(get_turf(H))
|
||||
if("uzi")
|
||||
|
||||
@@ -86,6 +86,12 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
var/datum/organ/external/affected = H.organs_by_name["head"]
|
||||
affected.implants += L
|
||||
L.part = affected
|
||||
return 1
|
||||
|
||||
|
||||
@@ -130,6 +136,9 @@
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
var/datum/organ/external/affected = H.organs_by_name["head"]
|
||||
affected.implants += L
|
||||
L.part = affected
|
||||
return 1
|
||||
|
||||
/datum/job/blueshield
|
||||
@@ -173,4 +182,7 @@
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
var/datum/organ/external/affected = H.organs_by_name["head"]
|
||||
affected.implants += L
|
||||
L.part = affected
|
||||
return 1
|
||||
@@ -10,7 +10,6 @@
|
||||
selection_color = "#dddddd"
|
||||
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
|
||||
minimal_access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
|
||||
alt_titles = list("Counselor","Pastor","Space Shaman")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -34,7 +33,7 @@
|
||||
|
||||
switch(lowertext(new_religion))
|
||||
if("christianity")
|
||||
B.name = pick("The Holy Bible","The Dead Sea Scrolls")
|
||||
B.name = pick("The Holy Bible")
|
||||
if("satanism")
|
||||
B.name = "The Unholy Bible"
|
||||
if("cthulu")
|
||||
@@ -48,7 +47,7 @@
|
||||
if("imperium")
|
||||
B.name = "Uplifting Primer"
|
||||
if("toolboxia")
|
||||
B.name = "Toolbox Manifesto"
|
||||
B.name = "Toolbox Manifesto Robusto"
|
||||
if("homosexuality")
|
||||
B.name = "Guys Gone Wild"
|
||||
if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
supervisors = "your laws and the AI" //Nodrak
|
||||
selection_color = "#ddffdd"
|
||||
minimal_player_age = 21
|
||||
alt_titles = list("Android", "Robot")
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
|
||||
var/datum/gas_mixture/gas = location.remove_air(0.25*environment.total_moles)
|
||||
var/heat_capacity = gas.heat_capacity()
|
||||
var/energy_used = max( abs( heat_capacity*(gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE)
|
||||
var/energy_used = min( abs( heat_capacity*(gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE)
|
||||
|
||||
//Use power. Assuming that each power unit represents 1000 watts....
|
||||
use_power(energy_used/1000, ENVIRON)
|
||||
|
||||
@@ -32,7 +32,7 @@ var/global/list/autolathe_recipes = list( \
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker/large(), \
|
||||
new /obj/item/weapon/storage/box/blanks(), \
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(), \
|
||||
new /obj/item/ammo_magazine/c38(), \
|
||||
new /obj/item/ammo_box/c38(), \
|
||||
new /obj/item/device/taperecorder(), \
|
||||
new /obj/item/device/assembly/igniter(), \
|
||||
new /obj/item/device/assembly/signaler(), \
|
||||
@@ -52,7 +52,7 @@ var/global/list/autolathe_recipes_hidden = list( \
|
||||
new /obj/item/device/radio/electropack(), \
|
||||
new /obj/item/weapon/weldingtool/largetank(), \
|
||||
new /obj/item/weapon/handcuffs(), \
|
||||
new /obj/item/ammo_magazine/a357(), \
|
||||
new /obj/item/ammo_box/a357(), \
|
||||
new /obj/item/ammo_casing/shotgun(), \
|
||||
new /obj/item/ammo_casing/shotgun/dart(), \
|
||||
/* new /obj/item/weapon/shield/riot(), */ \
|
||||
|
||||
@@ -798,7 +798,7 @@
|
||||
return get_turf(src)
|
||||
|
||||
|
||||
// called from mob/living/carbon/human/HasEntered()
|
||||
// called from mob/living/carbon/human/Crossed()
|
||||
// when mulebot is in the same loc
|
||||
/obj/machinery/bot/mulebot/proc/RunOver(var/mob/living/carbon/human/H)
|
||||
src.visible_message("\red [src] drives over [H]!")
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
var/timeleft = 60
|
||||
var/stop = 0.0
|
||||
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
|
||||
var/obj/item/weapon/card/id/prisoner/inserted_id
|
||||
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
@@ -31,6 +32,14 @@
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
|
||||
else if(screen == 1)
|
||||
if(istype(inserted_id))
|
||||
var/p = inserted_id:points
|
||||
var/g = inserted_id:goal
|
||||
dat += text("<A href='?src=\ref[src];id=1'>[inserted_id]</A><br>")
|
||||
dat += text("Collectd Points: [p]. <A href='?src=\ref[src];id=2'>Reset.</A><br>")
|
||||
dat += text("Card goal: [g]. <A href='?src=\ref[src];id=3'>Set </A><br>")
|
||||
else
|
||||
dat += text("<A href='?src=\ref[src];id=0'>Insert Prisoner ID.</A><br>")
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/weapon/implant/chem/C in world)
|
||||
@@ -76,6 +85,24 @@
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["id"])
|
||||
switch(href_list["id"])
|
||||
if("0")
|
||||
var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand()
|
||||
if(istype(I))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
inserted_id = I
|
||||
else usr << "\red No valid ID."
|
||||
if("1")
|
||||
inserted_id.loc = get_step(src,get_turf(usr))
|
||||
inserted_id = null
|
||||
if("2")
|
||||
inserted_id.points = 0
|
||||
if("3")
|
||||
var/num = round(input(usr, "Choose prisoner's goal:", "Input an Integer", null) as num|null)
|
||||
if(num >= 0)
|
||||
inserted_id.goal = num
|
||||
if(href_list["inject1"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
|
||||
if(I) I.activate(1)
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
var/id = 1.0
|
||||
explosion_resistance = 25
|
||||
|
||||
/obj/machinery/door/poddoor/preopen
|
||||
icon_state = "open"
|
||||
density = 0
|
||||
opacity = 0
|
||||
|
||||
/obj/machinery/door/poddoor/four_tile_ver/
|
||||
name = "Large Pod Door"
|
||||
icon = 'icons/obj/doors/1x4blast_vert.dmi'
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
|
||||
/*
|
||||
//Allow you to push disposal pipes into it (for those with density 1)
|
||||
/obj/machinery/pipedispenser/disposal/HasEntered(var/obj/structure/disposalconstruct/pipe as obj)
|
||||
/obj/machinery/pipedispenser/disposal/Crossed(var/obj/structure/disposalconstruct/pipe as obj)
|
||||
if(istype(pipe) && !pipe.anchored)
|
||||
del(pipe)
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(cooldown == 1)
|
||||
return
|
||||
|
||||
// HasEntered didn't like people lying down.
|
||||
// Crossed didn't like people lying down.
|
||||
if(ishuman(AM))
|
||||
// Only humans can enter from the west side, while lying down.
|
||||
var/move_dir = get_dir(loc, AM.loc)
|
||||
|
||||
@@ -157,6 +157,13 @@
|
||||
coin = W
|
||||
user << "\blue You insert the [W] into the [src]"
|
||||
return
|
||||
|
||||
else if(src.panel_open)
|
||||
for(var/datum/data/vending_product/R in product_records)
|
||||
if(istype(W, R.product_path))
|
||||
stock(R, user)
|
||||
del(W)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/card) && currently_vending)
|
||||
//attempt to connect to a new db, and if that doesn't work then fail
|
||||
if(!linked_db)
|
||||
@@ -169,6 +176,9 @@
|
||||
usr << "\icon[src]<span class='warning'>Unable to connect to linked account.</span>"
|
||||
else
|
||||
usr << "\icon[src]<span class='warning'>Unable to connect to accounts database.</span>"
|
||||
|
||||
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -428,6 +438,14 @@
|
||||
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user)
|
||||
if(src.panel_open)
|
||||
user << "\blue You stock the [src] with \a [R.product_name]"
|
||||
R.amount++
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
/obj/machinery/vending/process()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
@@ -44,7 +44,10 @@
|
||||
/obj/item/robot_parts/l_arm,
|
||||
/obj/item/robot_parts/r_arm,
|
||||
/obj/item/robot_parts/l_leg,
|
||||
/obj/item/robot_parts/r_leg,
|
||||
/obj/item/robot_parts/r_leg
|
||||
),
|
||||
|
||||
"Robot Repair"=list(
|
||||
/obj/item/robot_parts/robot_component/binary_communication_device,
|
||||
/obj/item/robot_parts/robot_component/radio,
|
||||
/obj/item/robot_parts/robot_component/actuator,
|
||||
|
||||
@@ -331,7 +331,7 @@
|
||||
var/obj/O = obstacle
|
||||
if(istype(O, /obj/effect/portal)) //derpfix
|
||||
src.anchored = 0
|
||||
O.HasEntered(src)
|
||||
O.Crossed(src)
|
||||
spawn(0)//countering portal teleport spawn(0), hurr
|
||||
src.anchored = 1
|
||||
else if(!O.anchored)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
spawn(DRYING_TIME * (amount+1))
|
||||
dry()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/HasEntered(mob/living/carbon/human/perp)
|
||||
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
||||
if (!istype(perp))
|
||||
return
|
||||
if(amount < 1)
|
||||
@@ -77,7 +77,7 @@
|
||||
icon_state = "xfloor1"
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
|
||||
/obj/effect/decal/cleanable/blood/green/HasEntered(mob/living/carbon/human/perp)
|
||||
/obj/effect/decal/cleanable/blood/green/Crossed(mob/living/carbon/human/perp)
|
||||
if (!istype(perp))
|
||||
return
|
||||
if(amount < 1)
|
||||
|
||||
@@ -331,7 +331,7 @@ steam.start() -- spawns the effect
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/effect/bad_smoke/HasEntered(mob/living/carbon/M as mob )
|
||||
/obj/effect/effect/bad_smoke/Crossed(mob/living/carbon/M as mob )
|
||||
..()
|
||||
if(istype(M, /mob/living/carbon))
|
||||
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & MASKINTERNALS))
|
||||
@@ -423,7 +423,7 @@ steam.start() -- spawns the effect
|
||||
|
||||
return
|
||||
|
||||
/obj/effect/effect/chem_smoke/HasEntered(mob/living/carbon/M as mob )
|
||||
/obj/effect/effect/chem_smoke/Crossed(mob/living/carbon/M as mob )
|
||||
..()
|
||||
reagents.reaction(M)
|
||||
|
||||
@@ -553,7 +553,7 @@ steam.start() -- spawns the effect
|
||||
M.coughedtime = 0
|
||||
return
|
||||
|
||||
/obj/effect/effect/sleep_smoke/HasEntered(mob/living/carbon/M as mob )
|
||||
/obj/effect/effect/sleep_smoke/Crossed(mob/living/carbon/M as mob )
|
||||
..()
|
||||
if(istype(M, /mob/living/carbon))
|
||||
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & MASKINTERNALS))
|
||||
@@ -642,7 +642,7 @@ steam.start() -- spawns the effect
|
||||
R.updatehealth()
|
||||
return
|
||||
|
||||
/obj/effect/effect/mustard_gas/HasEntered(mob/living/carbon/human/R as mob )
|
||||
/obj/effect/effect/mustard_gas/Crossed(mob/living/carbon/human/R as mob )
|
||||
..()
|
||||
if (istype(R, /mob/living/carbon/human))
|
||||
if (R.internal != null && usr.wear_mask && (R.wear_mask.flags & MASKINTERNALS) && R.wear_suit != null && !istype(R.wear_suit, /obj/item/clothing/suit/storage/labcoat) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket && !istype(R.wear_suit, /obj/item/clothing/suit/armor)))
|
||||
@@ -882,7 +882,7 @@ steam.start() -- spawns the effect
|
||||
delete()
|
||||
|
||||
|
||||
/obj/effect/effect/foam/HasEntered(var/atom/movable/AM)
|
||||
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
|
||||
if(metal)
|
||||
return
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/effect/mine/New()
|
||||
icon_state = "uglyminearmed"
|
||||
|
||||
/obj/effect/mine/HasEntered(AM as mob|obj)
|
||||
/obj/effect/mine/Crossed(AM as mob|obj)
|
||||
Bumped(AM)
|
||||
|
||||
/obj/effect/mine/Bumped(mob/M as mob|obj)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/portal/HasEntered(AM as mob|obj)
|
||||
/obj/effect/portal/Crossed(AM as mob|obj)
|
||||
spawn(0)
|
||||
src.teleport(AM)
|
||||
return
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/obj/effect/step_trigger/proc/Trigger(var/atom/movable/A)
|
||||
return 0
|
||||
|
||||
/obj/effect/step_trigger/HasEntered(H as mob|obj)
|
||||
/obj/effect/step_trigger/Crossed(H as mob|obj)
|
||||
..()
|
||||
if(!H)
|
||||
return
|
||||
|
||||
@@ -1123,7 +1123,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
src.id.loc = get_turf(src.loc)
|
||||
..()
|
||||
|
||||
/obj/item/device/pda/clown/HasEntered(AM as mob|obj) //Clown PDA is slippery.
|
||||
/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery.
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/M = AM
|
||||
if ((istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) || M.m_intent == "walk")
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/shard/HasEntered(AM as mob|obj)
|
||||
/obj/item/weapon/shard/Crossed(AM as mob|obj)
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
M << "\red <B>You step in the broken glass!</B>"
|
||||
|
||||
@@ -394,7 +394,7 @@
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
del(src)
|
||||
|
||||
/obj/item/toy/snappop/HasEntered(H as mob|obj)
|
||||
/obj/item/toy/snappop/Crossed(H as mob|obj)
|
||||
if((ishuman(H))) //i guess carp and shit shouldn't set them off
|
||||
var/mob/living/carbon/M = H
|
||||
if(M.m_intent == "run")
|
||||
|
||||
@@ -277,4 +277,45 @@
|
||||
assignment = "General"
|
||||
New()
|
||||
access = get_all_centcom_access()
|
||||
..()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/prisoner
|
||||
name = "prisoner ID card"
|
||||
desc = "You are a number, you are not a free man."
|
||||
icon_state = "orange"
|
||||
item_state = "orange-id"
|
||||
assignment = "Prisoner"
|
||||
registered_name = "Scum"
|
||||
var/goal = 0 //How far from freedom?
|
||||
var/points = 0
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/attack_self(mob/user as mob)
|
||||
usr << "You have accumulated [points] out of the [goal] points you need for freedom."
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/one
|
||||
name = "Prisoner #13-001"
|
||||
registered_name = "Prisoner #13-001"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/two
|
||||
name = "Prisoner #13-002"
|
||||
registered_name = "Prisoner #13-002"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/three
|
||||
name = "Prisoner #13-003"
|
||||
registered_name = "Prisoner #13-003"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/four
|
||||
name = "Prisoner #13-004"
|
||||
registered_name = "Prisoner #13-004"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/five
|
||||
name = "Prisoner #13-005"
|
||||
registered_name = "Prisoner #13-005"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/six
|
||||
name = "Prisoner #13-006"
|
||||
registered_name = "Prisoner #13-006"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/seven
|
||||
name = "Prisoner #13-007"
|
||||
registered_name = "Prisoner #13-007"
|
||||
@@ -8,7 +8,7 @@
|
||||
/*
|
||||
* Banana Peals
|
||||
*/
|
||||
/obj/item/weapon/bananapeel/HasEntered(AM as mob|obj)
|
||||
/obj/item/weapon/bananapeel/Crossed(AM as mob|obj)
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/M = AM
|
||||
if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
|
||||
@@ -23,7 +23,7 @@
|
||||
/*
|
||||
* Soap
|
||||
*/
|
||||
/obj/item/weapon/soap/HasEntered(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
|
||||
/obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/M = AM
|
||||
if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
var/turf/T
|
||||
|
||||
/obj/item/weapon/grenade/bananade
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
HasEntered(AM as mob|obj)
|
||||
Crossed(AM as mob|obj)
|
||||
var/burned = rand(2,5)
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/M = AM
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
"/obj/item/device/flash",
|
||||
"/obj/item/clothing/glasses",
|
||||
"/obj/item/ammo_casing/shotgun",
|
||||
"/obj/item/ammo_magazine",
|
||||
"/obj/item/ammo_box",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/donut/normal",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/donut/jelly",
|
||||
"/obj/item/weapon/melee/baton",
|
||||
|
||||
@@ -359,6 +359,21 @@
|
||||
new /obj/item/weapon/card/id(src)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
|
||||
/obj/item/weapon/storage/box/prisoner
|
||||
name = "prisoner IDs"
|
||||
desc = "Take away their last shred of dignity, their name."
|
||||
icon_state = "id"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/card/id/prisoner/one(src)
|
||||
new /obj/item/weapon/card/id/prisoner/two(src)
|
||||
new /obj/item/weapon/card/id/prisoner/three(src)
|
||||
new /obj/item/weapon/card/id/prisoner/four(src)
|
||||
new /obj/item/weapon/card/id/prisoner/five(src)
|
||||
new /obj/item/weapon/card/id/prisoner/six(src)
|
||||
new /obj/item/weapon/card/id/prisoner/seven(src)
|
||||
|
||||
/obj/item/weapon/storage/box/seccarts
|
||||
name = "Spare R.O.B.U.S.T. Cartridges"
|
||||
desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security."
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
return
|
||||
|
||||
if("guns")
|
||||
new /obj/item/weapon/gun/projectile(src)
|
||||
new /obj/item/ammo_magazine/a357(src)
|
||||
new /obj/item/weapon/gun/projectile/revolver(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
return
|
||||
@@ -58,7 +58,7 @@
|
||||
return
|
||||
|
||||
if("smoothoperator")
|
||||
new /obj/item/weapon/gun/projectile/pistol(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
|
||||
new /obj/item/weapon/silencer(src)
|
||||
new /obj/item/weapon/soap/syndie(src)
|
||||
new /obj/item/weapon/storage/bag/trash(src)
|
||||
@@ -132,7 +132,7 @@
|
||||
/obj/item/weapon/storage/box/syndie_kit/conversion/New()
|
||||
..()
|
||||
new /obj/item/weapon/conversion_kit(src)
|
||||
new /obj/item/ammo_magazine/a357(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/greytide
|
||||
|
||||
@@ -284,4 +284,12 @@
|
||||
if(welded)
|
||||
overlays += "welded"
|
||||
else
|
||||
icon_state = icon_opened
|
||||
icon_state = icon_opened
|
||||
|
||||
// Objects that try to exit a locker by stepping were doing so successfully,
|
||||
// and due to an oversight in turf/Enter() were going through walls. That
|
||||
// should be independently resolved, but this is also an interesting twist.
|
||||
/obj/structure/closet/Exit(atom/movable/AM)
|
||||
open()
|
||||
if(AM.loc == src) return 0
|
||||
return 1
|
||||
@@ -257,10 +257,10 @@
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/clothing/suit/armor/det_suit(src)
|
||||
new /obj/item/ammo_magazine/c38(src)
|
||||
new /obj/item/ammo_magazine/c38(src)
|
||||
new /obj/item/ammo_box/c38(src)
|
||||
new /obj/item/ammo_box/c38(src)
|
||||
new /obj/item/weapon/gun/projectile/revolver/detective(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/gun/projectile/detective(src)
|
||||
new /obj/item/clothing/tie/holster/armpit(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
/obj/structure/closet/syndicate/nuclear/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/ammo_magazine/a12mm(src)
|
||||
new /obj/item/ammo_magazine/a12mm(src)
|
||||
new /obj/item/ammo_magazine/a12mm(src)
|
||||
new /obj/item/ammo_magazine/a12mm(src)
|
||||
new /obj/item/ammo_magazine/a12mm(src)
|
||||
new /obj/item/ammo_box/magazine/m12mm(src)
|
||||
new /obj/item/ammo_box/magazine/m12mm(src)
|
||||
new /obj/item/ammo_box/magazine/m12mm(src)
|
||||
new /obj/item/ammo_box/magazine/m12mm(src)
|
||||
new /obj/item/ammo_box/magazine/m12mm(src)
|
||||
new /obj/item/weapon/storage/box/handcuffs(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
/obj/structure/stool/bed/chair/segway
|
||||
name = "security segway"
|
||||
desc = "Gives the illusion of authority."
|
||||
icon = 'icons/obj/vehicles.dmi'
|
||||
icon_state = "sec_seg_idle"
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
var/health = 100
|
||||
var/delay = 4 //Move delay to simulate a speed
|
||||
var/allowMove = 1
|
||||
var/datum/global_iterator/space_move //Handling space movement (i.e. drift forever)
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/New()
|
||||
handle_rotation()
|
||||
space_move = new /datum/global_iterator/space_movement(null,0)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/relaymove(mob/user, direction)
|
||||
if(user.stat || user.stunned || user.weakened || user.paralysis)
|
||||
unbuckle()
|
||||
icon_state = "sec_seg_idle"
|
||||
if(istype(user.l_hand, /obj/item/sec_seg_key) || istype(user.r_hand, /obj/item/sec_seg_key))
|
||||
if(!allowMove)
|
||||
return
|
||||
if(src.space_move.active())
|
||||
return
|
||||
allowMove = 0
|
||||
step(src, direction)
|
||||
update_mob()
|
||||
handle_rotation()
|
||||
if(istype(src.loc, /turf/space))
|
||||
src.space_move.start(list(src,direction))
|
||||
if(istype(src.loc, /turf/simulated))
|
||||
var/turf/simulated/T = src.loc
|
||||
if(T.wet == 2) //Lube! Fall off!
|
||||
playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
buckled_mob.Stun(8)
|
||||
buckled_mob.Weaken(5)
|
||||
unbuckle()
|
||||
step(src, dir)
|
||||
sleep(delay)
|
||||
allowMove = 1
|
||||
else
|
||||
user << "<span class='notice'>Requires key in hand to drive.</span>"
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/Move()
|
||||
. = ..()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src)
|
||||
buckled_mob.loc = loc
|
||||
return .
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/Bump(var/atom/obstacle)
|
||||
if(istype(obstacle, /mob))
|
||||
step(obstacle, src.dir)
|
||||
else
|
||||
obstacle.Bumped(src)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/buckle_mob(mob/M, mob/user)
|
||||
if(M != user || !ismob(M) || get_dist(src, user) > 1 || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon))
|
||||
return
|
||||
|
||||
unbuckle()
|
||||
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M] climbs onto the segway!</span>",\
|
||||
"<span class='notice'>You climb onto the segway!</span>")
|
||||
M.buckled = src
|
||||
M.loc = loc
|
||||
M.dir = dir
|
||||
M.update_canmove()
|
||||
buckled_mob = M
|
||||
update_mob()
|
||||
add_fingerprint(user)
|
||||
icon_state = "sec_seg_move"
|
||||
buckled_mob.pixel_x = 0
|
||||
buckled_mob.pixel_y = 5
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/unbuckle()
|
||||
if(buckled_mob)
|
||||
buckled_mob.pixel_x = 0
|
||||
buckled_mob.pixel_y = 0
|
||||
..()
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/handle_rotation()
|
||||
if(dir == NORTH)
|
||||
layer = OBJ_LAYER
|
||||
else
|
||||
layer = FLY_LAYER
|
||||
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.loc != loc)
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.buckled = src
|
||||
|
||||
update_mob()
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/proc/update_mob()
|
||||
if(buckled_mob)
|
||||
buckled_mob.dir = dir
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(buckled_mob)
|
||||
return buckled_mob.bullet_act(Proj)
|
||||
else if(istype(Proj, /obj/item/projectile/beam))
|
||||
damage(Proj.damage)
|
||||
|
||||
/obj/structure/stool/bed/chair/segway/proc/damage(amount)
|
||||
health -= amount
|
||||
if(health <= 0)
|
||||
if(buckled_mob)
|
||||
buckled_mob << "The segway was destroyed!"
|
||||
Del()
|
||||
|
||||
/obj/item/sec_seg_key
|
||||
name = "security segway key"
|
||||
desc = "A key for a security segway. You feel the choice of keyring could be more professional."
|
||||
icon = 'icons/obj/vehicles.dmi'
|
||||
icon_state = "keys" //Needs a proper sprite
|
||||
w_class = 1
|
||||
|
||||
/datum/global_iterator/space_movement //moon_theme.mp3
|
||||
delay = 5
|
||||
|
||||
process(var/obj/structure/stool/bed/chair/segway/seg as obj,direction)
|
||||
if(!step(seg, direction))
|
||||
src.stop()
|
||||
@@ -97,7 +97,14 @@ obj/structure/ex_act(severity)
|
||||
if(tube_dirs == null)
|
||||
init_dirs()
|
||||
|
||||
|
||||
/obj/structure/transit_tube/Bumped(mob/AM as mob|obj)
|
||||
var/obj/structure/transit_tube/T = locate() in AM.loc
|
||||
if(T)
|
||||
AM << "<span class='warning'>The tube's support pylons block your way.</span>"
|
||||
return ..()
|
||||
else
|
||||
AM.loc = src.loc
|
||||
AM << "<span class='info'>You slip under the tube.</span>"
|
||||
|
||||
/obj/structure/transit_tube/station/New(loc)
|
||||
..(loc)
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
del(mymist)
|
||||
ismist = 0
|
||||
|
||||
/obj/machinery/shower/HasEntered(atom/movable/O)
|
||||
/obj/machinery/shower/Crossed(atom/movable/O)
|
||||
..()
|
||||
wash(O)
|
||||
if(ismob(O))
|
||||
|
||||
+15
-27
@@ -50,30 +50,27 @@
|
||||
if(movement_disabled && usr.ckey != movement_disabled_exception)
|
||||
usr << "\red Movement is admin-disabled." //This is to identify lag problems
|
||||
return
|
||||
if (!mover || !isturf(mover.loc))
|
||||
if (!mover)
|
||||
return 1
|
||||
|
||||
|
||||
//First, check objects to block exit that are not on the border
|
||||
for(var/obj/obstacle in mover.loc)
|
||||
if(!(obstacle.flags & ON_BORDER) && (mover != obstacle) && (forget != obstacle))
|
||||
if(!obstacle.CheckExit(mover, src))
|
||||
// First, make sure it can leave its square
|
||||
if(isturf(mover.loc))
|
||||
// Nothing but border objects stop you from leaving a tile, only one loop is needed
|
||||
for(var/obj/obstacle in mover.loc)
|
||||
if(!obstacle.CheckExit(mover, src) && obstacle != mover && obstacle != forget)
|
||||
mover.Bump(obstacle, 1)
|
||||
return 0
|
||||
|
||||
//Now, check objects to block exit that are on the border
|
||||
for(var/obj/border_obstacle in mover.loc)
|
||||
if((border_obstacle.flags & ON_BORDER) && (mover != border_obstacle) && (forget != border_obstacle))
|
||||
if(!border_obstacle.CheckExit(mover, src))
|
||||
mover.Bump(border_obstacle, 1)
|
||||
return 0
|
||||
|
||||
var/list/large_dense = list()
|
||||
//Next, check objects to block entry that are on the border
|
||||
for(var/obj/border_obstacle in src)
|
||||
if(border_obstacle.flags & ON_BORDER)
|
||||
for(var/atom/movable/border_obstacle in src)
|
||||
if(border_obstacle.flags&ON_BORDER)
|
||||
if(!border_obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != border_obstacle))
|
||||
mover.Bump(border_obstacle, 1)
|
||||
return 0
|
||||
else
|
||||
large_dense += border_obstacle
|
||||
|
||||
//Then, check the turf itself
|
||||
if (!src.CanPass(mover, src))
|
||||
@@ -81,11 +78,10 @@
|
||||
return 0
|
||||
|
||||
//Finally, check objects/mobs to block entry that are not on the border
|
||||
for(var/atom/movable/obstacle in src)
|
||||
if(obstacle.flags & ~ON_BORDER)
|
||||
if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle))
|
||||
mover.Bump(obstacle, 1)
|
||||
return 0
|
||||
for(var/atom/movable/obstacle in large_dense)
|
||||
if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle))
|
||||
mover.Bump(obstacle, 1)
|
||||
return 0
|
||||
return 1 //Nothing found to block so return success!
|
||||
|
||||
|
||||
@@ -128,14 +124,6 @@
|
||||
M:inertia_dir = 0
|
||||
..()
|
||||
var/objects = 0
|
||||
for(var/atom/A as mob|obj|turf|area in src)
|
||||
if(objects > loopsanity) break
|
||||
objects++
|
||||
spawn( 0 )
|
||||
if ((A && M))
|
||||
A.HasEntered(M, 1)
|
||||
return
|
||||
objects = 0
|
||||
for(var/atom/A as mob|obj|turf|area in range(1))
|
||||
if(objects > loopsanity) break
|
||||
objects++
|
||||
|
||||
@@ -92,7 +92,6 @@ var/list/admin_verbs_fun = list(
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_space_ninja,
|
||||
/client/proc/send_space_ninja,
|
||||
/client/proc/zombie_event, // ZOMBB-B-BIES
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
|
||||
@@ -2032,6 +2032,11 @@
|
||||
feedback_add_details("admin_secrets_fun_used","PB")
|
||||
message_admins("[key_name_admin(usr)] has allowed a prison break", 1)
|
||||
prison_break()
|
||||
if("radiation")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","RAD")
|
||||
message_admins("[key_name_admin(usr)] has started a radiation event", 1)
|
||||
new /datum/event/radiation_storm
|
||||
if("lightout")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","LO")
|
||||
|
||||
@@ -604,7 +604,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store)
|
||||
|
||||
if ("tournament chef") //Steven Seagal FTW
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
|
||||
@@ -718,8 +718,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
for(var/i=3, i>0, i--)
|
||||
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/mateba
|
||||
sec_briefcase.contents += new /obj/item/ammo_magazine/a357
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
|
||||
sec_briefcase.contents += new /obj/item/ammo_box/a357
|
||||
sec_briefcase.contents += new /obj/item/weapon/plastique
|
||||
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
|
||||
|
||||
@@ -900,7 +900,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
|
||||
@@ -140,7 +140,7 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/a357(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
@@ -153,7 +153,7 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/flashbang(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(src), slot_belt)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(src), slot_r_hand)
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_magazine/c45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/c45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
@@ -162,7 +162,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/silenced(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/silenced(src), slot_belt)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(src), slot_r_hand) //Will change to something different at a later time -- Superxpdude
|
||||
|
||||
|
||||
@@ -104,13 +104,13 @@
|
||||
special_assembly.HasProximity(AM)
|
||||
|
||||
|
||||
HasEntered(atom/movable/AM as mob|obj)
|
||||
Crossed(atom/movable/AM as mob|obj)
|
||||
if(a_left)
|
||||
a_left.HasEntered(AM)
|
||||
a_left.Crossed(AM)
|
||||
if(a_right)
|
||||
a_right.HasEntered(AM)
|
||||
a_right.Crossed(AM)
|
||||
if(special_assembly)
|
||||
special_assembly.HasEntered(AM)
|
||||
special_assembly.Crossed(AM)
|
||||
|
||||
|
||||
on_found(mob/finder as mob)
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
hit()
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/HasEntered(atom/movable/AM as mob|obj)
|
||||
/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj)
|
||||
if(istype(AM, /obj/effect/beam))
|
||||
return
|
||||
spawn(0)
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
..()
|
||||
|
||||
|
||||
HasEntered(AM as mob|obj)
|
||||
Crossed(AM as mob|obj)
|
||||
if(armed)
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/H = AM
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
|
||||
//send resources to the client. It's here in its own proc so we can move it around easiliy if need be
|
||||
/client/proc/send_resources()
|
||||
preload_vox()
|
||||
// preload_vox()
|
||||
getFiles(
|
||||
'nano/js/libraries.min.js',
|
||||
'nano/js/nano_update.js',
|
||||
@@ -252,6 +252,7 @@
|
||||
'nano/templates/chem_dispenser.tmpl',
|
||||
'nano/templates/cryo.tmpl',
|
||||
'nano/templates/dna_modifier.tmpl',
|
||||
'nano/templates/geoscanner.tmpl',
|
||||
'nano/templates/air_alarm.tmpl',
|
||||
'nano/images/uiBackground.png',
|
||||
'nano/images/uiIcons16.png',
|
||||
@@ -299,9 +300,5 @@
|
||||
'icons/spideros_icons/sos_11.png',
|
||||
'icons/spideros_icons/sos_12.png',
|
||||
'icons/spideros_icons/sos_13.png',
|
||||
'icons/spideros_icons/sos_14.png',
|
||||
'icons/xenoarch_icons/chart1.jpg',
|
||||
'icons/xenoarch_icons/chart2.jpg',
|
||||
'icons/xenoarch_icons/chart3.jpg',
|
||||
'icons/xenoarch_icons/chart4.jpg'
|
||||
'icons/spideros_icons/sos_14.png'
|
||||
)
|
||||
|
||||
@@ -130,4 +130,5 @@
|
||||
name = "roman sandals"
|
||||
desc = "Sandals with buckled leather straps on it."
|
||||
icon_state = "roman"
|
||||
item_state = "roman"
|
||||
item_state = "roman"
|
||||
species_restricted = null
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/vox
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
|
||||
slowdown = 2
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
permeability_coefficient = 0.02
|
||||
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
slowdown = 1.5
|
||||
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
icon_state = "ert_commander"
|
||||
item_state = "suit-command"
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
permeability_coefficient = 0.02
|
||||
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
slowdown = 1.5
|
||||
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
@@ -77,7 +77,7 @@
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/cell)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/cell)
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
slowdown = 1
|
||||
w_class = 3
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
item_state = "space_suit_syndicate"
|
||||
desc = "Has a tag on it: Totally not property of of a hostile corporation, honest!"
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
permeability_coefficient = 0.01
|
||||
flags = FPRINT | TABLEPASS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
item_state = "det_suit"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
|
||||
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
//Forensics
|
||||
@@ -90,7 +90,7 @@
|
||||
desc = "A forensics technician jacket."
|
||||
item_state = "det_suit"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/red
|
||||
|
||||
@@ -940,27 +940,6 @@
|
||||
name = "well-used stun baton"
|
||||
desc = "A stun baton used for incapacitating targets; there seems to be a bunch of tally marks set into the handle."
|
||||
|
||||
///// Deckard .44 - Callum Leamas - Roaper
|
||||
/obj/item/weapon/gun/projectile/detective/fluff/callum_leamas
|
||||
name = "Deckard .44"
|
||||
desc = "A custom built revolver, based off the semi-popular Detective Special model."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "leamas-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/detective/fluff/callum_leamas/update_icon()
|
||||
|
||||
..()
|
||||
if(loaded.len)
|
||||
icon_state = "leamas-loaded"
|
||||
else
|
||||
icon_state = "leamas-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
|
||||
if(istype(A, /obj/item/ammo_magazine))
|
||||
flick("leamas-reloading",src)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +1,36 @@
|
||||
/datum/event/radiation_storm
|
||||
announceWhen = 1
|
||||
oneShot = 1
|
||||
var/safe_zones = list(
|
||||
/area/maintenance,
|
||||
/area/crew_quarters/sleep,
|
||||
/area/security/brig,
|
||||
/area/shuttle,
|
||||
/area/vox_station,
|
||||
/area/syndicate_station
|
||||
)
|
||||
|
||||
|
||||
/datum/event/radiation_storm/announce()
|
||||
// Don't do anything, we want to pack the announcement with the actual event
|
||||
|
||||
/datum/event/radiation_storm/proc/is_safe_zone(var/area/A)
|
||||
for(var/szt in safe_zones)
|
||||
if(istype(A, szt))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/datum/event/radiation_storm/start()
|
||||
spawn()
|
||||
world << sound('sound/AI/radiation.ogg')
|
||||
command_alert("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert")
|
||||
|
||||
for(var/area/A in world)
|
||||
if(A.z != 1 || is_safe_zone(A))
|
||||
continue
|
||||
A.radiation_alert()
|
||||
|
||||
make_maint_all_access()
|
||||
|
||||
|
||||
@@ -23,9 +44,7 @@
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
continue
|
||||
if(T.z != 1)
|
||||
continue
|
||||
if(istype(T.loc, /area/maintenance) || istype(T.loc, /area/crew_quarters))
|
||||
if(T.z != 1 || is_safe_zone(T.loc))
|
||||
continue
|
||||
|
||||
if(istype(H,/mob/living/carbon/human))
|
||||
@@ -52,6 +71,10 @@
|
||||
|
||||
command_alert("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
|
||||
|
||||
for(var/area/A in world)
|
||||
if(A.z != 1 || is_safe_zone(A))
|
||||
continue
|
||||
A.reset_radiation_alert()
|
||||
|
||||
sleep(600) // Want to give them time to get out of maintenance.
|
||||
|
||||
|
||||
Regular → Executable
+4
-2
@@ -22,7 +22,9 @@
|
||||
var/obj/vent = pick_n_take(vents)
|
||||
|
||||
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","psilocybin","lube",
|
||||
"plantbgone","banana","anti_toxin","space_drugs","hyperzine","holywater","ethanol","hot_coco","pacid")
|
||||
"plantbgone","banana","anti_toxin","space_drugs","hyperzine","holywater","ethanol","hot_coco","pacid",
|
||||
"blood","stoxin","flourine","ryetalyn","thermite","mutagen","oxycodone","fuel","plasma","cryptobiolin",
|
||||
"impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","doctorsdelight","beepskysmash","tricordrazine")
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(pick(gunk), 50)
|
||||
@@ -31,4 +33,4 @@
|
||||
smoke.set_up(R, rand(1, 2), 0, vent, 0, silent = 1)
|
||||
playsound(vent.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
R.delete() //GC the reagents
|
||||
R.delete() //GC the reagents
|
||||
|
||||
@@ -252,7 +252,7 @@ proc/check_panel(mob/M)
|
||||
|
||||
return
|
||||
|
||||
HasEntered(var/mob/M, somenumber)
|
||||
Crossed(var/mob/M, somenumber)
|
||||
if(M == my_target)
|
||||
step_away(src,my_target,2)
|
||||
if(prob(30))
|
||||
@@ -332,7 +332,7 @@ proc/check_panel(mob/M)
|
||||
del(O)
|
||||
return
|
||||
|
||||
var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/a357,\
|
||||
var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_box/a357,\
|
||||
/obj/item/weapon/gun/energy/crossbow, /obj/item/weapon/melee/energy/sword,\
|
||||
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
|
||||
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/turf/simulated/mineral/random/labormineral
|
||||
mineralSpawnChanceList = list("Uranium" = 5, "Iron" = 50, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Plasma" = 25/*, "Adamantine" =5, "Cave" = 1 */) //Don't suffocate the prisoners with caves
|
||||
@@ -0,0 +1,136 @@
|
||||
var/labor_shuttle_tickstomove = 10
|
||||
var/labor_shuttle_moving = 0
|
||||
var/labor_shuttle_location = 0 // 0 = station 13, 1 = labor station
|
||||
|
||||
proc/move_labor_shuttle() //TODO: Security Access only; add moving the shuttle to the station to the release button.
|
||||
|
||||
if(labor_shuttle_moving) return
|
||||
labor_shuttle_moving = 1
|
||||
spawn(labor_shuttle_tickstomove*10)
|
||||
var/area/fromArea
|
||||
var/area/toArea
|
||||
if (labor_shuttle_location == 1)
|
||||
fromArea = locate(/area/shuttle/siberia/outpost)
|
||||
toArea = locate(/area/shuttle/siberia/station)
|
||||
|
||||
else
|
||||
fromArea = locate(/area/shuttle/siberia/station)
|
||||
toArea = locate(/area/shuttle/siberia/outpost)
|
||||
|
||||
var/list/dstturfs = list()
|
||||
var/throwy = world.maxy
|
||||
|
||||
for(var/turf/T in toArea)
|
||||
dstturfs += T
|
||||
if(T.y < throwy)
|
||||
throwy = T.y
|
||||
|
||||
// hey you, get out of the way!
|
||||
for(var/turf/T in dstturfs)
|
||||
// find the turf to move things to
|
||||
var/turf/D = locate(T.x, throwy - 1, 1)
|
||||
//var/turf/E = get_step(D, SOUTH)
|
||||
for(var/atom/movable/AM as mob|obj in T)
|
||||
AM.Move(D)
|
||||
// NOTE: Commenting this out to avoid recreating mass driver glitch
|
||||
/*
|
||||
spawn(0)
|
||||
AM.throw_at(E, 1, 1)
|
||||
return
|
||||
*/
|
||||
|
||||
if(istype(T, /turf/simulated))
|
||||
del(T)
|
||||
|
||||
for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area...
|
||||
bug.gib()
|
||||
|
||||
fromArea.move_contents_to(toArea)
|
||||
if (labor_shuttle_location)
|
||||
labor_shuttle_location = 0
|
||||
else
|
||||
labor_shuttle_location = 1
|
||||
|
||||
for(var/mob/M in toArea)
|
||||
if(M.client)
|
||||
spawn(0)
|
||||
if(M.buckled)
|
||||
shake_camera(M, 3, 1) // buckled, not a lot of shaking
|
||||
else
|
||||
shake_camera(M, 10, 1) // unbuckled, HOLY SHIT SHAKE THE ROOM
|
||||
if(istype(M, /mob/living/carbon))
|
||||
if(!M.buckled)
|
||||
M.Weaken(3)
|
||||
|
||||
labor_shuttle_moving = 0
|
||||
return
|
||||
|
||||
/obj/machinery/computer/labor_shuttle
|
||||
name = "Labor Shuttle Console"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "shuttle"
|
||||
circuit = "/obj/item/weapon/circuitboard/labor_shuttle"
|
||||
var/location = 0 //0 = station, 1 = labor camp
|
||||
req_access = list(access_brig)
|
||||
var/hacked = 0
|
||||
|
||||
/obj/machinery/computer/labor_shuttle/attack_hand(user as mob)
|
||||
if(..(user))
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
var/dat
|
||||
dat = text("<center><A href='?src=\ref[src];move=[1]'>Send Labor Shuttle</A></center>")
|
||||
//user << browse("[dat]", "window=laborshuttle;size=200x100")
|
||||
var/datum/browser/popup = new(user, "laborshuttle", name, 200, 140)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/labor_shuttle/Topic(href, href_list)
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["move"])
|
||||
if(!allowed(usr))
|
||||
usr << "\red Access denied."
|
||||
return
|
||||
if (!labor_shuttle_moving)
|
||||
usr << "\blue Shuttle recieved message and will be sent shortly."
|
||||
move_labor_shuttle()
|
||||
else
|
||||
usr << "\blue Shuttle is already moving."
|
||||
|
||||
/obj/machinery/computer/labor_shuttle/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if (istype(W, /obj/item/weapon/card/emag))
|
||||
src.req_access = list()
|
||||
hacked = 1
|
||||
usr << "You fried the consoles ID checking system. It's now available to everyone!"
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/labor_shuttle/one_way
|
||||
name = "Prisoner Shuttle Console"
|
||||
desc = "A one-way shuttle console, used to summon the shuttle to the labor camp."
|
||||
circuit = "/obj/item/weapon/circuitboard/one_way_shuttle"
|
||||
req_access = list( )
|
||||
|
||||
/obj/machinery/computer/labor_shuttle/one_way/attack_hand(user as mob)
|
||||
if(..(user))
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
var/dat
|
||||
dat = text("<center><A href='?src=\ref[src];move=[1]'>Summon Labor Shuttle</A></center>")
|
||||
//user << browse("[dat]", "window=laborshuttle;size=200x100")
|
||||
var/datum/browser/popup = new(user, "laborshuttle", name, 200, 140)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/labor_shuttle/one_way/Topic(href, href_list)
|
||||
if(href_list["move"] && labor_shuttle_location == 1)
|
||||
usr << "\blue Shuttle is already at the outpost."
|
||||
return
|
||||
..()
|
||||
@@ -0,0 +1,115 @@
|
||||
/**********************Prisoners' Console**************************/
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console
|
||||
name = "Point Claim Console"
|
||||
icon = 'icons/obj/machines/mining_machines.dmi'
|
||||
icon_state = "console"
|
||||
desc = "A stacking console with an electromagnetic writer, used to track ore mined by prisoners."
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/obj/machinery/mineral/stacking_machine/laborstacker/machine = null
|
||||
var/machinedir = SOUTH
|
||||
var/obj/item/weapon/card/id/prisoner/inserted_id
|
||||
var/obj/machinery/door/airlock/release_door
|
||||
var/door_tag = "prisonshuttle"
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/New()
|
||||
..()
|
||||
spawn(7)
|
||||
src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
|
||||
var/t
|
||||
for(var/obj/machinery/door/airlock/d in range(5,src))
|
||||
t = d.id_tag
|
||||
if(t == src.door_tag)
|
||||
src.release_door = d
|
||||
if (machine && release_door)
|
||||
machine.CONSOLE = src
|
||||
else
|
||||
del(src)
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/attack_hand(user as mob)
|
||||
var/dat
|
||||
dat += text("<b>Point Claim Console</b><br><br>")
|
||||
if(emagged)
|
||||
dat += text("<b>QU&#t0A In%aL*D</b><br>")
|
||||
dat += text("<A href='?src=\ref[src];choice=3'>Proceed to Station.</A><br>")
|
||||
dat += text("<A href='?src=\ref[src];choice=4'>Open release door.</A><br>")
|
||||
if(istype(inserted_id))
|
||||
var/p = inserted_id.points
|
||||
var/g = inserted_id.goal
|
||||
dat += text("[p] / [g] collected. <A href='?src=\ref[src];choice=1'>Eject ID.</A><br>")
|
||||
dat += text("Unclaimed Collection Points: [machine.points]. <A href='?src=\ref[src];choice=2'>Claim points.</A><br>")
|
||||
if(p >= g)
|
||||
dat += text("<b>Quota met.</b><br>")
|
||||
dat += text("<A href='?src=\ref[src];choice=3'>Proceed to Station.</A><br>")
|
||||
dat += text("<A href='?src=\ref[src];choice=4'>Open release door.</A><br>")
|
||||
else
|
||||
dat += text("No ID inserted. <A href='?src=\ref[src];choice=0'>Insert ID.</A><br>")
|
||||
|
||||
|
||||
user << browse("[dat]", "window=console_stacking_machine")
|
||||
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/card/emag))
|
||||
emagged = 1
|
||||
user << "<span class='warning'>PZZTTPFFFT</span>"
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/card/id))
|
||||
return attack_hand(user)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/Topic(href, href_list)
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("0")
|
||||
var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand()
|
||||
if(istype(I))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
inserted_id = I
|
||||
else usr << "\red No valid ID."
|
||||
if("1")
|
||||
inserted_id.loc = get_step(src,get_turf(usr))
|
||||
inserted_id = null
|
||||
if("2")
|
||||
inserted_id.points += machine.points
|
||||
machine.points = 0
|
||||
usr << "Points transferred."
|
||||
if("3")
|
||||
if(labor_shuttle_location == 1)
|
||||
if (!labor_shuttle_moving)
|
||||
usr << "\blue Shuttle recieved message and will be sent shortly."
|
||||
move_labor_shuttle()
|
||||
else
|
||||
usr << "\blue Shuttle is already moving."
|
||||
else
|
||||
usr << "\blue Shuttle is already on-station."
|
||||
if("4")
|
||||
if(release_door.density)
|
||||
release_door.open()
|
||||
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
/**********************Prisoner Collection Unit**************************/
|
||||
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker
|
||||
var/points = 0 //The unclaimed value of ore stacked. Value for each ore loosely relative to its rarity. Iron = 1; Diamond = 25.
|
||||
var/list/ore_values = list(("metal" = 1), ("diamond" = 25), ("solid plasma" = 2), ("gold" = 5), ("silver" = 5), ("bananium" = 9999), ("uranium" = 5), ("glass" = 1), ("reinforced glass" = 2), ("plasteel" = 3))
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/inp)
|
||||
if(istype(inp))
|
||||
var/n = inp.name
|
||||
var/a = inp.amount
|
||||
if(n in ore_values)
|
||||
points += ore_values[n] * a
|
||||
..()
|
||||
@@ -18,57 +18,23 @@
|
||||
else
|
||||
del(src)
|
||||
|
||||
/obj/machinery/mineral/stacking_unit_console/process()
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/mineral/stacking_unit_console/interact(mob/user)
|
||||
user.set_machine(src)
|
||||
/obj/machinery/mineral/stacking_unit_console/attack_hand(user as mob)
|
||||
|
||||
var/obj/item/stack/sheet/s
|
||||
var/dat
|
||||
|
||||
dat += text("<b>Stacking unit console</b><br><br>")
|
||||
|
||||
if(machine.ore_iron)
|
||||
dat += text("Iron: [machine.ore_iron] <A href='?src=\ref[src];release=iron'>Release</A><br>")
|
||||
if(machine.ore_plasteel)
|
||||
dat += text("Plasteel: [machine.ore_plasteel] <A href='?src=\ref[src];release=plasteel'>Release</A><br>")
|
||||
if(machine.ore_glass)
|
||||
dat += text("Glass: [machine.ore_glass] <A href='?src=\ref[src];release=glass'>Release</A><br>")
|
||||
if(machine.ore_rglass)
|
||||
dat += text("Reinforced Glass: [machine.ore_rglass] <A href='?src=\ref[src];release=rglass'>Release</A><br>")
|
||||
if(machine.ore_plasma)
|
||||
dat += text("Plasma: [machine.ore_plasma] <A href='?src=\ref[src];release=plasma'>Release</A><br>")
|
||||
if(machine.ore_gold)
|
||||
dat += text("Gold: [machine.ore_gold] <A href='?src=\ref[src];release=gold'>Release</A><br>")
|
||||
if(machine.ore_silver)
|
||||
dat += text("Silver: [machine.ore_silver] <A href='?src=\ref[src];release=silver'>Release</A><br>")
|
||||
if(machine.ore_uranium)
|
||||
dat += text("Uranium: [machine.ore_uranium] <A href='?src=\ref[src];release=uranium'>Release</A><br>")
|
||||
if(machine.ore_diamond)
|
||||
dat += text("Diamond: [machine.ore_diamond] <A href='?src=\ref[src];release=diamond'>Release</A><br>")
|
||||
if(machine.ore_wood)
|
||||
dat += text("Wood: [machine.ore_wood] <A href='?src=\ref[src];release=wood'>Release</A><br>")
|
||||
if(machine.ore_cardboard)
|
||||
dat += text("Cardboard: [machine.ore_cardboard] <A href='?src=\ref[src];release=cardboard'>Release</A><br>")
|
||||
if(machine.ore_cloth)
|
||||
dat += text("Cloth: [machine.ore_cloth] <A href='?src=\ref[src];release=cloth'>Release</A><br>")
|
||||
if(machine.ore_leather)
|
||||
dat += text("Leather: [machine.ore_leather] <A href='?src=\ref[src];release=leather'>Release</A><br>")
|
||||
if(machine.ore_clown)
|
||||
dat += text("Bananium: [machine.ore_clown] <A href='?src=\ref[src];release=clown'>Release</A><br>")
|
||||
if(machine.ore_adamantine)
|
||||
dat += text ("Adamantine: [machine.ore_adamantine] <A href='?src=\ref[src];release=adamantine'>Release</A><br>")
|
||||
if(machine.ore_mythril)
|
||||
dat += text ("Mythril: [machine.ore_mythril] <A href='?src=\ref[src];release=adamantine'>Release</A><br>")
|
||||
for(var/O in machine.stack_list)
|
||||
s = machine.stack_list[O]
|
||||
if(s.amount > 0)
|
||||
dat += text("[s.name]: [s.amount] <A href='?src=\ref[src];release=[s.type]'>Release</A><br>")
|
||||
|
||||
dat += text("<br>Stacking: [machine.stack_amt]<br><br>")
|
||||
|
||||
user << browse("[dat]", "window=console_stacking_machine")
|
||||
onclose(user, "console_stacking_machine")
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/stacking_unit_console/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -76,103 +42,13 @@
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["release"])
|
||||
switch(href_list["release"])
|
||||
if ("plasma")
|
||||
if (machine.ore_plasma > 0)
|
||||
var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma
|
||||
G.amount = machine.ore_plasma
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_plasma = 0
|
||||
if ("uranium")
|
||||
if (machine.ore_uranium > 0)
|
||||
var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium
|
||||
G.amount = machine.ore_uranium
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_uranium = 0
|
||||
if ("glass")
|
||||
if (machine.ore_glass > 0)
|
||||
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass
|
||||
G.amount = machine.ore_glass
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_glass = 0
|
||||
if ("rglass")
|
||||
if (machine.ore_rglass > 0)
|
||||
var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass
|
||||
G.amount = machine.ore_rglass
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_rglass = 0
|
||||
if ("gold")
|
||||
if (machine.ore_gold > 0)
|
||||
var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold
|
||||
G.amount = machine.ore_gold
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_gold = 0
|
||||
if ("silver")
|
||||
if (machine.ore_silver > 0)
|
||||
var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver
|
||||
G.amount = machine.ore_silver
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_silver = 0
|
||||
if ("diamond")
|
||||
if (machine.ore_diamond > 0)
|
||||
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond
|
||||
G.amount = machine.ore_diamond
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_diamond = 0
|
||||
if ("iron")
|
||||
if (machine.ore_iron > 0)
|
||||
var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal
|
||||
G.amount = machine.ore_iron
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_iron = 0
|
||||
if ("plasteel")
|
||||
if (machine.ore_plasteel > 0)
|
||||
var/obj/item/stack/sheet/plasteel/G = new /obj/item/stack/sheet/plasteel
|
||||
G.amount = machine.ore_plasteel
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_plasteel = 0
|
||||
if ("wood")
|
||||
if (machine.ore_wood > 0)
|
||||
var/obj/item/stack/sheet/wood/G = new /obj/item/stack/sheet/wood
|
||||
G.amount = machine.ore_wood
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_wood = 0
|
||||
if ("cardboard")
|
||||
if (machine.ore_cardboard > 0)
|
||||
var/obj/item/stack/sheet/cardboard/G = new /obj/item/stack/sheet/cardboard
|
||||
G.amount = machine.ore_cardboard
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_cardboard = 0
|
||||
if ("cloth")
|
||||
if (machine.ore_cloth > 0)
|
||||
var/obj/item/stack/sheet/cloth/G = new /obj/item/stack/sheet/cloth
|
||||
G.amount = machine.ore_cloth
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_cloth = 0
|
||||
if ("leather")
|
||||
if (machine.ore_leather > 0)
|
||||
var/obj/item/stack/sheet/leather/G = new /obj/item/stack/sheet/leather
|
||||
G.amount = machine.ore_diamond
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_leather = 0
|
||||
if ("clown")
|
||||
if (machine.ore_clown > 0)
|
||||
var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown
|
||||
G.amount = machine.ore_clown
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_clown = 0
|
||||
if ("adamantine")
|
||||
if (machine.ore_adamantine > 0)
|
||||
var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine
|
||||
G.amount = machine.ore_adamantine
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_adamantine = 0
|
||||
if ("mythril")
|
||||
if (machine.ore_mythril > 0)
|
||||
var/obj/item/stack/sheet/mineral/mythril/G = new /obj/item/stack/sheet/mineral/mythril
|
||||
G.amount = machine.ore_mythril
|
||||
G.loc = machine.output.loc
|
||||
machine.ore_mythril = 0
|
||||
var/obj/item/stack/sheet/inp = machine.stack_list[text2path(href_list["release"])]
|
||||
var/obj/item/stack/sheet/out = new inp.type()
|
||||
out.amount = inp.amount
|
||||
inp.amount = 0
|
||||
out.loc = machine.output.loc
|
||||
|
||||
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -191,22 +67,7 @@
|
||||
var/stk_amt = list()
|
||||
var/obj/machinery/mineral/input = null
|
||||
var/obj/machinery/mineral/output = null
|
||||
var/ore_gold = 0;
|
||||
var/ore_silver = 0;
|
||||
var/ore_diamond = 0;
|
||||
var/ore_plasma = 0;
|
||||
var/ore_iron = 0;
|
||||
var/ore_uranium = 0;
|
||||
var/ore_clown = 0;
|
||||
var/ore_glass = 0;
|
||||
var/ore_rglass = 0;
|
||||
var/ore_plasteel = 0;
|
||||
var/ore_wood = 0
|
||||
var/ore_cardboard = 0
|
||||
var/ore_cloth = 0;
|
||||
var/ore_leather = 0;
|
||||
var/ore_adamantine = 0;
|
||||
var/ore_mythril = 0;
|
||||
var/stack_list[0] //Key: Type. Value: Instance of type.
|
||||
var/stack_amt = 50; //ammount to stack before releassing
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/New()
|
||||
@@ -218,177 +79,32 @@
|
||||
for (var/dir in cardinal)
|
||||
src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
|
||||
if(src.output) break
|
||||
if(!istype(output) || !istype(input))
|
||||
del(src)
|
||||
return
|
||||
processing_objects.Add(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/proc/process_sheet(obj/item/stack/sheet/inp)
|
||||
if(!istype(inp)) //Non-sheets. Yuck.
|
||||
return
|
||||
if(!(inp.type in stack_list)) //It's the first of this sheet added
|
||||
stack_list[inp.type] = new inp.type(src,0)
|
||||
var/obj/item/stack/sheet/storage = stack_list[inp.type]
|
||||
storage.amount += inp.amount //Stack the sheets
|
||||
inp.loc = null //Let the old sheet garbage collect
|
||||
while(storage.amount > stack_amt) //Get rid of excessive stackage
|
||||
var/obj/item/stack/sheet/out = new inp.type()
|
||||
out.amount = stack_amt
|
||||
out.loc = output.loc
|
||||
storage.amount -= stack_amt
|
||||
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/process()
|
||||
if (src.output && src.input)
|
||||
var/obj/item/O
|
||||
while (locate(/obj/item, input.loc))
|
||||
O = locate(/obj/item, input.loc)
|
||||
if (istype(O,/obj/item/stack/sheet/metal))
|
||||
ore_iron+= O:amount;
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/diamond))
|
||||
ore_diamond+= O:amount;
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/plasma))
|
||||
ore_plasma+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/gold))
|
||||
ore_gold+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/silver))
|
||||
ore_silver+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/clown))
|
||||
ore_clown+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/uranium))
|
||||
ore_uranium+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/glass))
|
||||
ore_glass+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/rglass))
|
||||
ore_rglass+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/plasteel))
|
||||
ore_plasteel+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/adamantine))
|
||||
ore_adamantine+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/mineral/mythril))
|
||||
ore_mythril+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/cardboard))
|
||||
ore_cardboard+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/wood))
|
||||
ore_wood+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/cloth))
|
||||
ore_cloth+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/stack/sheet/leather))
|
||||
ore_leather+= O:amount
|
||||
del(O)
|
||||
continue
|
||||
if (istype(O,/obj/item/weapon/ore/slag))
|
||||
del(O)
|
||||
continue
|
||||
O.loc = src.output.loc
|
||||
if (ore_gold >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_gold -= stack_amt
|
||||
return
|
||||
if (ore_silver >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_silver -= stack_amt
|
||||
return
|
||||
if (ore_diamond >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_diamond -= stack_amt
|
||||
return
|
||||
if (ore_plasma >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_plasma -= stack_amt
|
||||
return
|
||||
if (ore_iron >= stack_amt)
|
||||
var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_iron -= stack_amt
|
||||
return
|
||||
if (ore_clown >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_clown -= stack_amt
|
||||
return
|
||||
if (ore_uranium >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_uranium -= stack_amt
|
||||
return
|
||||
if (ore_glass >= stack_amt)
|
||||
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_glass -= stack_amt
|
||||
return
|
||||
if (ore_rglass >= stack_amt)
|
||||
var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_rglass -= stack_amt
|
||||
return
|
||||
if (ore_plasteel >= stack_amt)
|
||||
var/obj/item/stack/sheet/plasteel/G = new /obj/item/stack/sheet/plasteel
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_plasteel -= stack_amt
|
||||
return
|
||||
if (ore_wood >= stack_amt)
|
||||
var/obj/item/stack/sheet/wood/G = new /obj/item/stack/sheet/wood
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_wood -= stack_amt
|
||||
return
|
||||
if (ore_cardboard >= stack_amt)
|
||||
var/obj/item/stack/sheet/cardboard/G = new /obj/item/stack/sheet/cardboard
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_cardboard -= stack_amt
|
||||
return
|
||||
if (ore_cloth >= stack_amt)
|
||||
var/obj/item/stack/sheet/cloth/G = new /obj/item/stack/sheet/cloth
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_cloth -= stack_amt
|
||||
return
|
||||
if (ore_leather >= stack_amt)
|
||||
var/obj/item/stack/sheet/leather/G = new /obj/item/stack/sheet/leather
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_leather -= stack_amt
|
||||
return
|
||||
if (ore_adamantine >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_adamantine -= stack_amt
|
||||
return
|
||||
if (ore_mythril >= stack_amt)
|
||||
var/obj/item/stack/sheet/mineral/mythril/G = new /obj/item/stack/sheet/mineral/mythril
|
||||
G.amount = stack_amt
|
||||
G.loc = output.loc
|
||||
ore_mythril -= stack_amt
|
||||
return
|
||||
var/obj/item/stack/sheet/O
|
||||
while (locate(/obj/item/stack/sheet, input.loc))
|
||||
O = locate(/obj/item/stack/sheet, input.loc)
|
||||
if(istype(O,/obj/item/stack/sheet))
|
||||
process_sheet(O)
|
||||
return
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#define XENOARCH_SPREAD_CHANCE 15
|
||||
#define ARTIFACT_SPAWN_CHANCE 20
|
||||
|
||||
/datum/controller/game_controller/var/list/artifact_spawning_turfs = list()
|
||||
|
||||
/turf/simulated/mineral //wall piece
|
||||
name = "Rock"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
@@ -127,7 +129,7 @@
|
||||
//dont create artifact machinery in animal or plant digsites, or if we already have one
|
||||
if(!artifact_find && digsite != 1 && digsite != 2 && prob(ARTIFACT_SPAWN_CHANCE))
|
||||
artifact_find = new()
|
||||
artifact_spawning_turfs.Add(src)
|
||||
master_controller.artifact_spawning_turfs.Add(src)
|
||||
|
||||
if(!src.geological_data)
|
||||
src.geological_data = new/datum/geosample(src)
|
||||
@@ -165,6 +167,7 @@
|
||||
M = new/turf/simulated/mineral/uranium(src)
|
||||
if("Iron")
|
||||
M = new/turf/simulated/mineral/iron(src)
|
||||
M.icon_state = "rock_Iron[rand(1,3)]"
|
||||
if("Diamond")
|
||||
M = new/turf/simulated/mineral/diamond(src)
|
||||
if("Gold")
|
||||
@@ -173,6 +176,7 @@
|
||||
M = new/turf/simulated/mineral/silver(src)
|
||||
if("Plasma")
|
||||
M = new/turf/simulated/mineral/plasma(src)
|
||||
M.icon_state = "rock_Plasma[rand(1,3)]"
|
||||
/*if("Adamantine")
|
||||
M = new/turf/simulated/mineral/adamantine(src)*/
|
||||
if(M)
|
||||
@@ -210,7 +214,7 @@
|
||||
|
||||
/turf/simulated/mineral/iron
|
||||
name = "Iron deposit"
|
||||
icon_state = "rock_Iron"
|
||||
icon_state = "rock_Iron1"
|
||||
mineralName = "Iron"
|
||||
mineralAmt = 5
|
||||
spreadChance = 25
|
||||
@@ -246,7 +250,7 @@
|
||||
|
||||
/turf/simulated/mineral/plasma
|
||||
name = "Plasma deposit"
|
||||
icon_state = "rock_Plasma"
|
||||
icon_state = "rock_Plasma1"
|
||||
mineralName = "Plasma"
|
||||
mineralAmt = 5
|
||||
spreadChance = 25
|
||||
@@ -369,29 +373,25 @@ commented out in r5061, I left it because of the shroom thingies
|
||||
//just pull the surrounding rock out
|
||||
excavate_find(0, F)
|
||||
|
||||
if( src.excavation_level + P.excavation_amount >= 100 || (!finds.len && !excavation_minerals.len) )
|
||||
//if players have been excavating this turf, have a chance to leave some rocky debris behind
|
||||
var/boulder_prob = 0
|
||||
if( src.excavation_level + P.excavation_amount >= 100 )
|
||||
//if players have been excavating this turf, leave some rocky debris behind
|
||||
var/obj/structure/boulder/B
|
||||
|
||||
if(src.excavation_level > 15)
|
||||
boulder_prob = 10
|
||||
if(artifact_find)
|
||||
boulder_prob += 25
|
||||
if(src.excavation_level >= 100)
|
||||
boulder_prob += 40
|
||||
else if(src.excavation_level > 95)
|
||||
boulder_prob += 25
|
||||
else if(src.excavation_level > 90)
|
||||
boulder_prob += 10
|
||||
if(prob(boulder_prob))
|
||||
if( src.excavation_level > 0 || prob(15) )
|
||||
//boulder with an artifact inside
|
||||
B = new(src)
|
||||
if(artifact_find)
|
||||
B.artifact_find = artifact_find
|
||||
else
|
||||
artifact_debris(1)
|
||||
else if(prob(15))
|
||||
//empty boulder
|
||||
B = new(src)
|
||||
if(artifact_find)
|
||||
B.artifact_find = artifact_find
|
||||
else if(artifact_find && src.excavation_level + P.excavation_amount >= 100)
|
||||
artifact_debris(1)
|
||||
|
||||
gets_drilled(B ? 0 : 1)
|
||||
if(B)
|
||||
gets_drilled(0)
|
||||
else
|
||||
gets_drilled(1)
|
||||
return
|
||||
else
|
||||
src.excavation_level += P.excavation_amount
|
||||
@@ -475,7 +475,7 @@ commented out in r5061, I left it because of the shroom thingies
|
||||
if(prob(50))
|
||||
pain = 1
|
||||
for(var/mob/living/M in range(src, 200))
|
||||
M << "<font color='red'><b>[pick("A high pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fadaing away!</b></font>"
|
||||
M << "<font color='red'><b>[pick("A high pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!</b></font>"
|
||||
if(pain)
|
||||
flick("pain",M.pain)
|
||||
if(prob(50))
|
||||
|
||||
@@ -101,7 +101,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(NewLoc)
|
||||
loc = NewLoc
|
||||
for(var/obj/effect/step_trigger/S in NewLoc)
|
||||
S.HasEntered(src)
|
||||
S.Crossed(src)
|
||||
|
||||
return
|
||||
loc = get_turf(src) //Get out of closets and such as a ghost
|
||||
@@ -115,7 +115,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
x--
|
||||
|
||||
for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb
|
||||
S.HasEntered(src)
|
||||
S.Crossed(src)
|
||||
|
||||
/mob/dead/observer/examine()
|
||||
if(usr)
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
/mob/living/carbon/alien/adjustToxLoss(amount)
|
||||
storedPlasma = min(max(storedPlasma + amount,0),max_plasma) //upper limit of max_plasma, lower limit of 0
|
||||
hud_used.alien_plasma_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font color='magenta'>[storedPlasma]</font></div>"
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/adjustFireLoss(amount) // Weak to Fire
|
||||
|
||||
@@ -80,7 +80,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
/obj/item/clothing/mask/facehugger/equipped(mob/M)
|
||||
Attach(M)
|
||||
|
||||
/obj/item/clothing/mask/facehugger/HasEntered(atom/target)
|
||||
/obj/item/clothing/mask/facehugger/Crossed(atom/target)
|
||||
HasProximity(target)
|
||||
return
|
||||
|
||||
|
||||
@@ -46,14 +46,18 @@
|
||||
dna.mutantrace = "slime"
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/skellington/New()
|
||||
species = new /datum/species/skellington(src)
|
||||
/mob/living/carbon/human/grey/New()
|
||||
set_species("Grey")
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/human/New()
|
||||
species = new /datum/species/human(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/New()
|
||||
|
||||
if(!species)
|
||||
set_species()
|
||||
set_species("Human")
|
||||
|
||||
if(species.language)
|
||||
var/datum/language/L = all_languages[species.language]
|
||||
@@ -428,7 +432,7 @@
|
||||
|
||||
// called when something steps onto a human
|
||||
// this could be made more general, but for now just handle mulebot
|
||||
/mob/living/carbon/human/HasEntered(var/atom/movable/AM)
|
||||
/mob/living/carbon/human/Crossed(var/atom/movable/AM)
|
||||
var/obj/machinery/bot/mulebot/MB = AM
|
||||
if(istype(MB))
|
||||
MB.RunOver(src)
|
||||
@@ -896,7 +900,7 @@
|
||||
xylophone=0
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/vomit()
|
||||
/mob/living/carbon/human/proc/vomit(hairball=0)
|
||||
if(!lastpuke)
|
||||
lastpuke = 1
|
||||
src << "<spawn class='warning'>You feel nauseous..."
|
||||
@@ -905,15 +909,19 @@
|
||||
spawn(100) //and you have 10 more for mad dash to the bucket
|
||||
Stun(5)
|
||||
|
||||
src.visible_message("<spawn class='warning'>[src] throws up!","<spawn class='warning'>You throw up!")
|
||||
if(hairball)
|
||||
src.visible_message("<span class='warning'>[src] hacks up a hairball!</span>","<span class='warning'>You hack up a hairball!</span>")
|
||||
else
|
||||
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/turf/location = loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(src, 1)
|
||||
|
||||
nutrition -= 40
|
||||
adjustToxLoss(-3)
|
||||
if(!hairball)
|
||||
nutrition -= 40
|
||||
adjustToxLoss(-3)
|
||||
spawn(350) //wait 35 seconds before next volley
|
||||
lastpuke = 0
|
||||
|
||||
@@ -1322,7 +1330,7 @@ mob/living/carbon/human/yank_out_object()
|
||||
new_species = "Human"
|
||||
|
||||
if(species && (species.name && species.name == new_species))
|
||||
return
|
||||
return 1
|
||||
|
||||
species = all_species[new_species]
|
||||
|
||||
@@ -1335,6 +1343,10 @@ mob/living/carbon/human/yank_out_object()
|
||||
if(species.name=="Slime People")
|
||||
dna.mutantrace = "slime"
|
||||
|
||||
if(mutations.len==0)
|
||||
mutations=species.default_mutations
|
||||
|
||||
|
||||
spawn(0)
|
||||
update_icons()
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
log_attack("[M.name] ([M.ckey]) [M.species.attack_verb]ed [src.name] ([src.ckey])")
|
||||
|
||||
var/damage = rand(0, 5)//BS12 EDIT
|
||||
var/damage = rand(0, M.species.max_hurt_damage)//BS12 EDIT
|
||||
if(!damage)
|
||||
if(M.species.attack_verb == "punch")
|
||||
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
|
||||
@@ -733,3 +733,28 @@ It can still be worn/put on as normal.
|
||||
if(source.machine == target)
|
||||
target.show_inv(source)
|
||||
del(src)
|
||||
|
||||
|
||||
/mob/proc/get_item_by_slot(slot_id)
|
||||
switch(slot_id)
|
||||
if(slot_l_hand)
|
||||
return l_hand
|
||||
if(slot_r_hand)
|
||||
return r_hand
|
||||
return null
|
||||
|
||||
/mob/living/carbon/human/get_item_by_slot(slot_id)
|
||||
switch(slot_id)
|
||||
if(slot_back)
|
||||
return back
|
||||
if(slot_wear_mask)
|
||||
return wear_mask
|
||||
if(slot_handcuffed)
|
||||
return handcuffed
|
||||
if(slot_legcuffed)
|
||||
return legcuffed
|
||||
if(slot_l_hand)
|
||||
return l_hand
|
||||
if(slot_r_hand)
|
||||
return r_hand
|
||||
return null
|
||||
@@ -188,6 +188,11 @@
|
||||
if(3)
|
||||
emote("drool")
|
||||
|
||||
if(species.name == "Tajaran")
|
||||
if(prob(1))
|
||||
if(prob(1))
|
||||
vomit(1) // Hairball
|
||||
|
||||
|
||||
if(stat != 2)
|
||||
var/rn = rand(0, 200)
|
||||
@@ -1273,6 +1278,7 @@
|
||||
else
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
else if(!seer)
|
||||
see_in_dark = species.darksight
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
|
||||
if(healths)
|
||||
@@ -1473,7 +1479,7 @@
|
||||
if(traumatic_shock >= 80)
|
||||
shock_stage += 1
|
||||
else
|
||||
shock_stage = min(shock_stage, 100)
|
||||
shock_stage = min(shock_stage, 160)
|
||||
shock_stage = max(shock_stage-1, 0)
|
||||
return
|
||||
|
||||
@@ -1488,17 +1494,28 @@
|
||||
if(shock_stage == 40)
|
||||
src << "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
|
||||
|
||||
if (shock_stage >= 60)
|
||||
if(shock_stage == 60) emote("me",1,"'s body becomes limp.")
|
||||
if (prob(5) && health <= 20)
|
||||
Stun(20)
|
||||
lying = 1
|
||||
if(shock_stage >=60)
|
||||
if (prob(2))
|
||||
src << "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
|
||||
Weaken(20)
|
||||
|
||||
if(shock_stage == 80)
|
||||
src << "<font color='red'><b>"+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.")
|
||||
if(shock_stage >= 80)
|
||||
if (prob(5))
|
||||
src << "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
|
||||
Weaken(20)
|
||||
|
||||
if(shock_stage >= 120)
|
||||
if (prob(2))
|
||||
src << "<font color='red'><b>"+pick("You black out!", "You feel like you could die any moment now.", "You're about to lose consciousness.")
|
||||
Paralyse(5)
|
||||
|
||||
if(shock_stage == 150)
|
||||
emote("me",1,"can no longer stand, collapsing!")
|
||||
Weaken(20)
|
||||
|
||||
if(shock_stage >= 150)
|
||||
Weaken(20)
|
||||
|
||||
if (shock_stage > 100 && health <= 20)
|
||||
Paralyse(rand(15,28))
|
||||
|
||||
proc/handle_pulse()
|
||||
if(life_tick % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load)
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
/mob/living/carbon/proc/updateshock()
|
||||
src.traumatic_shock = \
|
||||
1 * src.getOxyLoss() + \
|
||||
0.5 * src.getToxLoss() + \
|
||||
2.5 * src.getFireLoss() + \
|
||||
1.5 * src.getBruteLoss() + \
|
||||
2 * src.getCloneLoss() + \
|
||||
1 * src.halloss
|
||||
0.7 * src.getToxLoss() + \
|
||||
1.5 * src.getFireLoss() + \
|
||||
1.2 * src.getBruteLoss() + \
|
||||
1.7 * src.getCloneLoss() + \
|
||||
2 * src.halloss
|
||||
|
||||
if(reagents.has_reagent("alkysine"))
|
||||
src.traumatic_shock -= 10
|
||||
@@ -35,7 +35,7 @@
|
||||
else if(organ.status & ORGAN_BROKEN || organ.open)
|
||||
src.traumatic_shock += 30
|
||||
if(organ.status & ORGAN_SPLINTED)
|
||||
src.traumatic_shock -= 20
|
||||
src.traumatic_shock -= 25
|
||||
|
||||
if(src.traumatic_shock < 0)
|
||||
src.traumatic_shock = 0
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
|
||||
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
|
||||
|
||||
// This shit is apparently not even wired up.
|
||||
var/brute_resist // Physical damage reduction.
|
||||
var/burn_resist // Burn damage reduction.
|
||||
|
||||
@@ -38,11 +39,17 @@
|
||||
var/bloodflags=0
|
||||
var/bodyflags=0
|
||||
|
||||
// For grays
|
||||
var/max_hurt_damage = 5 // Max melee damage dealt + 5 if hulk
|
||||
var/default_mutations = list()
|
||||
|
||||
|
||||
/datum/species/human
|
||||
name = "Human"
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_human.dmi'
|
||||
primitive = /mob/living/carbon/monkey
|
||||
path = /mob/living/carbon/human
|
||||
path = /mob/living/carbon/human/human
|
||||
flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
|
||||
/datum/species/unathi
|
||||
@@ -134,18 +141,6 @@
|
||||
flags = NO_BREATHE | REQUIRE_LIGHT | NON_GENDERED | NO_SCAN | IS_PLANT | RAD_ABSORB
|
||||
bloodflags = BLOOD_GREEN
|
||||
|
||||
/datum/species/skellington // /vg/
|
||||
name = "Skellington"
|
||||
icobase = 'icons/mob/human_races/r_skeleton.dmi'
|
||||
deform = 'icons/mob/human_races/r_skeleton.dmi' // TODO: Need deform.
|
||||
path = /mob/living/carbon/human/skellington
|
||||
language = "Clatter"
|
||||
attack_verb = "punch"
|
||||
|
||||
flags = WHITELISTED | HAS_LIPS | HAS_TAIL | NO_EAT | NO_BREATHE | NON_GENDERED
|
||||
|
||||
|
||||
|
||||
/datum/species/kidan
|
||||
name = "Kidan"
|
||||
icobase = 'icons/mob/human_races/r_kidan.dmi'
|
||||
@@ -168,4 +163,18 @@
|
||||
primitive = /mob/living/carbon/slime/adult
|
||||
|
||||
flags = WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS
|
||||
bloodflags = BLOOD_SLIME
|
||||
bloodflags = BLOOD_SLIME
|
||||
|
||||
|
||||
/datum/species/grey
|
||||
name = "Grey"
|
||||
icobase = 'icons/mob/human_races/r_grey.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_grey.dmi'
|
||||
language = "Galactic Standard"
|
||||
attack_verb = "punch"
|
||||
path = /mob/living/carbon/human/grey
|
||||
darksight = 5 // BOOSTED from 2
|
||||
max_hurt_damage = 3 // From 5 (for humans)
|
||||
default_mutations=list(mRemotetalk) // TK is also another candidate, but TK is overpowered as fuck.
|
||||
|
||||
flags = WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
@@ -1,582 +0,0 @@
|
||||
#define cycle_pause 4 //min 1
|
||||
#define viewrange 7 //min 2
|
||||
|
||||
/mob/living/carbon/human/zombie/New()
|
||||
..()
|
||||
// Uh, what? - N3X
|
||||
src.mind = new/datum/mind(src)
|
||||
|
||||
|
||||
/mob/living/carbon/human/zombie //Define
|
||||
name = "zombie"
|
||||
desc = "A Zombie."
|
||||
a_intent = "harm"
|
||||
|
||||
var/state = 0
|
||||
|
||||
var/list/path = new/list()
|
||||
|
||||
var/frustration = 0
|
||||
var/mob/living/carbon/target
|
||||
var/list/path_target = new/list()
|
||||
|
||||
var/turf/trg_idle
|
||||
var/list/path_idle = new/list()
|
||||
|
||||
var/alive = 1 //1 alive, 0 dead
|
||||
|
||||
var/zsay = new/list()
|
||||
|
||||
New()
|
||||
..()
|
||||
zsay += "braaaaains"
|
||||
zsay += "Mrrrhrrrrrrmmmm"
|
||||
zsay += "BRAIIIIIIIIINSSSSS"
|
||||
zsay += "uuuuuuuuuuuhhhh"
|
||||
zsay += "grrrr-grrrii-gggrii-fffee-rrr"
|
||||
zsay += "UHhuHUhuhhhh"
|
||||
zsay += "thriii-thirriiill--errrr"
|
||||
zsay += "GRRRRRRRRR"
|
||||
zsay += "ahhhaaaarraaghh"
|
||||
zsay += "eeemmmmmmaaarrrrrrraggh"
|
||||
zsay += "AAARRAAAGGGGHHHHHH"
|
||||
zsay += "FFFFEEEEERRAAAAG"
|
||||
zsay += "bbbb-bbb-ainnnnnns"
|
||||
|
||||
src.contract_disease(new/datum/disease/z_virus)
|
||||
|
||||
src.process()
|
||||
|
||||
emote(var/act)
|
||||
act = "<B>[src]</B> moans."
|
||||
for (var/mob/O in hearers(src, null))
|
||||
O.show_message(act, 2)
|
||||
|
||||
Bumped(AM as mob|obj)
|
||||
// ..()
|
||||
if(istype(AM, /mob/living/carbon/human/zombie))
|
||||
return
|
||||
if(ismob(AM) && (ishuman(AM) || ismonkey(AM)) )
|
||||
src.target = AM
|
||||
set_attack()
|
||||
else if(ismob(AM))
|
||||
spawn(0)
|
||||
var/turf/T = get_turf(src)
|
||||
AM:loc = T
|
||||
|
||||
Bump(atom/A)
|
||||
if(istype(A, /mob/living/carbon/human/zombie))
|
||||
return
|
||||
if(ismob(A) && (ishuman(A) || ismonkey(A)))
|
||||
src.target = A
|
||||
set_attack()
|
||||
else if(ismob(A))
|
||||
src.loc = A:loc
|
||||
|
||||
|
||||
proc/set_attack()
|
||||
state = 1
|
||||
if(path_idle.len) path_idle = new/list()
|
||||
trg_idle = null
|
||||
|
||||
proc/set_idle()
|
||||
state = 2
|
||||
if (path_target.len) path_target = new/list()
|
||||
target = null
|
||||
frustration = 0
|
||||
|
||||
proc/set_null()
|
||||
state = 0
|
||||
if (path_target.len) path_target = new/list()
|
||||
if (path_idle.len) path_idle = new/list()
|
||||
target = null
|
||||
trg_idle = null
|
||||
frustration = 0
|
||||
|
||||
proc/process()
|
||||
set background = 1
|
||||
var/quick_move = 1
|
||||
var/slow_move = 0
|
||||
|
||||
if (src.stat == 2)
|
||||
return
|
||||
|
||||
if (src.stat > 0 || lying)
|
||||
spawn(cycle_pause)
|
||||
src.process()
|
||||
return
|
||||
|
||||
if(istype(src.shoes, /obj/item/clothing/shoes/orange))
|
||||
var/obj/item/clothing/shoes/orange/Os = src.shoes
|
||||
if(Os.chained)
|
||||
slow_move = 1
|
||||
else if(istype(src.wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
slow_move = 1
|
||||
|
||||
|
||||
else if (!target)
|
||||
if (path_target.len) path_target = new/list()
|
||||
|
||||
var/last_health = INFINITY
|
||||
|
||||
for (var/mob/living/carbon/C in range(viewrange-2,src.loc))
|
||||
if (C.stat == 2 || !can_see(src,C,viewrange) || istype(C, /mob/living/carbon/human/zombie) || istype(C, /mob/living/carbon/monkey))
|
||||
continue
|
||||
if(C:stunned || C:paralysis || C:weakened)
|
||||
target = C
|
||||
break
|
||||
if(C:health < last_health)
|
||||
last_health = C:health
|
||||
target = C
|
||||
|
||||
if(target)
|
||||
set_attack()
|
||||
else if(state != 2)
|
||||
set_idle()
|
||||
idle()
|
||||
|
||||
else if(target)
|
||||
var/turf/distance = get_dist(src, target)
|
||||
set_attack()
|
||||
|
||||
if(can_see(src,target,viewrange))
|
||||
if(distance <= 1 && !istype(src.wear_mask, /obj/item/clothing/mask))
|
||||
if(prob(25))
|
||||
for(var/mob/O in viewers(world.view,src))
|
||||
O.show_message("\red <B>[src] has attempted to bite [src.target]!</B>", 1, "\red You hear struggling.", 2)
|
||||
else
|
||||
for(var/mob/O in viewers(world.view,src))
|
||||
O.show_message("\red <B>[src.target] has been bitten by [src]!</B>", 1, "\red You hear struggling.", 2)
|
||||
var/mob/living/carbon/human/T = target
|
||||
T.bruteloss += rand(1,7)
|
||||
var/datum/organ/external/affecting
|
||||
if(T.organs["head"]) affecting = T.organs["head"]
|
||||
affecting.take_damage(rand(1,7), 0)
|
||||
playsound(src.loc, 'sound/items/eatfood.ogg', 50, 1)
|
||||
if(prob(25))
|
||||
target.contract_disease(new/datum/disease/z_virus)
|
||||
src.add_blood(src.target)
|
||||
if (prob(33))
|
||||
var/turf/location = src.target.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_blood(src.target)
|
||||
if (src.wear_mask)
|
||||
src.wear_mask.add_blood(src.target)
|
||||
if (src.head)
|
||||
src.head.add_blood(src.target)
|
||||
if (src.glasses && prob(33))
|
||||
src.glasses.add_blood(src.target)
|
||||
if (src.gloves)
|
||||
src.gloves.add_blood(src.target)
|
||||
if (prob(15))
|
||||
if (src.wear_suit)
|
||||
src.wear_suit.add_blood(src.target)
|
||||
else if (src.w_uniform)
|
||||
src.w_uniform.add_blood(src.target)
|
||||
sleep(5)
|
||||
//target:paralysis = max(target:paralysis, 10)
|
||||
else if(distance <= 1 && !src.handcuffed && !istype(src.wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
if(prob(25) && src.equipped())
|
||||
var/obj/item/weapon/A = src.equipped()
|
||||
A.attack(src.target, src)
|
||||
else if(prob(25))
|
||||
for(var/mob/O in viewers(world.view,src))
|
||||
O.show_message("\red <B>[src] has attempted to claw [src.target]!</B>", 1, "\red You hear struggling.", 2)
|
||||
else
|
||||
for(var/mob/O in viewers(world.view,src))
|
||||
O.show_message("\red <B>[src.target] has been clawed by [src]!</B>", 1, "\red You hear struggling.", 2)
|
||||
var/mob/living/carbon/human/T = target
|
||||
T.bruteloss += rand(1,7)
|
||||
var/datum/organ/external/affecting
|
||||
if(T.organs["head"]) affecting = T.organs["head"]
|
||||
affecting.take_damage(rand(1,7), 0)
|
||||
if(prob(12.5))
|
||||
target.contract_disease(new/datum/disease/z_virus)
|
||||
src.add_blood(src.target)
|
||||
if (prob(33))
|
||||
var/turf/location = src.target.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_blood(src.target)
|
||||
if (src.wear_mask)
|
||||
src.wear_mask.add_blood(src.target)
|
||||
if (src.head)
|
||||
src.head.add_blood(src.target)
|
||||
if (src.glasses && prob(33))
|
||||
src.glasses.add_blood(src.target)
|
||||
if (src.gloves)
|
||||
src.gloves.add_blood(src.target)
|
||||
if (prob(15))
|
||||
if (src.wear_suit)
|
||||
src.wear_suit.add_blood(src.target)
|
||||
else if (src.w_uniform)
|
||||
src.w_uniform.add_blood(src.target)
|
||||
|
||||
else
|
||||
step_towards(src,get_step_towards2(src , target))
|
||||
set_null()
|
||||
if(!slow_move)
|
||||
spawn(cycle_pause) src.process()
|
||||
else
|
||||
spawn(cycle_pause*2) src.process()
|
||||
return
|
||||
|
||||
else
|
||||
if( !path_target.len )
|
||||
|
||||
path_attack(target)
|
||||
if(!path_target.len)
|
||||
set_null()
|
||||
if(!slow_move)
|
||||
spawn(cycle_pause) src.process()
|
||||
else
|
||||
spawn(cycle_pause*2) src.process()
|
||||
return
|
||||
else
|
||||
var/turf/next = path_target[1]
|
||||
|
||||
if(next in range(1,src))
|
||||
path_attack(target)
|
||||
|
||||
if(!path_target.len)
|
||||
src.frustration += 5
|
||||
else
|
||||
next = path_target[1]
|
||||
path_target -= next
|
||||
step_towards(src,next)
|
||||
quick_move = 1
|
||||
|
||||
if (get_dist(src, src.target) >= distance) src.frustration++
|
||||
else src.frustration--
|
||||
if(frustration >= 35) set_null()
|
||||
|
||||
if(prob(3) && !src.stat == 2)
|
||||
if(prob(50))
|
||||
src.say(pick(zsay))
|
||||
else
|
||||
src.emote("moan")
|
||||
|
||||
if(slow_move)
|
||||
spawn(cycle_pause*2)
|
||||
src.process()
|
||||
else if(quick_move)
|
||||
spawn(cycle_pause/2)
|
||||
src.process()
|
||||
else
|
||||
spawn(cycle_pause)
|
||||
src.process()
|
||||
|
||||
|
||||
for(var/obj/machinery/door/D in oview(1))
|
||||
D.Bumped(src)
|
||||
|
||||
|
||||
|
||||
|
||||
proc/idle()
|
||||
set background = 1
|
||||
var/quick_move = 0
|
||||
|
||||
if(state != 2 || src.stat == 2 || target) return
|
||||
|
||||
step_rand(src)
|
||||
|
||||
if(prob(3))
|
||||
if(prob(10))
|
||||
src.say(pick(zsay))
|
||||
else
|
||||
src.emote("moan")
|
||||
|
||||
if(quick_move)
|
||||
spawn(cycle_pause/2)
|
||||
idle()
|
||||
else
|
||||
spawn(cycle_pause)
|
||||
idle()
|
||||
|
||||
proc/path_idle(var/atom/trg)
|
||||
path_idle = AStar(src.loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
|
||||
path_idle = reverselist(path_idle)
|
||||
|
||||
proc/path_attack(var/atom/trg)
|
||||
target = trg
|
||||
path_target = AStar(src.loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
|
||||
path_target = reverselist(path_target)
|
||||
|
||||
|
||||
proc/healthcheck()
|
||||
return
|
||||
|
||||
|
||||
//Zombies!
|
||||
|
||||
/datum/disease/z_virus
|
||||
name = "T-Virus"
|
||||
max_stages = 5
|
||||
spread = "Contact"
|
||||
cure = "???"
|
||||
spread_type = SPECIAL
|
||||
cure_id = "zed"
|
||||
affected_species = list("Human", "Human/Zombie")
|
||||
|
||||
/datum/disease/z_virus/stage_act()
|
||||
..()
|
||||
if(istype(affected_mob, /mob/living/carbon/human/zombie) && !src.carrier)
|
||||
src.carrier = 1
|
||||
return
|
||||
switch(stage)
|
||||
if(1)
|
||||
if (prob(8))
|
||||
affected_mob << pick("\red Something about you doesnt feel right.","\red Your head starts to itch.")
|
||||
if(2)
|
||||
if (prob(8))
|
||||
affected_mob << "\red Your limbs feel numb."
|
||||
affected_mob.bruteloss += 1
|
||||
affected_mob.updatehealth()
|
||||
if (prob(9))
|
||||
affected_mob << "\red You feel ill..."
|
||||
if (prob(9))
|
||||
affected_mob << "\red You feel a pain in your stomache..."
|
||||
if(3)
|
||||
if (prob(8))
|
||||
affected_mob << text("\red []", pick("owww...","I want...","Please..."))
|
||||
affected_mob.bruteloss += 1
|
||||
affected_mob.updatehealth()
|
||||
if (prob(10))
|
||||
affected_mob << "\red You feel very ill."
|
||||
affected_mob.bruteloss += 5
|
||||
affected_mob.updatehealth()
|
||||
if (prob(4))
|
||||
affected_mob << "\red You feel a stabbing pain in your head."
|
||||
affected_mob.paralysis += 2
|
||||
if (prob(4))
|
||||
affected_mob << "\red Whats going to happen to me?"
|
||||
if(4)
|
||||
if (prob(10))
|
||||
affected_mob << pick("\red You feel violently sick.")
|
||||
affected_mob.bruteloss += 8
|
||||
affected_mob.updatehealth()
|
||||
if (prob(20))
|
||||
affected_mob.say(pick("Mmmmm.", "Hey... You look...", "Hsssshhhhh!"))
|
||||
if (prob(8))
|
||||
affected_mob << "\red You cant... feel..."
|
||||
if(5)
|
||||
affected_mob.toxloss += 10
|
||||
affected_mob.updatehealth()
|
||||
affected_mob << "You feel the life slowly slip away from you as you join the army of the undead.."
|
||||
affected_mob:Zombify()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/Zombify()
|
||||
if (src.monkeyizing)
|
||||
return
|
||||
update_icons() // update_clothing()
|
||||
var/mob/living/carbon/human/zombie/O = new/mob/living/carbon/human/zombie( src.loc )
|
||||
//Yay, Zombie!
|
||||
O.name = name
|
||||
O.r_hair = name
|
||||
O.g_hair = g_hair
|
||||
O.b_hair = b_hair
|
||||
O.h_style = h_style
|
||||
O.r_facial = r_facial
|
||||
O.g_facial = g_facial
|
||||
O.b_facial = b_facial
|
||||
O.f_style = f_style
|
||||
O.r_eyes = r_eyes
|
||||
O.g_eyes = g_eyes
|
||||
O.b_eyes = b_eyes
|
||||
O.s_tone = s_tone
|
||||
O.age = age
|
||||
|
||||
O.real_name = real_name
|
||||
|
||||
O.wear_mask = wear_mask
|
||||
O.l_hand = l_hand
|
||||
O.r_hand = r_hand
|
||||
O.wear_suit = wear_suit
|
||||
O.w_uniform = w_uniform
|
||||
// O.w_radio = null
|
||||
O.shoes = shoes
|
||||
O.belt = belt
|
||||
O.gloves = gloves
|
||||
O.glasses = glasses
|
||||
O.head = head
|
||||
O.r_ear = r_ear
|
||||
O.l_ear = l_ear
|
||||
O.wear_id = wear_id
|
||||
O.r_store = r_store
|
||||
O.l_store = l_store
|
||||
O.back = back
|
||||
|
||||
O.stand_icon = stand_icon
|
||||
O.lying_icon = lying_icon
|
||||
|
||||
//O.last_b_state = last_b_state
|
||||
|
||||
//O.face_standing = face_standing
|
||||
//O.face_lying = face_lying
|
||||
|
||||
//O.hair_icon_state = hair_icon_state
|
||||
//O.face_icon_state = face_icon_state
|
||||
|
||||
//O.body_standing = body_standing
|
||||
//O.body_lying = body_lying
|
||||
for(var/obj/Q in src)
|
||||
Q.loc = O
|
||||
O.update_icons()//update_clothing()
|
||||
src.ghostize()
|
||||
O.loc = src.loc
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/t_virus
|
||||
name = "Z-Virus culture bottle"
|
||||
desc = "A small bottle. Contains Z-Virus virion in synthblood medium."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle3"
|
||||
amount_per_transfer_from_this = 5
|
||||
|
||||
New()
|
||||
var/datum/reagents/R = new/datum/reagents(20)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
var/datum/disease/F = new /datum/disease/z_virus(0)
|
||||
var/list/data = list("virus"= F)
|
||||
R.add_reagent("blood", 20, data)
|
||||
|
||||
///////////////////////////CURE//////////////////////////////////////////
|
||||
|
||||
datum/reagent/zed
|
||||
name = "Zombie Elixer"
|
||||
id = "zed"
|
||||
description = "For treating the Z-Virus."
|
||||
//reagent_state = LIQUID
|
||||
|
||||
on_mob_life(var/mob/M)//no more mr. panacea
|
||||
holder.remove_reagent(src.id, 0.2)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/zedpen
|
||||
desc = "Small non-refillable auto-injector for curing the Z-Virus in early stages."
|
||||
name = "Z.E.D. Pen."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "zed_1"
|
||||
flags = FPRINT | TABLEPASS/* | ONBELT*/
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
throw_speed = 7
|
||||
throw_range = 15
|
||||
m_amt = 60
|
||||
|
||||
/obj/item/weapon/zedpen/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/zedpen/New()
|
||||
var/datum/reagents/R = new/datum/reagents(10)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("zed", 10)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/zedpen/attack(mob/M as mob, mob/user as mob)
|
||||
if (!( istype(M, /mob) ))
|
||||
return
|
||||
if (reagents.total_volume)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\blue [] has been stabbed with [] by [].", M, src, user), 1)
|
||||
// user << "\red You stab [M] with the pen."
|
||||
// M << "\red You feel a tiny prick!"
|
||||
if(M.reagents) reagents.trans_to(M, 10)
|
||||
icon_state = "zed_0"
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/storage/firstaid/zed
|
||||
name = "Zed-Kit"
|
||||
icon_state = "zedkit"
|
||||
item_state = "firstaid-zed"
|
||||
|
||||
/obj/item/weapon/storage/firstaid/zed/New()
|
||||
|
||||
..()
|
||||
new /obj/item/weapon/zedpen( src )
|
||||
new /obj/item/weapon/zedpen( src )
|
||||
new /obj/item/weapon/zedpen( src )
|
||||
new /obj/item/weapon/zedpen( src )
|
||||
new /obj/item/weapon/zedpen( src )
|
||||
new /obj/item/weapon/zedpen( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
return
|
||||
|
||||
|
||||
////////////////////////////////////////////event code/////////////////////////////////////////
|
||||
|
||||
/obj/landmark/zspawn
|
||||
name = "zombie spawn"
|
||||
|
||||
/*
|
||||
/client/update_admins(var/rank)
|
||||
..()
|
||||
if(rank == "Game Master"/* || rank == "Coder" || rank == "Primary Administrator" || rank == "Administrator"*/)
|
||||
src.verbs += /client/proc/zombie_event
|
||||
*/
|
||||
|
||||
/client/proc/zombie_event()
|
||||
set category = "Special Verbs"
|
||||
set name = "Spawn Zombies"
|
||||
|
||||
// if(!istype(ticker.mode, /datum/game_mode/biohazard))
|
||||
// if(src)
|
||||
// src << "\red Wrong game mode!"
|
||||
// return
|
||||
|
||||
if(usr) message_admins("[key_name_admin(usr)] has spawned a zombie", 1)
|
||||
// command_alert("Confirmed outbreak of level 13 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
|
||||
var/list/t = list()
|
||||
for(var/obj/landmark/zspawn/O in world)
|
||||
t += O
|
||||
if(!t.len)
|
||||
usr<<"No spawn points exist."
|
||||
return
|
||||
var/obj/landmark/s = pick(t)
|
||||
var/mob/living/carbon/human/zombie/Z = new/mob/living/carbon/human/zombie(s.loc)
|
||||
|
||||
Z.gender = pick(MALE, FEMALE)
|
||||
|
||||
var/flooks = new/list()
|
||||
var/mlooks = new/list()
|
||||
|
||||
flooks += "0990CC0FF000000000DC0000033000902136F93"
|
||||
flooks += "0CC000033000000000DC0000033000C4308DEB4"
|
||||
flooks += "066000033000000000B90000033000E1E03FD3F"
|
||||
flooks += "066000033000000000690000033000A0F06C6D5"
|
||||
flooks += "0CC000000000000000EB0000000066D1F11EDA3"
|
||||
//flooks += "0FF0000FF000000000F50000000066B360B819"
|
||||
|
||||
mlooks += "066000033000000000CD000000000071E0F7382"
|
||||
mlooks += "066000033000000000B9006603300037909B45A"
|
||||
mlooks += "000000000000000000690000000066487060580"
|
||||
mlooks += "000000000000000000CD0000000000638074390"
|
||||
mlooks += "066000033066000033CD00000000000D8D20B9B"
|
||||
|
||||
if(Z.gender == MALE)
|
||||
Z.dna.unique_enzymes = pick(mlooks)
|
||||
else
|
||||
Z.dna.unique_enzymes = pick(flooks)
|
||||
|
||||
updateappearance(Z, Z.dna.unique_enzymes)
|
||||
|
||||
if(Z.gender == MALE)
|
||||
Z.real_name = text("[] []", pick(first_names_male), pick(last_names))
|
||||
else
|
||||
Z.real_name = text("[] []", pick(first_names_female), pick(last_names))
|
||||
|
||||
//var/a = pick("Janitor", "Medical Doctor", "Assistant", "Atmospheric Technician", "Security Officer", "Botanist", "Cargo Technician")
|
||||
//Z.Equip_Rank(a, 0)
|
||||
//Commented out by pygmy. Reason: Triggers my anti-spawn-at-menu code. Compromising this risks server.
|
||||
Z.loc = s.loc
|
||||
@@ -1,128 +1,128 @@
|
||||
/mob/living/silicon/ai/say(var/message)
|
||||
if(parent && istype(parent) && parent.stat != 2)
|
||||
parent.say(message)
|
||||
return
|
||||
//If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
|
||||
..(message)
|
||||
if(parent && istype(parent) && parent.stat != 2)
|
||||
parent.say(message)
|
||||
return
|
||||
//If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
|
||||
..(message)
|
||||
|
||||
/mob/living/silicon/say_understands(var/other)
|
||||
if (istype(other, /mob/living/carbon/human))
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/brain))
|
||||
return 1
|
||||
return ..()
|
||||
/mob/living/silicon/ai/say_understands(var/other)
|
||||
if (istype(other, /mob/living/carbon/human))
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon/robot))
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon/decoy))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/brain))
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon/pai))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/ai/say_quote(var/text)
|
||||
var/ending = copytext(text, length(text))
|
||||
|
||||
if (ending == "?")
|
||||
return "queries, \"[text]\"";
|
||||
else if (ending == "!")
|
||||
return "declares, \"[text]\"";
|
||||
|
||||
return "states, \"[text]\"";
|
||||
|
||||
/mob/living/silicon/ai/proc/IsVocal()
|
||||
|
||||
var/announcing_vox = 0 // Stores the time of the last announcement
|
||||
var/const/VOX_CHANNEL = 200
|
||||
var/const/VOX_DELAY = 100 // 10 seconds
|
||||
var/const/VOX_PATH = "sound/vox/"
|
||||
var/const/VOX_DELAY = 600
|
||||
|
||||
/mob/living/silicon/ai/verb/announcement_help()
|
||||
|
||||
set name = "Announcement Help"
|
||||
set desc = "Display a list of vocal words to announce to the crew."
|
||||
set category = "AI Commands"
|
||||
set name = "Announcement Help"
|
||||
set desc = "Display a list of vocal words to announce to the crew."
|
||||
set category = "AI Commands"
|
||||
|
||||
var/dat = "Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.<BR> \
|
||||
<UL><LI>You can also click on the word to preview it.</LI>\
|
||||
<LI>You can only say 30 words for every announcement.</LI>\
|
||||
<LI>Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.</LI></UL>\
|
||||
<font class='bad'>WARNING:</font><BR>Misuse of the announcement system will get you job banned.<HR>"
|
||||
|
||||
var/index = 0
|
||||
var/list/vox_words = flist(VOX_PATH) // flist will return a list of strings with all the files in the path
|
||||
for(var/word in vox_words)
|
||||
index++
|
||||
var/stripped_word = copytext(word, 1, length(word) - 3) // Remove the .wav
|
||||
dat += "<A href='?src=\ref[src];say_word=[stripped_word]'>[capitalize(stripped_word)]</A>"
|
||||
if(index != vox_words.len)
|
||||
dat += " / "
|
||||
var/dat = "Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.<BR> \
|
||||
<UL><LI>You can also click on the word to preview it.</LI>\
|
||||
<LI>You can only say 30 words for every announcement.</LI>\
|
||||
<LI>Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.</LI></UL>\
|
||||
<font class='bad'>WARNING:</font><BR>Misuse of the announcement system will get you job banned.<HR>"
|
||||
|
||||
src << browse(dat, "window=announce_help;size=500x400")
|
||||
var/index = 0
|
||||
for(var/word in vox_sounds)
|
||||
index++
|
||||
dat += "<A href='?src=\ref[src];say_word=[word]'>[capitalize(word)]</A>"
|
||||
if(index != vox_sounds.len)
|
||||
dat += " / "
|
||||
|
||||
var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
|
||||
/mob/living/silicon/ai/verb/announcement()
|
||||
|
||||
set name = "Announcement"
|
||||
set desc = "Create a vocal announcement by typing in the available words to create a sentence."
|
||||
set category = "AI Commands"
|
||||
set name = "Announcement"
|
||||
set desc = "Create a vocal announcement by typing in the available words to create a sentence."
|
||||
set category = "AI Commands"
|
||||
|
||||
if(announcing_vox > world.time)
|
||||
src << "<span class='notice'>Please wait [round((announcing_vox - world.time) / 10)] seconds.</span>"
|
||||
return
|
||||
if(announcing_vox > world.time)
|
||||
src << "<span class='notice'>Please wait [round((announcing_vox - world.time) / 10)] seconds.</span>"
|
||||
return
|
||||
|
||||
var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text
|
||||
var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text
|
||||
|
||||
last_announcement = message
|
||||
last_announcement = message
|
||||
|
||||
if(!message || announcing_vox > world.time)
|
||||
return
|
||||
if(!message || announcing_vox > world.time)
|
||||
return
|
||||
|
||||
var/list/words = stringsplit(trim(message), " ")
|
||||
var/list/incorrect_words = list()
|
||||
var/list/words = stringsplit(trim(message), " ")
|
||||
var/list/incorrect_words = list()
|
||||
|
||||
if(words.len > 30)
|
||||
words.len = 30
|
||||
if(words.len > 30)
|
||||
words.len = 30
|
||||
|
||||
// Detect incorrect words which aren't .wav files.
|
||||
for(var/word in words)
|
||||
word = trim(word)
|
||||
if(!word)
|
||||
words -= word
|
||||
continue
|
||||
if(!vox_sounds[word])
|
||||
incorrect_words += word
|
||||
|
||||
for(var/word in words)
|
||||
word = trim(word)
|
||||
if(!word)
|
||||
words -= word
|
||||
continue
|
||||
if(!vox_word_exists(word))
|
||||
incorrect_words += word
|
||||
if(incorrect_words.len)
|
||||
src << "<span class='notice'>These words are not available on the announcement system: [english_list(incorrect_words)].</span>"
|
||||
return
|
||||
|
||||
if(incorrect_words.len)
|
||||
src << "<span class='notice'>These words are not available on the announcement system: [english_list(incorrect_words)].</span>"
|
||||
return
|
||||
announcing_vox = world.time + VOX_DELAY
|
||||
|
||||
announcing_vox = world.time + VOX_DELAY
|
||||
log_game("[key_name_admin(src)] made a vocal announcement with the following message: [message].")
|
||||
|
||||
log_game("[key_name_admin(src)] made a vocal announcement with the following message: [message].")
|
||||
for(var/word in words)
|
||||
play_vox_word(word, src.z, null)
|
||||
|
||||
for(var/word in words)
|
||||
play_vox_word(word, src.z, null)
|
||||
|
||||
/proc/play_vox_word(var/word, var/z_level, var/mob/only_listener)
|
||||
|
||||
word = lowertext(word)
|
||||
word = lowertext(word)
|
||||
|
||||
if(vox_word_exists(word))
|
||||
if(vox_sounds[word])
|
||||
|
||||
var/sound_file = get_vox_file(word)
|
||||
var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL)
|
||||
voice.status = SOUND_STREAM
|
||||
var/sound_file = vox_sounds[word]
|
||||
var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL)
|
||||
voice.status = SOUND_STREAM
|
||||
|
||||
// If there is no single listener, broadcast to everyone in the same z level
|
||||
if(!only_listener)
|
||||
// Play voice for all mobs in the z level
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
var/turf/T = get_turf(M)
|
||||
if(T.z == z_level)
|
||||
M << voice
|
||||
else
|
||||
only_listener << voice
|
||||
return 1
|
||||
return 0
|
||||
// If there is no single listener, broadcast to everyone in the same z level
|
||||
if(!only_listener)
|
||||
// Play voice for all mobs in the z level
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
var/turf/T = get_turf(M)
|
||||
if(T.z == z_level)
|
||||
M << voice
|
||||
else
|
||||
only_listener << voice
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/vox_word_exists(var/word)
|
||||
return fexists("[VOX_PATH][word].wav")
|
||||
|
||||
/proc/get_vox_file(var/word)
|
||||
if(vox_word_exists(word))
|
||||
return file("[VOX_PATH][word].wav")
|
||||
|
||||
// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
|
||||
// We send the file to the user when they login.
|
||||
|
||||
/client/proc/preload_vox()
|
||||
var/list/vox_files = flist(VOX_PATH)
|
||||
for(var/file in vox_files)
|
||||
// src << "Downloading [file]"
|
||||
var/sound/S = sound("[VOX_PATH][file]")
|
||||
src << browse_rsc(S)
|
||||
// VOX sounds moved to /code/defines/vox_sounds.dm
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user