Merge branch 'master' of github.com:Baystation12/Baystation12

Conflicts:
	config/config.txt
This commit is contained in:
Miniature
2012-05-12 00:52:42 +09:30
389 changed files with 23433 additions and 22088 deletions

View File

@@ -87,8 +87,6 @@
#define FILE_DIR "code/js"
#define FILE_DIR "code/modules"
#define FILE_DIR "code/modules/admin"
#define FILE_DIR "code/modules/admin/new"
#define FILE_DIR "code/modules/admin/new/verbs"
#define FILE_DIR "code/modules/admin/verbs"
#define FILE_DIR "code/modules/assembly"
#define FILE_DIR "code/modules/chemical"
@@ -104,6 +102,7 @@
#define FILE_DIR "code/modules/DetectiveWork"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/maps"
#define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob"
#define FILE_DIR "code/modules/mob/dead"
@@ -174,7 +173,6 @@
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy"
#define FILE_DIR "code/WorkInProgress/Ported/Spawners"
#define FILE_DIR "code/WorkInProgress/Ported/ZeroPoint"
#define FILE_DIR "code/WorkInProgress/SkyMarshal"
#define FILE_DIR "code/WorkInProgress/Tastyfish"
#define FILE_DIR "code/WorkInProgress/virus2"
@@ -201,6 +199,7 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience"
@@ -404,6 +403,7 @@
#include "code\game\events\EventProcs\ninja_equipment.dm"
#include "code\game\events\EventProcs\space_ninja.dm"
#include "code\game\events\EventProcs\spacevines.dm"
#include "code\game\events\EventProcs\wormholes.dm"
#include "code\game\events\Events\AlienInfestation.dm"
#include "code\game\events\Events\Appendicitis.dm"
#include "code\game\events\Events\ElectricalStorm.dm"
@@ -434,6 +434,7 @@
#include "code\game\gamemodes\changeling\traitor_chan.dm"
#include "code\game\gamemodes\cult\cult.dm"
#include "code\game\gamemodes\cult\cult_items.dm"
#include "code\game\gamemodes\cult\cult_structures.dm"
#include "code\game\gamemodes\epidemic\epidemic.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
@@ -488,6 +489,7 @@
#include "code\game\machinery\flasher.dm"
#include "code\game\machinery\floodlight.dm"
#include "code\game\machinery\Freezer.dm"
#include "code\game\machinery\gateway.dm"
#include "code\game\machinery\hologram.dm"
#include "code\game\machinery\hydroponics.dm"
#include "code\game\machinery\igniter.dm"
@@ -538,13 +540,13 @@
#include "code\game\machinery\computer\atmos_alert.dm"
#include "code\game\machinery\computer\buildandrepair.dm"
#include "code\game\machinery\computer\camera_monitor.dm"
#include "code\game\machinery\computer\card.dm"
#include "code\game\machinery\computer\cloning.dm"
#include "code\game\machinery\computer\communications.dm"
#include "code\game\machinery\computer\computer.dm"
#include "code\game\machinery\computer\crew.dm"
#include "code\game\machinery\computer\HolodeckControl.dm"
#include "code\game\machinery\computer\hologram.dm"
#include "code\game\machinery\computer\id.dm"
#include "code\game\machinery\computer\law.dm"
#include "code\game\machinery\computer\lockdown.dm"
#include "code\game\machinery\computer\medical.dm"
@@ -668,6 +670,7 @@
#include "code\game\objects\closets\secure\cargo.dm"
#include "code\game\objects\closets\secure\civilian.dm"
#include "code\game\objects\closets\secure\engineering.dm"
#include "code\game\objects\closets\secure\hydroponics.dm"
#include "code\game\objects\closets\secure\medical.dm"
#include "code\game\objects\closets\secure\personal.dm"
#include "code\game\objects\closets\secure\research.dm"
@@ -793,11 +796,12 @@
#include "code\modules\admin\verbs\adminsay.dm"
#include "code\modules\admin\verbs\atmosdebug.dm"
#include "code\modules\admin\verbs\BrokenInhands.dm"
#include "code\modules\admin\verbs\cinematic.dm"
#include "code\modules\admin\verbs\custom_event.dm"
#include "code\modules\admin\verbs\deadsay.dm"
#include "code\modules\admin\verbs\debug.dm"
#include "code\modules\admin\verbs\diagnostics.dm"
#include "code\modules\admin\verbs\getruntimelog.dm"
#include "code\modules\admin\verbs\getlogs.dm"
#include "code\modules\admin\verbs\gimmicks.dm"
#include "code\modules\admin\verbs\mapping.dm"
#include "code\modules\admin\verbs\massmodvar.dm"
@@ -872,6 +876,11 @@
#include "code\modules\food\food.dm"
#include "code\modules\food\meat.dm"
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\maps\dmm_suite.dm"
#include "code\modules\maps\randomZlevel.dm"
#include "code\modules\maps\reader.dm"
#include "code\modules\maps\SwapMaps.dm"
#include "code\modules\maps\writer.dm"
#include "code\modules\mining\machine_input_output_plates.dm"
#include "code\modules\mining\machine_processing.dm"
#include "code\modules\mining\machine_stacking.dm"
@@ -883,6 +892,7 @@
#include "code\modules\mining\money_bag.dm"
#include "code\modules\mining\ores_materials_coins.dm"
#include "code\modules\mining\satchel_ore_box.dm"
#include "code\modules\mob\death.dm"
#include "code\modules\mob\login.dm"
#include "code\modules\mob\logout.dm"
#include "code\modules\mob\mob.dm"
@@ -891,9 +901,11 @@
#include "code\modules\mob\mob_grab.dm"
#include "code\modules\mob\mob_helpers.dm"
#include "code\modules\mob\mob_movement.dm"
#include "code\modules\mob\mob_transformation_simple.dm"
#include "code\modules\mob\say.dm"
#include "code\modules\mob\screen.dm"
#include "code\modules\mob\transform_procs.dm"
#include "code\modules\mob\dead\death.dm"
#include "code\modules\mob\dead\observer\hud.dm"
#include "code\modules\mob\dead\observer\login.dm"
#include "code\modules\mob\dead\observer\observer.dm"
@@ -907,6 +919,7 @@
#include "code\modules\mob\living\carbon\give.dm"
#include "code\modules\mob\living\carbon\shock.dm"
#include "code\modules\mob\living\carbon\alien\alien.dm"
#include "code\modules\mob\living\carbon\alien\death.dm"
#include "code\modules\mob\living\carbon\alien\say.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\death.dm"
@@ -973,6 +986,7 @@
#include "code\modules\mob\living\carbon\monkey\npc.dm"
#include "code\modules\mob\living\carbon\monkey\powers.dm"
#include "code\modules\mob\living\carbon\monkey\say.dm"
#include "code\modules\mob\living\silicon\death.dm"
#include "code\modules\mob\living\silicon\say.dm"
#include "code\modules\mob\living\silicon\silicon.dm"
#include "code\modules\mob\living\silicon\ai\ai.dm"
@@ -1022,6 +1036,7 @@
#include "code\modules\mob\organ\organ_external.dm"
#include "code\modules\mob\organ\organ_internal.dm"
#include "code\modules\mob\organ\pain.dm"
#include "code\modules\mob\simple_animal\behemoth.dm"
#include "code\modules\mob\simple_animal\cat.dm"
#include "code\modules\mob\simple_animal\constructs.dm"
#include "code\modules\mob\simple_animal\corgi.dm"
@@ -1143,8 +1158,6 @@
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\mapload\dmm_suite.dm"
#include "code\WorkInProgress\mapload\reader.dm"
#include "code\WorkInProgress\Mini\ATM.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Mini\pipe_heater.dm"
@@ -1180,6 +1193,7 @@
#include "code\WorkInProgress\virus2\monkeydispensor.dm"
#include "code\WorkInProgress\virus2\Prob.dm"
#include "code\WorkInProgress\Wrongnumber\weldbackpack.dm"
#include "interface\interface.dm"
#include "interface\skin.dmf"
#include "maps\tgstation.2.0.8.dmm"
// END_INCLUDE

View File

@@ -475,6 +475,7 @@ datum
return share(sharer)*/
check_gas_mixture(datum/gas_mixture/sharer)
if(!sharer) return 0
var/delta_oxygen = (oxygen_archived - sharer.oxygen_archived)/5
var/delta_carbon_dioxide = (carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5
var/delta_nitrogen = (nitrogen_archived - sharer.nitrogen_archived)/5

View File

@@ -195,15 +195,15 @@
..()
*/
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
var/list/blood_DNA_temp[1]
blood_DNA_temp[1] = list(H.dna.unique_enzymes, H.dna.b_type)
B.blood_DNA = blood_DNA_temp
B.virus2 = H.virus2
for(var/datum/disease/D in H.viruses)
var/datum/disease/newDisease = new D.type
B.viruses += newDisease
newDisease.holder = B
// var/obj/effect/decal/cleanable/blood/B = new(src.loc)
// var/list/blood_DNA_temp[1]
// blood_DNA_temp[1] = list(H.dna.unique_enzymes, H.dna.b_type)
// B.blood_DNA = blood_DNA_temp
// B.virus2 = H.virus2
// for(var/datum/disease/D in H.viruses)
// var/datum/disease/newDisease = new D.type
// B.viruses += newDisease
// newDisease.holder = B
H:weakened = max(H:weakened,2)
H:updatehealth()

View File

@@ -22,6 +22,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
//
var/obj/machinery/rust/core/owned_core
var/list/dormant_reactant_quantities = new
luminosity = 1
//
var/energy = 0
var/mega_energy = 0

View File

@@ -84,12 +84,14 @@ max volume of plasma storeable by the field = the total volume of a number of ti
if(owned_field)
owned_field.ChangeFieldStrength(field_strength)
icon_state = "core1"
luminosity = 1
return 1
proc/Shutdown()
icon_state = "core0"
on = 0
del(owned_field)
luminosity = 0
proc/AddParticles(var/name, var/quantity = 1)
if(owned_field)
@@ -104,6 +106,9 @@ max volume of plasma storeable by the field = the total volume of a number of ti
Shutdown()
return
//
luminosity = round(owned_field.field_strength/10)
luminosity = max(luminosity,1)
//
if(stat & (NOPOWER|BROKEN))
Shutdown()

View File

@@ -9,7 +9,7 @@
New()
spawn(0)
core_generator = locate() in range(15,src)
core_generator = locate() in world
attack_ai(mob/user)
attack_hand(user)

View File

@@ -20,7 +20,7 @@
fuel_injectors.Add("SCRAM")
fuel_injectors["SCRAM"] = new/list
spawn(0)
for(var/obj/machinery/rust/fuel_injector/Injector in range(50,src))
for(var/obj/machinery/rust/fuel_injector/Injector in world)
if(Injector.stage in fuel_injectors)
var/list/targetlist = fuel_injectors[Injector.stage]
targetlist.Add(Injector)

View File

@@ -44,7 +44,7 @@
return
var/t = "<B>Gyrotron Remote Control Console</B><BR>"
t += "<hr>"
for(var/obj/machinery/rust/gyrotron/gyro in range(25))
for(var/obj/machinery/rust/gyrotron/gyro in world)
if(gyro.remoteenabled && gyro.on)
t += "<font color=green>Gyrotron operational</font><br>"
t += "Operational mode: <font color=blue>"

View File

@@ -6,6 +6,7 @@
icon = 'effects.dmi'
icon_state = "energynet"
density = 0
anchored = 1
var/obj/machinery/rust/em_field/parent
var/mysize = 0

View File

@@ -61,12 +61,6 @@
//a lot of these variables are pretty hacked, so dont rely on the comments
/obj/machinery/power/supermatter/process()
var/datum/gas_mixture/env = loc.return_air()
//Remove gas from surrounding area
var/transfer_moles = gasefficency * env.total_moles()
var/datum/gas_mixture/removed = env.remove(transfer_moles)
//core can no longer spontaneously explode
/*
previousdet = det
@@ -111,11 +105,20 @@
#define REACTION_POWER_MODIFIER 0.5 //Higher == more overall power
*/
var/datum/gas_mixture/env = loc.return_air()
//nothing can happen in a vacuum
var/datum/gas_mixture/removed = env
var/retardation_factor = 0.5
if(env.total_moles())
//Remove gas from surrounding area
var/transfer_moles = gasefficency * env.total_moles()
removed = env.remove(transfer_moles)
//100% oxygen atmosphere = 100% plasma production
//100% nitrogen atmosphere = 0% plasma production
//anything else is halfway in between; an atmosphere with no nitrogen or oxygen will still be at 50% (but steadily rise as more oxygen is made)
var/total_moles = removed.total_moles()
var/retardation_factor = 0.5
if(total_moles)
retardation_factor += removed.oxygen / (total_moles * 2) - removed.nitrogen / (total_moles * 2)
else

View File

@@ -54,7 +54,7 @@
t_his = "her"
t_him = "her"
msg += "<EM>\a [src], one of the cat-like Tajarans.</EM>!\n"
msg += "<EM>\a [src], one of the cat-like Tajarans</EM>!\n"
//uniform
if (src.w_uniform && !skipjumpsuit)

View File

@@ -2,7 +2,7 @@
name = "tajaran"
real_name = "tajaran"
voice_name = "tajaran"
icon = 'mob.dmi'
icon = 'tajaran.dmi'
icon_state = "m-none"
var/list/tajspeak_letters
//
@@ -41,10 +41,10 @@
var/fat = ""
/*if (mutations & FAT)
fat = "fat"*/
/*
if (mutations & HULK)
overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk[fat][!lying ? "_s" : "_l"]")
*/
if (mutations & COLD_RESISTANCE)
overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]")
@@ -354,37 +354,8 @@
overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
belt.screen_loc = ui_belt
if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see the face
if (wear_id)
if (istype(wear_id, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/id = wear_id
if (id.registered_name)
name = id.registered_name
else
name = "Unknown"
else if (istype(wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = wear_id
if (pda.owner)
name = pda.owner
else
name = "Unknown"
else
name = "Unknown"
else
if (wear_id)
if (istype(wear_id, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/id = wear_id
if (id.registered_name != real_name)
name = "[real_name] (as [id.registered_name])"
else if (istype(wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = wear_id
if (pda.owner)
if (pda.owner != real_name)
name = "[real_name] (as [pda.owner])"
else
name = real_name
name = get_visible_name()
if (wear_id)
wear_id.screen_loc = ui_id
@@ -489,6 +460,8 @@
stand_icon = new /icon('tajaran.dmi', "torso_[g]_s")
lying_icon = new /icon('tajaran.dmi', "torso_[g]_l")
var/husk = (mutations & HUSK)
//var/obese = (mutations & FAT)
@@ -621,3 +594,94 @@
/mob/living/carbon/human/tajaran/co2overloadtime = null
/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70
/* //This is silly. -- Erthilo
/mob/living/carbon/human/tajaran/Emissary/
unacidable = 1
var/aegis = 1
/mob/living/carbon/human/tajaran/Emissary/New()
..()
reagents.add_reagent("hyperzine", 5000) //From the dark, to the light, it's a supersonic flight!
// Gotta keep it going!
if (!(mutations & HULK))
mutations |= HULK
if (!(mutations & LASER))
mutations |= LASER
if (!(mutations & XRAY))
mutations |= XRAY
sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
see_in_dark = 8
see_invisible = 2
if (!(mutations & COLD_RESISTANCE))
mutations |= COLD_RESISTANCE
if (!(mutations & TK))
mutations |= TK
if(!(mutations & HEAL))
mutations |= HEAL
spawn(0)
while(src)
adjustBruteLoss(-10)
adjustToxLoss(-10)
adjustOxyLoss(-10)
adjustFireLoss(-10)
sleep(10)
/mob/living/carbon/human/tajaran/Emissary/ex_act()
return
/mob/living/carbon/human/tajaran/Emissary/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
if(istype(target , /obj/machinery/door/airlock))
if(target:locked)
target:locked = 0
if(!target:density)
return 1
if(target:operating > 0)
return
if(!ticker)
return 0
if(!target:operating)
target:operating = 1
target:animate("opening")
target:sd_SetOpacity(0)
sleep(10)
target:layer = 2.7
target:density = 0
target:update_icon()
target:sd_SetOpacity(0)
target:update_nearby_tiles()
target:operating = -1
user << "You force the door open, shearing the bolts and burning out the motor."
if(target:operating)
target:operating = -1
else if(istype(target , /obj/machinery/door/firedoor))
target:open()
/mob/living/carbon/human/tajaran/Emissary/Life()
..()
if (!(mutations & HULK))
mutations |= HULK
if((stat == 2) && aegis)
src.show_message("\red [src]'s eyes open suddenlly.", 3, "\red \"I gave a solemn vow to never die for long.\"", 2)
src.heal_overall_damage(9001,9001)
src.stat = 0
aegis = 0
*/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,128 +0,0 @@
/obj/machinery/engine/laser
name = "Zero-point laser"
desc = "A super-powerful laser"
var/visible = 1
var/state = 1.0
var/obj/effect/beam/e_beam/first
var/power = 500
icon = 'engine.dmi'
icon_state = "laser"
anchored = 1
var/id
var/on = 0
var/freq = 50000
var/phase = 0
var/phase_variance = 0
/obj/machinery/engine/laser/process()
if(on)
if(!first)
src.first = new /obj/effect/beam/e_beam(src.loc)
src.first.master = src
src.first.dir = src.dir
src.first.power = src.power
src.first.freq = src.freq
src.first.phase = src.phase
src.first.phase_variance = src.phase_variance
step(first, dir)
if(first)
src.first.updatebeam()
else
src.first.updatebeam()
else
if(first)
del first
/obj/machinery/engine/laser/proc/setpower(var/powera)
src.power = powera
if(first)
first.setpower(src.power)
/obj/effect/beam/e_beam
name = "Laser beam"
icon = 'projectiles.dmi'
icon_state = "u_laser"
var/obj/machinery/engine/laser/master = null
var/obj/effect/beam/e_beam/next = null
var/power
var/freq = 50000
var/phase = 0
var/phase_variance = 0
anchored = 1
/obj/effect/beam/e_beam/New()
src.sd_SetLuminosity(4)
/obj/effect/beam/e_beam/proc/updatebeam()
if(!next)
if(get_step(src.loc,src.dir))
var/obj/effect/beam/e_beam/e = new /obj/effect/beam/e_beam(src.loc)
e.dir = src.dir
src.next = e
e.master = src.master
e.power = src.power
e.phase = src.phase
src.phase+=src.phase_variance
e.freq = src.freq
e.phase_variance = src.phase_variance
if(src.loc.density == 0)
for(var/atom/o in src.loc.contents)
if(o.density || o == src.master || (ismob(o) && !istype(o, /mob/dead)) )
o.laser_act(src)
del src
return
else
src.loc.laser_act(src)
del e
return
step(e,e.dir)
if(e)
e.updatebeam()
else
next.updatebeam()
/atom/proc/laser_act(var/obj/effect/beam/e_beam/b)
return
/mob/living/carbon/laser_act(var/obj/effect/beam/e_beam/b)
for(var/t in organs)
var/datum/organ/external/affecting = organs["[t]"]
if (affecting.take_damage(0, b.power/400,0,0))
UpdateDamageIcon()
else
UpdateDamage()
/obj/effect/beam/e_beam/Bump(atom/Obstacle)
Obstacle.laser_act(src)
del(src)
return
/obj/effect/beam/e_beam/proc/setpower(var/powera)
src.power = powera
if(src.next)
src.next.setpower(powera)
/obj/effect/beam/e_beam/Bumped()
src.hit()
return
/obj/effect/beam/e_beam/HasEntered(atom/movable/AM as mob|obj)
if (istype(AM, /obj/effect/beam))
return
spawn( 0 )
AM.laser_act(src)
src.hit()
return
return
/obj/effect/beam/e_beam/Del()
if(next)
del(next)
..()
return
/obj/effect/beam/e_beam/proc/hit()
del src
return

View File

@@ -1,130 +0,0 @@
//The laser control computer
//Used to control the lasers
/obj/machinery/computer/lasercon
name = "Laser control computer"
var/obj/machinery/engine/laser/laser = null
icon_state = "atmos"
var/id
var/advanced = 0
/obj/machinery/computer/lasercon/New()
spawn(1)
if(istype(src.id,/list))
laser = list()
for(var/obj/machinery/engine/laser/las in world)
if(las.id in src.id)
laser += las
else
for(var/obj/machinery/engine/laser/las in world)
if(las.id == src.id)
laser = list(las)
/obj/machinery/computer/lasercon/attack_ai(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
interact(user)
/obj/machinery/computer/lasercon/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
interact(user)
/obj/machinery/computer/lasercon/proc/interact(mob/user)
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
if (!istype(user, /mob/living/silicon))
user.machine = null
user << browse(null, "window=powcomp")
return
user.machine = src
var/t = "<TT><B>Laser status monitor</B><HR>"
var/obj/machinery/engine/laser/laser = src.laser[1]
if(!laser)
t += "\red No laser found"
else
t += "Power level: <A href = '?src=\ref[src];input=-4'>-</A> <A href = '?src=\ref[src];input=-3'>-</A> <A href = '?src=\ref[src];input=-2'>-</A> <A href = '?src=\ref[src];input=-1'>-</A> [add_lspace(laser.power,5)] <A href = '?src=\ref[src];input=1'>+</A> <A href = '?src=\ref[src];input=2'>+</A> <A href = '?src=\ref[src];input=3'>+</A> <A href = '?src=\ref[src];input=4'>+</A><BR>"
if(advanced)
t += "Frequency: <A href = '?src=\ref[src];freq=-10000'>-</A> <A href = '?src=\ref[src];freq=-1000'>-</A> [add_lspace(laser.freq,5)] <A href = '?src=\ref[src];freq=1000'>+</A> <A href = '?src=\ref[src];freq=10000'>+</A><BR>"
t += "Output: [laser.on ? "<B>Online</B> <A href = '?src=\ref[src];online=1'>Offline</A>" : "<A href = '?src=\ref[src];online=1'>Online</A> <B>Offline</B> "]<BR>"
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A></TT>"
user << browse(t, "window=lascomp;size=420x700")
onclose(user, "lascomp")
/obj/machinery/computer/lasercon/Topic(href, href_list)
..()
if( href_list["close"] )
usr << browse(null, "window=lascomp")
usr.machine = null
return
else if( href_list["input"] )
var/i = text2num(href_list["input"])
var/d = 0
switch(i)
if(-4)
d = -1000
if(4)
d = 1000
if(1)
d = 1
if(-1)
d = -1
if(2)
d = 10
if(-2)
d = -10
if(3)
d = 100
if(-3)
d = -100
for(var/obj/machinery/engine/laser/laser in src.laser)
laser.power += d
laser.setpower(max(1, min(3000, laser.power)))// clamp to range
src.updateDialog()
else if( href_list["online"] )
for(var/obj/machinery/engine/laser/laser in src.laser)
laser.on = !laser.on
src.updateDialog()
else if( href_list["freq"] )
var/amt = text2num(href_list["freq"])
for(var/obj/machinery/engine/laser/laser in src.laser)
if(laser.freq+amt>0)
laser.freq+=amt
src.updateDialog()
/obj/machinery/computer/lasercon/process()
if(!(stat & (NOPOWER|BROKEN)) )
use_power(250)
//src.updateDialog()
/obj/machinery/computer/lasercon/power_change()
if(stat & BROKEN)
icon_state = "broken"
else
if( powered() )
icon_state = initial(icon_state)
stat &= ~NOPOWER
else
spawn(rand(0, 15))
src.icon_state = "c_unpowered"
stat |= NOPOWER

View File

@@ -1,120 +0,0 @@
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
#define THERMAL_RELEASE_MODIFIER 50 //Higher == less heat released during reaction
#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
#define OXYGEN_RELEASE_MODIFIER 1500 //Higher == less oxygen released at high temperature/power
#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power
/obj/machinery/engine/supermatter
name = "Supermatter"
desc = "A strangely translucent and iridescent crystal. \red You get headaches just from looking at it."
icon = 'engine.dmi'
icon_state = "darkmatter"
density = 1
anchored = 1
var/gasefficency = 0.25
var/det = 0
var/previousdet = 0
var/const/explosiondet = 3500
var/const/warningtime = 50 // Make the CORE OVERLOAD message repeat only every aprox. ?? seconds
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
/obj/machinery/engine/klaxon
name = "Emergency Klaxon"
icon = 'engine.dmi'
icon_state = "darkmatter"
density = 1
anchored = 1
var/obj/machinery/engine/supermatter/sup
/obj/machinery/engine/klaxon/process()
if(!sup)
for(var/obj/machinery/engine/supermatter/T in world)
sup = T
break
if(sup.det >= 1)
return
/obj/machinery/engine/supermatter/process()
var/turf/simulated/L = loc
//Ok, get the air from the turf
var/datum/gas_mixture/env = L.return_air()
//Remove gas from surrounding area
var/transfer_moles = gasefficency * env.total_moles()
var/datum/gas_mixture/removed = env.remove(transfer_moles)
previousdet = det
det += (removed.temperature - 1000) / 150
det = max(det, 0)
if(det > 0 && removed.temperature > 1000) // while the core is still damaged and it's still worth noting its status
if((world.realtime - lastwarning) / 10 >= warningtime)
lastwarning = world.realtime
if(explosiondet - det <= 300)
radioalert("CORE EXPLOSION IMMINENT","Core control computer")
else if(det >= previousdet) // The damage is still going up
radioalert("CORE OVERLOAD","Core control computer")
else // Phew, we're safe
radioalert("Core returning to safe operating levels.","Core control computer")
if(det > explosiondet)
roundinfo.core = 1
//proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, force = 0)
explosion(src.loc,8,15,20,30,1)
det = 0
if (!removed)
return 1
var/power = max(round((removed.temperature - T0C) / 20), 0) //Total laser power plus an overload factor
//Get the collective laser power
for(var/dir in cardinal)
var/turf/T = get_step(L, dir)
for(var/obj/effect/beam/e_beam/item in T)
power += item.power
//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/device_energy = oxygen * power
device_energy *= removed.temperature / T0C
device_energy = round(device_energy * 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 += max((device_energy / THERMAL_RELEASE_MODIFIER), 0)
removed.temperature = min(removed.temperature, 1500)
//Calculate how much gas to release
removed.toxins += max(round(device_energy / PLASMA_RELEASE_MODIFIER), 0)
removed.oxygen += max(round((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER), 0)
env.merge(removed)
//Not functional currently. -- SkyMarshal
/*
for(var/mob/living/carbon/l in view(src, 6)) // you have to be seeing the core to get hallucinations
if(prob(10) && !(l.glasses && istype(l.glasses, /obj/item/clothing/glasses/meson)))
l.hallucination = 50
*/
for(var/mob/living/l in view(src,3))
l.bruteloss += 50
l.updatehealth()
return 1

View File

@@ -1,6 +1,6 @@
/obj/item/weapon/stamperaser
name = "Eraser"
desc = "Some type of eraser, you guess."
name = "eraser"
desc = "It looks like some kind of eraser."
flags = FPRINT | TABLEPASS
icon = 'items.dmi'
icon_state = "zippo"

View File

@@ -2,10 +2,7 @@
var/server_name = null // server name (for world name / status)
var/server_suffix = 0 // generate numeric suffix based on server port
var/medal_hub = null // medal hub name
var/medal_password = null // medal hub password
var/log_ooc = 0 // log OOC channek
var/log_ooc = 0 // log OOC channel
var/log_access = 0 // log login/logout
var/log_say = 0 // log client say
var/log_admin = 0 // log admin actions
@@ -35,6 +32,8 @@
var/Tensioner_Active = 0 // If the tensioner is running.
var/allow_Metadata = 0 // Metadata is supported.
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
var/Ticklag = 0.9
var/Tickcomp = 0
var/list/mode_names = list()
var/list/modes = list() // allowed modes
@@ -51,6 +50,8 @@
var/server
var/banappeals
var/wikiurl
var/forumurl
//Alert level description
var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
@@ -211,12 +212,6 @@
if ("serversuffix")
config.server_suffix = 1
if ("medalhub")
config.medal_hub = value
if ("medalpass")
config.medal_password = value
if ("hostedby")
config.hostedby = value
@@ -226,6 +221,12 @@
if ("banappeals")
config.banappeals = value
if ("wikiurl")
config.wikiurl = value
if ("forumurl")
config.forumurl = value
if ("guest_jobban")
config.guest_jobban = 1
@@ -297,6 +298,12 @@
if("useircbot")
useircbot = 1
if("ticklag")
Ticklag = text2num(value)
if("tickcomp")
Tickcomp = 1
if("require_heads_alive")
config.require_heads_alive = value
@@ -381,8 +388,8 @@
sqllogging = 1
else
diary << "Unknown setting in configuration: '[name]'"
/*/datum/configuration/proc/loadforumsql(filename) // -- TLE
/* //Don't touch this, we don't use it. DMTG
/datum/configuration/proc/loadforumsql(filename) // -- TLE
var/text = file2text(filename)
if (!text)
@@ -433,8 +440,8 @@
if ("authenticatedgroup")
forum_authenticated_group = value
else
diary << "Unknown setting in configuration: '[name]'"*/
diary << "Unknown setting in configuration: '[name]'"
*/
/datum/configuration/proc/pick_mode(mode_name)
// I wish I didn't have to instance the game modes in order to look up
// their information, but it is the only way (at least that I know of).

View File

@@ -167,10 +167,10 @@ client
if(istype(D,/atom))
var/atom/A = D
body += "<a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=name'><b>[D]</b></a>"
if(ismob(A))
body += "<a href='byond://?src=\ref[src];rename=\ref[D]'><b>[D]</b></a>"
if(A.dir)
body += "<br><font size='1'><a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=left'><<</a> <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=dir'>[dir2text(A.dir)]</a> <a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=right'>>></a></font>"
if(istype(A,/mob))
var/mob/M = A
body += "<br><font size='1'><a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=ckey'>[M.ckey ? M.ckey : "No ckey"]</a> / <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=real_name'>[M.real_name ? M.real_name : "No real name"]</a></font>"
body += {"
@@ -185,6 +185,10 @@ client
"}
else
body += "<a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=name'><b>[D]</b></a>"
if(A.dir)
body += "<br><font size='1'><a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=left'><<</a> <a href='byond://?src=\ref[src];datumedit=\ref[D];varnameedit=dir'>[dir2text(A.dir)]</a> <a href='byond://?src=\ref[src];rotatedatum=\ref[D];rotatedir=right'>>></a></font>"
else
body += "<b>[D]</b>"
@@ -239,7 +243,8 @@ client
body += "<option value='byond://?src=\ref[src];ninja=\ref[D]'>Make Space Ninja</option>"
body += "<option value='byond://?src=\ref[src];godmode=\ref[D]'>Toggle Godmode</option>"
body += "<option value='byond://?src=\ref[src];build_mode=\ref[D]'>Toggle Build Mode</option>"
// body += "<option value='byond://?src=\ref[src];direct_control=\ref[D]'>Assume Direct Control</option>"
body += "<option value='byond://?src=\ref[src];direct_control=\ref[D]'>Assume Direct Control</option>"
body += "<option value='byond://?src=\ref[src];drop_everything=\ref[D]'>Drop Everything</option>"
if(ishuman(D))
body += "<option value>---</option>"
body += "<option value='byond://?src=\ref[src];makeai=\ref[D]'>Make AI</option>"
@@ -385,10 +390,54 @@ client
return html
Topic(href, href_list, hsrc)
//All BYOND links pass through client/Topic() FIRST and are then directed to [hsrc]/Topic() by the ..() call at the end.
client/Topic(href, href_list, hsrc)
//search the href for script injection //This is a temporary measure
if( findtext(href,"<script",1,0) )
world.log << "Attempted use of scripts within a topic call, by [src]"
message_admins("Attempted use of scripts within a topic call, by [src]")
del(usr)
return
if(href_list["priv_msg"])
var/client/C = locate(href_list["priv_msg"])
if(ismob(C)) //Old stuff can pass in mobs instead of clients
var/mob/M = C
C = M.client
cmd_admin_pm(C,null)
return
else
//THIS **REALLY** NEEDS TO BE REWRITTEN AS obj/admin/Topic or something. As a matter of urgency.
if( (usr.client == src) && src.holder )
if (href_list["Vars"])
debug_variables(locate(href_list["Vars"]))
//~CARN: for renaming mobs (updates their real_name and their ID/PDA if applicable).
else if (href_list["rename"])
var/new_name = input(usr,"What would you like to name this mob?","Input a name") as text|null
if(!new_name) return
var/mob/M = locate(href_list["rename"])
if(!istype(M)) return
message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].", 1)
if(istype(M, /mob/living/carbon/human))
for(var/obj/item/weapon/card/id/ID in M.contents)
if(ID.registered_name == M.real_name)
ID.name = "[new_name]'s ID Card ([ID.assignment])"
ID.registered_name = new_name
break
for(var/obj/item/device/pda/PDA in M.contents)
if(PDA.owner == M.real_name)
PDA.name = "PDA-[new_name] ([PDA.ownjob])"
PDA.owner = new_name
break
M.real_name = new_name
M.name = new_name
M.original_name = new_name
href_list["datumrefresh"] = href_list["rename"]
else if (href_list["varnameedit"])
if(!href_list["datumedit"] || !href_list["varnameedit"])
usr << "Varedit error: Not all information has been sent Contact a coder."
@@ -498,7 +547,21 @@ client
togglebuildmode(MOB)
href_list["datumrefresh"] = href_list["build_mode"]
/* else if (href_list["direct_control"])
else if (href_list["drop_everything"])
if(!href_list["drop_everything"])
return
var/mob/MOB = locate(href_list["drop_everything"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
if(usr.client)
usr.client.cmd_admin_drop_everything(MOB)
else if (href_list["direct_control"])
if(!href_list["direct_control"])
return
var/mob/MOB = locate(href_list["direct_control"])
@@ -510,7 +573,7 @@ client
return
if(usr.client)
usr.client.cmd_assume_direct_control(MOB)*/
usr.client.cmd_assume_direct_control(MOB)
else if (href_list["delall"])
if(!href_list["delall"])
@@ -686,23 +749,6 @@ client
usr << "Mob doesn't exist anymore"
return
holder.Topic(href, list("makeai"=href_list["makeai"]))
else if (href_list["makeaisilent"])
var/mob/M = locate(href_list["makeaisilent"])
if(!M)
return
if(!ishuman(M))
usr << "This can only be done to objects of type /mob/living/carbon/human"
return
if(!src.holder)
usr << "You are not an administrator."
return
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
if(!action_type || action_type == "Cancel")
return
if(!M)
usr << "Mob doesn't exist anymore"
return
holder.Topic(href, list("makeaisilent"=href_list["makeaisilent"]))
else if (href_list["adjustDamage"] && href_list["mobToDamage"])
var/mob/M = locate(href_list["mobToDamage"])
var/Text = locate(href_list["adjustDamage"])
@@ -731,7 +777,6 @@ client
else
..()
if (href_list["datumrefresh"])
if(!href_list["datumrefresh"])
return
@@ -741,3 +786,8 @@ client
if(!istype(DAT,/datum))
return
src.debug_variables(DAT)
return
//Ok, all done with that admin crap. redirect it to the Topic for hsrc
..()

View File

@@ -100,6 +100,7 @@
var/turf/destturf
var/turf/curturf = get_turf(teleatom)
var/area/destarea = get_area(destination)
if(precision)
var/list/posturfs = circlerangeturfs(destination,precision)
destturf = safepick(posturfs)
@@ -125,6 +126,7 @@
// Re-Apply lum
teleatom.sd_SetLuminosity(prevlum)
destarea.Entered(teleatom)
return 1

View File

@@ -972,6 +972,10 @@ var/global/datum/tension/tension_master
//del(spawn_location) // Commenting this out for multiple commando teams.
return new_syndicate_commando
/proc/create_borg_death_commando(obj/spawn_location, name)
var/mob/living/silicon/robot/new_borg_deathsquad = new(spawn_location.loc, 1)

View File

@@ -46,6 +46,10 @@ datum/mind
recipient << browse(output,"window=memory")
proc/edit_memory()
if(!ticker || !ticker.mode)
alert("Not before round-start!", "Alert")
return
var/out = "<B>[current.real_name]</B><br>"
out += "Assigned role: [assigned_role]. <a href='?src=\ref[src];role_edit=1'>Edit</a><br>"
out += "Factions and special roles:<br>"
@@ -68,12 +72,12 @@ datum/mind
if (ticker.mode.config_tag=="revolution")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if (assigned_role in command_positions)
/* if (assigned_role in command_positions)
text += "<b>HEAD</b>|officer|employee|headrev|rev"
else if (assigned_role in list("Security Officer", "Detective", "Warden"))
text += "head|<b>OFFICER</b>|employee|headre|rev"
else if (src in ticker.mode.head_revolutionaries)
text = "head|officer|<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
text += "head|<b>OFFICER</b>|employee|headre|rev"*/
if (src in ticker.mode.head_revolutionaries)
text = "<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
var/list/L = current.get_contents()
@@ -90,9 +94,9 @@ datum/mind
if (objectives.len==0)
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
else if (src in ticker.mode.revolutionaries)
text += "head|officer|<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
text += "<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
else
text += "head|officer|<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
sections["revolution"] = text
/** CULT ***/
@@ -100,19 +104,19 @@ datum/mind
if (ticker.mode.config_tag=="cult")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if (assigned_role in command_positions)
/* if (assigned_role in command_positions)
text += "<b>HEAD</b>|officer|employee|cultist"
else if (assigned_role in list("Security Officer", "Detective", "Warden"))
text += "head|<b>OFFICER</b>|employee|cultist"
else if (src in ticker.mode.cult)
text += "head|officer|<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
text += "head|<b>OFFICER</b>|employee|cultist"*/
if (src in ticker.mode.cult)
text += "<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
text += "<br>Give <a href='?src=\ref[src];cult=tome'>tome</a>|<a href='?src=\ref[src];cult=amulet'>amulet</a>."
/*
if (objectives.len==0)
text += "<br>Objectives are empty! Set to sacrifice and <a href='?src=\ref[src];cult=escape'>escape</a> or <a href='?src=\ref[src];cult=summon'>summon</a>."
*/
else
text += "head|officer|<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
sections["cult"] = text
/** WIZARD ***/
@@ -454,8 +458,8 @@ datum/mind
// copy targets
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
if (valid_head)
for (var/datum/objective/assassinate/O in valid_head.objectives)
var/datum/objective/assassinate/rev_obj = new
for (var/datum/objective/mutiny/O in valid_head.objectives)
var/datum/objective/mutiny/rev_obj = new
rev_obj.owner = src
rev_obj.target = O.target
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
@@ -1011,8 +1015,8 @@ datum/mind
// copy targets
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
if (valid_head)
for (var/datum/objective/assassinate/O in valid_head.objectives)
var/datum/objective/assassinate/rev_obj = new
for (var/datum/objective/mutiny/O in valid_head.objectives)
var/datum/objective/mutiny/rev_obj = new
rev_obj.owner = src
rev_obj.target = O.target
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."

View File

@@ -91,7 +91,8 @@ datum/shuttle_controller
emergency_shuttle
process()
if(!online) return
if(!online)
return
var/timeleft = timeleft()
if(timeleft > 1e5) // midnight rollover protection
timeleft = 0

View File

@@ -10,6 +10,8 @@
range = -1
include_user = 1
var phaseshift = 0
var/jaunt_duration = 50 //in deciseconds
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
@@ -25,6 +27,25 @@
animation.icon_state = "liquify"
animation.layer = 5
animation.master = holder
if(phaseshift == 1)
animation.dir = target.dir
flick("phase_shift",animation)
target.loc = holder
target.client.eye = holder
sleep(jaunt_duration)
mobloc = get_turf(target.loc)
animation.loc = mobloc
target.canmove = 0
sleep(20)
animation.dir = target.dir
flick("phase_shift2",animation)
sleep(5)
target.loc = mobloc
target.canmove = 1
target.client.eye = target
del(animation)
del(holder)
else
flick("liquify",animation)
target.loc = holder
target.client.eye = holder

View File

@@ -317,5 +317,5 @@
invocation_type = "none"
range = -1
include_user = 1
phaseshift = 1
jaunt_duration = 50 //in deciseconds

View File

@@ -144,12 +144,15 @@ proc/process_ghost_teleport_locs()
music = "music/escape.ogg"
/area/shuttle/escape/station
name = "Emergency Shuttle Station"
icon_state = "shuttle2"
/area/shuttle/escape/centcom
name = "Emergency Shuttle Centcom"
icon_state = "shuttle"
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
name = "Emergency Shuttle Transit"
icon_state = "shuttle"
/area/shuttle/escape_pod1
@@ -481,6 +484,9 @@ proc/process_ghost_teleport_locs()
//PRISON
/area/prison
name = "Brig Prison Wing"
icon_state = "brig"
/area/prison/arrival_airlock
name = "Prison Station Airlock"
@@ -1032,7 +1038,7 @@ proc/process_ghost_teleport_locs()
//Security
/area/security/main
name = "Security"
name = "Security Office"
icon_state = "security"
/area/security/lobby
@@ -1498,6 +1504,21 @@ proc/process_ghost_teleport_locs()
icon_state = "tcomsatlounge"
/area/turret_protected/AssistantRoom
name = "Assistant Room"
icon_state = "storage"
sd_lighting = 0
/////////////////////////////////////////////////////////////////////
/*
Lists of areas to be used with is_type_in_list.

View File

@@ -17,9 +17,6 @@
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
///Chemistry.
//Detective Work, used for the duplicate data points kept in the scanners
var/list/original_atom
proc/assume_air(datum/air_group/giver)
del(giver)
return null

View File

@@ -14,6 +14,11 @@
//END Admin Things
//Key auth things
// authenticate = 0
// var/authenticated = 0
// var/authenticating = 0
var/listen_ooc = 1
var/move_delay = 1
var/moving = null

View File

@@ -151,9 +151,7 @@ var
shuttlecoming = 0
join_motd = null
auth_motd = null
rules = null
no_auth_motd = null
forceblob = 0
custom_event_msg = null
@@ -230,4 +228,4 @@ var
// For FTP requests. (i.e. downloading runtime logs.)
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
fileaccess_timer = 600 //Cannot access files by ftp until the game is finished setting up and stuff.
fileaccess_timer = 1800 //Cannot access files by ftp until the game is finished setting up and stuff.

View File

@@ -10,6 +10,7 @@
var/icon/stand_icon = null
var/icon/lying_icon = null
var/icon/resting_icon = null
var/icon/running_icon = null
var/last_b_state = 1.0

View File

@@ -383,7 +383,6 @@
opacity = 0
density = 0
/obj/hud
name = "hud"
unacidable = 1
@@ -400,9 +399,8 @@
var/obj/screen/g_dither = null
var/obj/screen/blurry = null
var/list/darkMask = null
var/obj/screen/station_explosion = null
var/h_type = /obj/screen
var/h_type = /obj/screen //this is like...the most pointless thing ever. Use a god damn define!
/obj/item
name = "item"
@@ -418,10 +416,6 @@
var/burning = null
var/hitsound = null
var/w_class = 3.0
var/wielded = 0 // 1 if item is two handed and grabbed with two hands
var/twohanded = 0 // Two handed and wielded off by default, nyoro~n -Agouri
var/force_unwielded = 0
var/force_wielded = 0
var/protective_temperature = 0 // Placing this here to avoid runtime errors, due to tiny items being allowed on ears and being queried for this variable
flags = FPRINT | TABLEPASS
pass_flags = PASSTABLE

View File

@@ -58,45 +58,6 @@
var/temp = null
/obj/machinery/computer/hologram_comp
name = "Hologram Computer"
desc = "Rumoured to control holograms."
icon = 'stationobjs.dmi'
icon_state = "holo_console0"
var/obj/machinery/hologram/projector/projector = null
var/temp = null
var/lumens = 0.0
var/h_r = 245.0
var/h_g = 245.0
var/h_b = 245.0
/obj/machinery/computer/secure_data
name = "Security Records"
desc = "Used to view and edit personnel's security records"
icon_state = "security"
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/disk/records/disk = null
var/authenticated = null
var/rank = null
var/screen = null
var/datum/data/record/active1 = null
var/datum/data/record/active2 = null
var/a_id = null
var/temp = null
var/printing = null
var/can_change_id = 0
var/list/Perp
var/tempname = null
/obj/machinery/computer/secure_data/detective_computer
icon = 'computer.dmi'
icon_state = "messyfiles"
/obj/machinery/computer/security
name = "Security Cameras"
desc = "Used to access the various cameras on the station."

View File

@@ -63,10 +63,20 @@
var/datum/disease2/disease/virus2 = null
var/OriginalMob = null
Del()
/obj/effect/decal/cleanable/blood/Del()
for(var/datum/disease/D in viruses)
D.cure(0)
..()
/* //This breaks a few blood related things, thankfully we don't get too many decals -- Erthilo
/obj/effect/decal/cleanable/blood/New()
..()
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
return
if(src.loc && isturf(src.loc))
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
if(B != src)
del(B)
*/
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"

View File

@@ -278,6 +278,23 @@
plant_type = 0
growthstages = 6
/obj/item/seeds/bluespacetomatoseed
name = "pack of blue-space tomato seeds"
desc = "These seeds grow into blue-space tomato plants."
icon_state = "seed-bluespacetomato"
mypath = "/obj/item/seeds/bluespacetomatoseed"
species = "bluespacetomato"
plantname = "Blue-Space Tomato Plants"
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato"
lifespan = 25
endurance = 15
maturation = 8
production = 6
yield = 2
potency = 10
plant_type = 0
growthstages = 6
/obj/item/seeds/cornseed
name = "pack of corn seeds"
desc = "I don't mean to sound corny..."
@@ -400,7 +417,7 @@
potency = 10
oneharvest = 1
plant_type = 0
growthstages = 5
growthstages = 3
/obj/item/seeds/amanitamycelium
name = "pack of fly amanita mycelium"
@@ -1143,46 +1160,6 @@
reagents.add_reagent("coco", 4+round((potency / 5), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
//This object is just a transition object. All it does is make a grass tile and delete itself.
/obj/item/weapon/reagent_containers/food/snacks/grown/grass
seed = "/obj/item/seeds/grassseed"
name = "grass"
desc = "Green and lush."
icon_state = "spawner"
potency = 20
New()
new/obj/item/stack/tile/grass(src.loc)
spawn(5) //Workaround to keep harvesting from working weirdly.
del(src)
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
/obj/item/weapon/reagent_containers/food/snacks/grown/money
seed = "/obj/item/seeds/cashseed"
name = "dosh"
desc = "Green and lush."
icon_state = "spawner"
potency = 10
New()
switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
if(0 to 10)
new/obj/item/weapon/spacecash/(src.loc)
if(11 to 20)
new/obj/item/weapon/spacecash/c10(src.loc)
if(21 to 30)
new/obj/item/weapon/spacecash/c20(src.loc)
if(31 to 40)
new/obj/item/weapon/spacecash/c50(src.loc)
if(41 to 50)
new/obj/item/weapon/spacecash/c100(src.loc)
if(51 to 60)
new/obj/item/weapon/spacecash/c200(src.loc)
if(61 to 80)
new/obj/item/weapon/spacecash/c500(src.loc)
else
new/obj/item/weapon/spacecash/c1000(src.loc)
spawn(5) //Workaround to keep harvesting from working weirdly.
del(src)
/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane
seed = "/obj/item/seeds/sugarcaneseed"
name = "sugarcane"
@@ -1707,7 +1684,7 @@
seed = "/obj/item/seeds/towermycelium"
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
user.show_message("<span class='notice'>You make planks out of the [src]!</span>", 1)
for(var/i=0,i<2,i++)
new /obj/item/stack/sheet/wood (src.loc)
@@ -1985,3 +1962,99 @@
New()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
// *************************************
// Complex Grown Object Defines -
// Putting these at the bottom so they don't clutter the list up. -Cheridan
// *************************************
//This object is just a transition object. All it does is make a grass tile and delete itself.
/obj/item/weapon/reagent_containers/food/snacks/grown/grass
seed = "/obj/item/seeds/grassseed"
name = "grass"
desc = "Green and lush."
icon_state = "spawner"
potency = 20
New()
new/obj/item/stack/tile/grass(src.loc)
spawn(5) //Workaround to keep harvesting from working weirdly.
del(src)
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
/obj/item/weapon/reagent_containers/food/snacks/grown/money
seed = "/obj/item/seeds/cashseed"
name = "dosh"
desc = "Green and lush."
icon_state = "spawner"
potency = 10
New()
switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan
if(0 to 10)
new/obj/item/weapon/spacecash/(src.loc)
if(11 to 20)
new/obj/item/weapon/spacecash/c10(src.loc)
if(21 to 30)
new/obj/item/weapon/spacecash/c20(src.loc)
if(31 to 40)
new/obj/item/weapon/spacecash/c50(src.loc)
if(41 to 50)
new/obj/item/weapon/spacecash/c100(src.loc)
if(51 to 60)
new/obj/item/weapon/spacecash/c200(src.loc)
if(61 to 80)
new/obj/item/weapon/spacecash/c500(src.loc)
else
new/obj/item/weapon/spacecash/c1000(src.loc)
spawn(5) //Workaround to keep harvesting from working weirdly.
del(src)
/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
seed = "/obj/item/seeds/bluespacetomatoseed"
name = "blue-space tomato"
desc = "So lubricated, you might slip through space-time."
icon_state = "bluespacetomato"
potency = 10
origin_tech = "bluespace=3"
New()
..()
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
reagents.add_reagent("singulo", 1+round((potency / 5), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
throw_impact(atom/hit_atom)
..()
var/mob/M = usr
var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport.
var/inner_teleport_radius = potency/15
var/list/turfs = new/list()
for(var/turf/T in orange(M,outer_teleport_radius))
if(T in orange(M,inner_teleport_radius)) continue
if(istype(T,/turf/space)) continue
if(T.density) continue
if(T.x>world.maxx-outer_teleport_radius || T.x<outer_teleport_radius) continue
if(T.y>world.maxy-outer_teleport_radius || T.y<outer_teleport_radius) continue
turfs += T
if(!turfs.len)
var/list/turfs_to_pick_from = list()
for(var/turf/T in orange(M,outer_teleport_radius))
if(!(T in orange(M,inner_teleport_radius)))
turfs_to_pick_from += T
turfs += pick(/turf in turfs_to_pick_from)
var/turf/picked = pick(turfs)
if(!isturf(picked)) return
switch(rand(1,2))//Allows for easy addition of more bluespace weirdness.
if(1) // Teleports the person who threw the tomato.
new/obj/effect/effect/sparks(M.loc)
new/obj/effect/decal/ash(M.loc) //Leaves a pile of ash behind for dramatic effect.
M.loc = picked
new/obj/effect/effect/sparks(M.loc) //Two set of sparks, one before the teleport and one after.
if(2) //Teleports mob the tomato hit instead.
for(var/mob/A in get_turf(hit_atom))
new/obj/effect/effect/sparks(A.loc)
new/obj/effect/decal/ash(A.loc)
A.loc = picked
new/obj/effect/effect/sparks(A.loc)
src.visible_message("<span class='notice'>The [src.name] has been squashed, causing a distortion in space-time.</span>","<span class='moderate'>You hear a smack.</span>")
del(src)
return

View File

@@ -113,6 +113,7 @@
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
var/network
New()
if(z == 1)
@@ -258,10 +259,9 @@
/obj/machinery/driver_button
name = "mass driver button"
desc = "FIRE AWAY!"
icon = 'objects.dmi'
icon_state = "launcherbtt"
desc = "A remote control switch for a Mass Driver."
desc = "A remote control switch for a mass driver."
var/id = null
var/active = 0
anchored = 1.0
@@ -271,7 +271,6 @@
/obj/machinery/ignition_switch
name = "ignition switch"
desc = "It activates an igniter."
icon = 'objects.dmi'
icon_state = "launcherbtt"
desc = "A remote control switch for a mounted igniter."
@@ -282,6 +281,18 @@
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/flasher_button
name = "flasher button"
desc = "A remote control switch for a mounted flasher."
icon = 'objects.dmi'
icon_state = "launcherbtt"
var/id = null
var/active = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/teleport
name = "teleport"
icon = 'stationobjs.dmi'
@@ -339,7 +350,7 @@
layer = 2.6 // a bit above wires
/obj/machinery/power/generator
name = "thermoelectric generator"
name = "thermoelectric generator mark I"
desc = "It's a high efficiency thermoelectric generator."
icon_state = "teg"
anchored = 1
@@ -352,7 +363,7 @@
var/lastgenlev = -1
/obj/machinery/power/generator_type2
name = "thermoelectric generator"
name = "thermoelectric generator mark II"
desc = "It's a high efficiency thermoelectric generator."
icon_state = "teg"
anchored = 1

View File

@@ -332,7 +332,7 @@
/obj/item/weapon/storage/flashbang_kit
name = "flashbangs (WARNING)"
desc = "<FONT color=red><B>WARNING: Do not use without reading these preautions!</B></FONT>\n<B>These devices are extremely dangerous and can cause blindness or deafness if used incorrectly.</B>\nThe chemicals contained in these devices have been tuned for maximal effectiveness and due to\nextreme safety precuaiotn shave been incased in a tamper-proof pack. DO NOT ATTEMPT TO OPEN\nFLASH WARNING: Do not use continually. Excercise extreme care when detonating in closed spaces.\n\tMake attemtps not to detonate withing range of 2 meters of the intended target. It is imperative\n\tthat the targets visit a medical professional after usage. Damage to eyes increases extremely per\n\tuse and according to range. Glasses with flash resistant filters DO NOT always work on high powered\n\tflash devices such as this. <B>EXERCISE CAUTION REGARDLESS OF CIRCUMSTANCES</B>\nSOUND WARNING: Do not use continually. Visit a medical professional if hearing is lost.\n\tThere is a slight chance per use of complete deafness. Exercise caution and restraint.\nSTUN WARNING: If the intended or unintended target is too close to detonation the resulting sound\n\tand flash have been known to cause extreme sensory overload resulting in temporary\n\tincapacitation.\n<B>DO NOT USE CONTINUALLY</B>\nOperating Directions:\n\t1. Pull detonnation pin. <B>ONCE THE PIN IS PULLED THE GRENADE CAN NOT BE DISARMED!</B>\n\t2. Throw grenade. <B>NEVER HOLD A LIVE FLASHBANG</B>\n\t3. The grenade will detonste 10 seconds hafter being primed. <B>EXCERCISE CAUTION</B>\n\t-<B>Never prime another grenade until after the first is detonated</B>\nNote: Usage of this pyrotechnic device without authorization is an extreme offense and can\nresult in severe punishment upwards of <B>10 years in prison per use</B>.\n\nDefault 3 second wait till from prime to detonation. This can be switched with a screwdriver\nto 10 seconds.\n\nCopyright of Nanotrasen Industries- Military Armnaments Division\nThis device was created by Nanotrasen Labs a member of the Expert Advisor Corporation"
desc = ""
icon_state = "flashbang"
item_state = "syringe_kit"
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
@@ -601,7 +601,7 @@
/obj/item/stack/sheet/plasma,
/obj/item/stack/sheet/uranium,
/obj/item/stack/sheet/diamond,
/obj/item/stack/sheet/clown,
// /obj/item/stack/sheet/clown,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/rods

View File

@@ -1,6 +1,7 @@
//SUPPLY PACKS
//NOTE: only secure crate types use the access var (and are lockable)
//NOTE: hidden packs only show up when the computer has been hacked.
//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards.
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
/datum/supply_packs/specialops
name = "Special Ops supplies"
@@ -389,7 +390,8 @@
"/obj/item/seeds/carrotseed",
"/obj/item/seeds/sunflowerseed",
"/obj/item/seeds/chantermycelium",
"/obj/item/seeds/potatoseed")
"/obj/item/seeds/potatoseed",
"/obj/item/seeds/sugarcaneseed")
cost = 10
containertype = /obj/structure/closet/crate/hydroponics
containername = "Seeds crate"
@@ -711,8 +713,8 @@
name = "Ballistic gear crate"
contains = list("/obj/item/clothing/suit/armor/bulletproof",
"/obj/item/clothing/suit/armor/bulletproof",
"/obj/item/weapon/gun/projectile/shotgun/combat2",
"/obj/item/weapon/gun/projectile/shotgun/combat2")
"/obj/item/weapon/gun/projectile/shotgun/pump/combat",
"/obj/item/weapon/gun/projectile/shotgun/pump/combat")
cost = 50
containertype = "/obj/structure/closet/crate/secure"
containername = "Ballistic gear crate"
@@ -779,10 +781,10 @@
"/obj/item/clothing/head/collectable/xenom",
"/obj/item/clothing/head/collectable/xenom",
"/obj/item/clothing/head/collectable/petehat")
name = "Collectable Hat Crate!"
name = "Collectable hat crate!"
cost = 200
containertype = "/obj/structure/closet/crate/hat"
containername = "Collectable Hats Crate! Brought to you by Bass.inc!"
containername = "Collectable hats crate! Brought to you by Bass.inc!"
group = "Clothing"
/datum/supply_packs/hats/New()
@@ -793,5 +795,18 @@
..()
/datum/supply_packs/contraband
contains = list("/obj/item/weapon/contraband/poster","/obj/item/weapon/cigpacket/dromedaryco") //We randomly pick 5 items from this list through the constructor, look below
name = "Contraband crate"
cost = 30
containertype = "/obj/structure/closet/crate/contraband"
containername = "Contraband crate"
contraband = 1
group = "NanoTrasen Contraband Storage"
//SUPPLY PACKS
/datum/supply_packs/poster/New()
var/list/tempContains = list()
for(var/i = 0,i<5,i++)
tempContains += pick(contains)
src.contains = tempContains
..()

View File

@@ -4,9 +4,71 @@
throw_range = 20
force = 0
/////////Toy Mechs/////////
/obj/item/toy/prize
icon = 'toy.dmi'
icon_state = "ripleytoy"
/obj/item/toy/prize/ripley
name = "toy ripley"
desc = "Mini-Mecha action figure! Collect them all! 1/11"
/obj/item/toy/prize/fireripley
name = "toy firefighting ripley"
desc = "Mini-Mecha action figure! Collect them all! 2/11"
icon_state = "fireripleytoy"
/obj/item/toy/prize/deathripley
name = "toy deathsquad ripley"
desc = "Mini-Mecha action figure! Collect them all! 3/11"
icon_state = "deathripleytoy"
/obj/item/toy/prize/gygax
name = "toy gygax"
desc = "Mini-Mecha action figure! Collect them all! 4/11"
icon_state = "gygaxtoy"
/obj/item/toy/prize/durand
name = "toy gygax"
desc = "Mini-Mecha action figure! Collect them all! 5/11"
icon_state = "durandprize"
/obj/item/toy/prize/honk
name = "toy H.O.N.K."
desc = "Mini-Mecha action figure! Collect them all! 6/11"
icon_state = "honkprize"
/obj/item/toy/prize/marauder
name = "toy marauder"
desc = "Mini-Mecha action figure! Collect them all! 7/11"
icon_state = "marauderprize"
/obj/item/toy/prize/seraph
name = "toy seraph"
desc = "Mini-Mecha action figure! Collect them all! 8/11"
icon_state = "seraphprize"
/obj/item/toy/prize/mauler
name = "toy mauler"
desc = "Mini-Mecha action figure! Collect them all! 9/11"
icon_state = "maulerprize"
/obj/item/toy/prize/odysseus
name = "toy odysseus"
desc = "Mini-Mecha action figure! Collect them all! 10/11"
icon_state = "odysseusprize"
/obj/item/toy/prize/phazon
name = "toy phazon"
desc = "Mini-Mecha action figure! Collect them all! 11/11"
icon_state = "phazonprize"
/obj/item/toy/syndicateballoon
name = "syndicate balloon"
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
name = "red balloon"
desc = "Looks like a red balloon with a large \"S\" on it."
throwforce = 0
throw_speed = 4
throw_range = 20

View File

@@ -92,6 +92,7 @@
hidden_prices = "2;5"
points = 15
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
charge_type = "engineering"
/obj/machinery/vending/coffee
name = "Hot Drinks machine"
@@ -306,9 +307,26 @@
product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola"
// product_hideamt = "20"
hidden_prices = "1"
product_ads = "What the fuck is this shit?;Why would you buy this;holy shit help;i'm stuck;in;a;universe;factory;AAAAAARGH!;HEIL... Stalin?;CAPITALIST PIGS;FUCK THE WEST"
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
charge_type = "soda"
/obj/machinery/vending/tool
name = "YouTool"
desc = "Tools for tools."
icon_state = "tool"
icon_deny = "tool-deny"
req_access_txt = "12" //Maintenance access
product_paths = "/obj/item/weapon/cable_coil/random;/obj/item/weapon/crowbar;/obj/item/weapon/weldingtool;/obj/item/weapon/wirecutters;/obj/item/weapon/wrench;/obj/item/device/analyzer;/obj/item/device/t_scanner"
// product_amounts = "10;5;3;5;5;5;5"
product_prices = "1;2;3;2;2;2;2"
product_prices = "1"
product_hidden = "/obj/item/weapon/weldingtool/largetank;/obj/item/device/multitool"
// product_hideamt = "2;2"
hidden_prices = "4;4"
product_coin = "/obj/item/clothing/gloves/yellow"
product_coin_amt = "1"
charge_type = "engineering"
/obj/machinery/vending/genetics
name = "Genetics Dispenser"
desc = "Medical drug dispenser."

View File

@@ -2,12 +2,6 @@
name = "weapon"
icon = 'weapons.dmi'
/obj/item/weapon/offhand
name = "offhand"
var/linked_weapon_name = ""
w_class = 5.0
icon_state = "offhand"
/obj/item/weapon/shield
name = "shield"
@@ -578,7 +572,8 @@
icon_state = "id"
item_state = "card-id"
var/access = list()
var/registered_name = null
var/registered_name = null // The name registered_name on the card
var/assignment = null
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
var/dorm = 0 // determines if this ID has claimed a dorm already
@@ -645,7 +640,7 @@
w_class = 2.0
throw_speed = 3
throw_range = 10
flags = ONBELT
flags = FPRINT | TABLEPASS | ONBELT
/obj/item/weapon/clipboard/notebook
name = "notebook"
@@ -711,17 +706,6 @@
icon = 'items.dmi'
icon_state = "red_crowbar"
/obj/item/weapon/fireaxe // DEM AXES MAN, marker -Agouri
icon_state = "fireaxe0"
name = "fire axe"
desc = "A tool for breaking down those obstructions that stop you from fighting that fire." //Less ROBUST. --SkyMarshal
force = 5
w_class = 4.0
flags = ONBACK
twohanded = 1
force_unwielded = 5
force_wielded = 18
/obj/item/weapon/cane
name = "cane"
desc = "A cane used by a true gentlemen."
@@ -772,6 +756,17 @@
item_state = "fire_extinguisher"
m_amt = 90
/obj/item/weapon/extinguisher/mini
name = "fire extinguisher"
desc = "A light and compact fibreglass-framed model fire extinguisher."
icon_state = "miniFE0"
flags = FPRINT | USEDELAY | TABLEPASS
throwforce = 5
w_class = 2.0
force = 6.0
item_state = "miniFE"
m_amt = 0
/obj/item/weapon/f_card
name = "finger print card"
desc = "Used to take fingerprints."
@@ -979,6 +974,10 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
name = "paper - 'Standard Operating Procedure'"
info = "Alert Levels:<BR>\nBlue- Emergency<BR>\n\t1. Caused by fire<BR>\n\t2. Caused by manual interaction<BR>\n\tAction:<BR>\n\t\tClose all fire doors. These can only be opened by reseting the alarm<BR>\nRed- Ejection/Self Destruct<BR>\n\t1. Caused by module operating computer.<BR>\n\tAction:<BR>\n\t\tAfter the specified time the module will eject completely.<BR>\n<BR>\nEngine Maintenance Instructions:<BR>\n\tShut off ignition systems:<BR>\n\tActivate internal power<BR>\n\tActivate orbital balance matrix<BR>\n\tRemove volatile liquids from area<BR>\n\tWear a fire suit<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nToxin Laboratory Procedure:<BR>\n\tWear a gas mask regardless<BR>\n\tGet an oxygen tank.<BR>\n\tActivate internal atmosphere<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nDisaster Procedure:<BR>\n\tFire:<BR>\n\t\tActivate sector fire alarm.<BR>\n\t\tMove to a safe area.<BR>\n\t\tGet a fire suit<BR>\n\t\tAfter:<BR>\n\t\t\tAssess Damage<BR>\n\t\t\tRepair damages<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tMeteor Shower:<BR>\n\t\tActivate fire alarm<BR>\n\t\tMove to the back of ship<BR>\n\t\tAfter<BR>\n\t\t\tRepair damage<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tAccidental Reentry:<BR>\n\t\tActivate fire alrms in front of ship.<BR>\n\t\tMove volatile matter to a fire proof area!<BR>\n\t\tGet a fire suit.<BR>\n\t\tStay secure until an emergency ship arrives.<BR>\n<BR>\n\t\tIf ship does not arrive-<BR>\n\t\t\tEvacuate to a nearby safe area!"
/obj/item/weapon/paper/armoury
name = "paper - 'Armoury Inventory'"
info = "<div align='center'><img src='http://i265.photobucket.com/albums/ii207/Mr_Bombastic_Bucket/WikiLogo.png'><br><b><h1>Armoury Inventory</h1></b></div><hr><br><div align='center'><table border='3'><tr><td>Item</td><td>Stock</td><td>In Use</td><td>Notes</td></tr><tr><td>Ablative Armour Vest</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Beanbag Shells</td><td>12</td><td>0</td><td>-</td></tr><tr><td>Body Bags</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Bulletproof Vest</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Chemical Implant Kit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Combat Shotguns</td><td>2</td><td>0</td><td>-</td></tr><tr><td>Deployable Barrier</td><td>9</td><td>0</td><td>-</td></tr><tr><td>Deployable Flashers</td><td>4</td><td>0</td><td>-</td></tr><tr><td>Energy Gun</td><td>6</td><td>0</td><td>-</td></tr><tr><td>Flashbangs</td><td>7</td><td>0</td><td>-</td></tr><tr><td>Gas Mask</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Handcuffs</td><td>7</td><td>0</td><td>-</td></tr><tr><td>Ion Rifle</td><td>1</td><td>0</td><td>-</td></tr><tr><td>L3 Biohazard Suit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>L4 EOD Suit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Laser Gun</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Lockbox</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Loyalty Implants Lockbox</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Pepper Sprayers</td><td>2</td><td>0</td><td>-</td></tr><tr><td>RIG Helmet</td><td>1</td><td>0</td><td>-</td></tr><tr><td>RIG Suit</td><td>1</td><td>0</td><td>-</td></tr><tr><td>Riot Helmet</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Riot Shield</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Riot Suit</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Stun Baton</td><td>5</td><td>0</td><td>-</td></tr><tr><td>Taser</td><td>3</td><td>0</td><td>-</td></tr><tr><td>Tracking Implant Kit</td><td>1</td><td>0</td><td>-</td></tr></table></div><br/><hr/><br/><div align='center'><table border='3'><tr><td>Officer Name</td><td>Items Withdrawn</td><td>Notes</td></tr><tr><td><INSERT OFFICER NAME HERE></td><td><INSERT ITEMS WITHDRAWN HERE></td><td>-</td></tr><tr><td><INSERT OFFICER NAME HERE></td><td><INSERT ITEMS WITHDRAWN HERE></td><td>-</td></tr><tr><td><INSERT OFFICER NAME HERE></td><td><INSERT ITEMS WITHDRAWN HERE></td><td>-</td></tr></table><br/><hr/><br/><p><i>List maintained by NSS Exodus, Warden, <INSERT WARDEN NAME HERE></i></p></div>"
/obj/item/weapon/paper_bin
name = "Paper Bin"
desc = "This contains many papers."
@@ -1222,6 +1221,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
g_amt = 50
var/rigged = 0 // true if rigged to explode
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
var/construction_cost = list("metal"=750,"glass"=75)
var/construction_time=100
/obj/item/weapon/cell/crap
name = "\improper NanoTrasen Brand Rechargable AA Battery"
@@ -1239,23 +1240,29 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
/obj/item/weapon/cell/high
name = "high-capacity power cell"
origin_tech = "powerstorage=2"
icon_state = "hcell"
maxcharge = 10000
g_amt = 60
/obj/item/weapon/cell/super
name = "super-capacity power cell"
origin_tech = "powerstorage=5"
icon_state = "scell"
maxcharge = 20000
g_amt = 70
construction_cost = list("metal"=750,"glass"=100)
/obj/item/weapon/cell/hyper
name = "hyper-capacity power cell"
origin_tech = "powerstorage=6"
icon_state = "hpcell"
maxcharge = 30000
g_amt = 80
construction_cost = list("metal"=500,"glass"=150,"gold"=200,"silver"=200)
/obj/item/weapon/cell/infinite
name = "infinite-capacity power cell!"
icon_state = "icell"
origin_tech = null
maxcharge = 30000
g_amt = 80
@@ -1908,6 +1915,13 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
icon = 'wizard.dmi'
icon_state = "ectoplasm"
/obj/item/weapon/research//Makes testing much less of a pain -Sieve
name = "research"
icon = 'stock_parts.dmi'
icon_state = "capacitor"
desc = "A debug item for research."
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8"
/obj/item/weapon/appendix
name = "appendix"
desc = "An appendix which looks perfectly healthy."

View File

@@ -286,6 +286,21 @@ proc/isInSight(var/atom/A, var/atom/B)
else
return 0
proc/doafterattack(obj/target , obj/source)
if (istype(target, /obj/item/weapon/storage/ ))
return 0
else if (locate (/obj/structure/table, source.loc))
return 0
else if (!istype(target.loc, /turf/))
return 0
else
return 1
proc/check_can_reach(atom/user, atom/target)
if(!in_range(user,target))
return 0

View File

@@ -127,6 +127,19 @@
index = findtext(t, char)
return t
//For sanitizing user inputs
/proc/reject_bad_text(var/text)
if(length(text) > 512) return //message too long
var/non_whitespace = 0
for(var/i=1, i<=length(text), i++)
switch(text2ascii(text,i))
if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or /
if(127 to 255) return //rejects weird letters like <20>
if(0 to 31) return //more weird stuff
if(32) //whitespace
else non_whitespace = 1
if(non_whitespace) return text //only accepts the text if it has some non-spaces
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
var/list/strip_chars = list("<",">","&","'")
t = copytext(t,1,limit)
@@ -700,6 +713,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
newname = dd_replacetext(newname, ">", "'")
M.real_name = newname
M.name = newname
M.original_name = newname
/*/proc/clname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea
var/randomname = pick(clown_names)
@@ -731,6 +745,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
newname = dd_replacetext(newname, ">", "'")
M.real_name = newname
M.name = newname
M.original_name = newname
for (var/obj/item/device/pda/pda in M.contents)
if (pda.owner == oldname)
@@ -738,9 +753,9 @@ Turf and target are seperate in case you want to teleport some distance from a t
pda.name = "PDA-[newname] ([pda.ownjob])"
break
for(var/obj/item/weapon/card/id/id in M.contents)
if(id.registered == oldname)
id.registered = newname
id.name = "[id.registered]'s ID Card ([id.assignment])"
if(id.registered_name == oldname)
id.registered_name = newname
id.name = "[id.registered_name]'s ID Card ([id.assignment])"
break*/
/proc/ionnum()
@@ -1827,6 +1842,13 @@ proc/get_opposite(var/checkdir)
count++
return count
proc/get_mob_with_client_list()
var/list/mobs = list()
for(var/mob/M in world)
if (M.client)
mobs += M
return mobs
/proc/reverse_direction(var/dir)
switch(dir)
if(NORTH)

View File

@@ -117,6 +117,15 @@
var/walltype = "wall"
/turf/simulated/wall/heatshield
thermal_conductivity = 0
opacity = 0
name = "Heat Shielding"
icon = 'thermal.dmi'
icon_state = "thermal"
heat_capacity = 625000 //twice the cap of a normal wall
walltype = "heatshield"
/turf/simulated/wall/cult
name = "wall"
desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"
@@ -128,7 +137,7 @@
icon = 'shuttle.dmi'
thermal_conductivity = 0.05
heat_capacity = 0
layer = 2.1
layer = 2
/turf/simulated/shuttle/wall
name = "wall"

View File

@@ -6,12 +6,12 @@ world
Topic(href, href_list[])
world << "Received a Topic() call!"
world << "[href]"
for(var/a in href_list)
world << "[a]"
if(href_list["hello"])
world << "Hello world!"
return "Hello world!"
world << "End of Topic() call."
..()
// world << "Received a Topic() call!"
// world << "[href]"
// for(var/a in href_list)
// world << "[a]"
// if(href_list["hello"])
// world << "Hello world!"
// return "Hello world!"
// world << "End of Topic() call."
// ..()

View File

@@ -6,7 +6,6 @@
Starting up. [time2text(world.timeofday, "hh:mm.ss")]
---------------------
"}
diaryofmeanpeople = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] Attack.log")
@@ -15,19 +14,13 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
Starting up. [time2text(world.timeofday, "hh:mm.ss")]
---------------------
Dear Diary....
Today, these people were mean:
"}
jobban_loadbanfile()
jobban_updatelegacybans()
LoadBans()
process_teleport_locs() //Sets up the wizard teleport locations
process_ghost_teleport_locs() //Sets up ghost teleport locations.
sleep_offline = 1
if (config.kick_inactive)
spawn(30)
@@ -187,15 +180,18 @@ proc/countJob(rank)
return equipped
/proc/AutoUpdateAI(obj/subject)
/*
if (subject!=null)
for(var/mob/living/silicon/ai/M in world)
if ((M.client && M.machine == subject))
subject.attack_ai(M)
*/
/proc/AutoUpdateTK(obj/subject)
if (subject!=null)
/* if (subject!=null)
for(var/obj/item/tk_grab/T in world)
if (T.host)
var/mob/M = T.host
if(M.client && M.machine == subject)
subject.attack_hand(M)
*/

View File

@@ -2,17 +2,6 @@
return
/atom/proc/attack_hand(mob/user as mob)
if(ishuman(user) || ismonkey(user))
if (user.hand)
var/datum/organ/external/temp = user:organs["l_hand"]
if(temp.destroyed)
user << "\red Yo- wait a minute."
return
else
var/datum/organ/external/temp = user:organs["r_hand"]
if(temp.destroyed)
user << "\red Yo- wait a minute."
return
return
/atom/proc/attack_paw(mob/user as mob)
@@ -115,68 +104,68 @@
if(isnull(M.key)) return
if (!( flags ) & 256)
return
//Smudge up dem prints some
for(var/P in fingerprints)
var/test_print = stars(fingerprints[P], rand(85,95))
if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
fingerprints.Remove(P)
else
fingerprints[P] = test_print
if (ishuman(M))
//Add the list if it does not exist.
if(!fingerprintshidden)
fingerprintshidden = list()
//Fibers~
add_fibers(M)
//He has no prints!
if (M.mutations2 & mFingerprints)
if(fingerprintslast != M.key)
fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
fingerprintslast = M.key
return 0
//Now, lets get to the dirty work.
//First, make sure their DNA makes sense.
var/mob/living/carbon/human/H = M
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
if(!istype(H.dna, /datum/dna))
H.dna = new /datum/dna(null)
H.check_dna()
//Now, deal with gloves.
if (H.gloves && H.gloves != src)
if(fingerprintslast != H.key)
fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
fingerprintslast = H.key
H.gloves.add_fingerprint(M)
//Deal with gloves the pass finger/palm prints.
if(H.gloves != src)
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
return 0
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex) && !istype(H.gloves, /obj/item/clothing/gloves/fingerless))
return 0
//More adminstuffz
if(fingerprintslast != H.key)
fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
fingerprintslast = H.key
//Make the list if it does not exist.
if(!fingerprints)
fingerprints = list()
var/new_prints = 0
var/prints
for(var/i = 1, i <= fingerprints.len, i++)
var/list/L = params2list(fingerprints[i])
if(L[num2text(1)] == md5(H.dna.uni_identity))
new_prints = i
prints = L[num2text(2)]
break
//Hash this shit.
var/full_print = md5(H.dna.uni_identity)
var/print = fingerprints[full_print] //Find if the print is already there.
//It is not! We need to add it!
if(!print)
fingerprints[full_print] = stars(full_print, H.gloves ? rand(10,20) : rand(25,40))
//It's there, lets merge this shit!
else
var/test_print = stars(L[num2text(2)], rand(80,90))
if(stringpercent(test_print) == 32)
if(fingerprints.len == 1)
fingerprints = list()
else
fingerprints.Cut(i,i+1)
else
fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]"
if(new_prints)
fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
else
if(!fingerprints || !fingerprints.len)
fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
else
fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
for(var/i = 1, i <= fingerprints.len, i++)
if(length(fingerprints[i]) != 69)
fingerprints.Remove(fingerprints[i])
if(fingerprints && !fingerprints.len) del(fingerprints)
fingerprints[full_print] = stringmerge(print, stars(full_print, (H.gloves ? rand(10,20) : rand(25,40))))
return 1
else
if(fingerprintslast != M.key)
fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
fingerprintslast = M.key
//Cleaning up shit.
if(fingerprints && !fingerprints.len)
del(fingerprints)
return
//returns 1 if made bloody, returns 0 otherwise
@@ -211,11 +200,9 @@
O.overlays += O.blood_overlay
//if this blood isn't already in the list, add it
for(var/i = 1, i <= O.blood_DNA.len, i++)
if((O.blood_DNA[i][1] == M.dna.unique_enzymes) && (O.blood_DNA[i][2] == M.dna.b_type))
if(blood_DNA[M.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
O.blood_DNA.len++
O.blood_DNA[O.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
return 1 //we applied blood to the item
//adding blood to turfs
@@ -224,8 +211,8 @@
//get one blood decal and infect it with virus from M.viruses
for(var/obj/effect/decal/cleanable/blood/B in T.contents)
B.blood_DNA.len++
B.blood_DNA[B.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
if(!B.blood_DNA[M.dna.unique_enzymes])
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
B.virus2 += M.virus2
for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = new D.type
@@ -235,7 +222,7 @@
//if there isn't a blood decal already, make one.
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T)
newblood.blood_DNA = list(list(M.dna.unique_enzymes, M.dna.b_type))
newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
newblood.blood_owner = M
newblood.virus2 = M.virus2
for(var/datum/disease/D in M.viruses)
@@ -248,11 +235,9 @@
else if (istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
//if this blood isn't already in the list, add it
for(var/i = 1, i <= H.blood_DNA.len, i++)
if((H.blood_DNA[i][1] == M.dna.unique_enzymes) && (H.blood_DNA[i][2] == M.dna.b_type))
if(blood_DNA[H.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
H.blood_DNA.len++
H.blood_DNA[H.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
return 1 //we applied blood to the item
return
@@ -275,7 +260,7 @@
if( istype(src, /turf/simulated) )
var/turf/simulated/source1 = src
var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1)
this.blood_DNA = list(M.dna.unique_enzymes, M.dna.b_type)
this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
this.OriginalMob = M.dna.original_name
for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = new D.type
@@ -286,7 +271,7 @@
if( istype(src, /turf/simulated) )
var/turf/simulated/source2 = src
var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2)
this.blood_DNA = list(list("UNKNOWN BLOOD","X*"))
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = new D.type
this.viruses += newDisease
@@ -305,9 +290,9 @@
/atom/proc/clean_blood()
if (!( src.flags ) & 256)
if (!flags & 256)
return
if ( src.blood_DNA )
if (blood_DNA )
//Cleaning blood off of mobs
if (istype (src, /mob/living/carbon))
@@ -340,25 +325,14 @@
if(blood_DNA && istype(blood_DNA, /list) && !blood_DNA.len)
del(blood_DNA)
if(src.fingerprints && src.fingerprints.len)
var/done = 0
while(!done)
done = 1
for(var/i = 1, i < (src.fingerprints.len + 1), i++)
var/list/prints = params2list(src.fingerprints[i])
var/test_print = prints["2"]
var/new_print = stars(test_print, rand(1,20))
if(stringpercent(new_print) == 32)
if(src.fingerprints.len == 1)
src.fingerprints = list()
if(fingerprints && fingerprints.len)
//Smudge up dem prints some
for(var/P in fingerprints)
var/test_print = stars(fingerprints[P], rand(10,20))
if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
fingerprints.Remove(P)
else
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
src.fingerprints[j-1] = src.fingerprints[j]
src.fingerprints.len--
done = 0
break
else
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
fingerprints[P] = test_print
if(fingerprints && !fingerprints.len)
del(fingerprints)
if(istype(src, /mob/living/carbon/human))
@@ -678,6 +652,25 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
if ( !animal.restrained() )
attack_animal(animal)
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
// world << "checking if this shit gets called at all"
@@ -908,7 +901,18 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
// ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND -------
if (istype(usr, /mob/living/carbon/human))
// ------- YOU ARE HUMAN -------
/* if(usr.hand) // if he's using his left hand.
var/datum/organ/external/temp = usr:get_organ("l_hand")
if(temp.destroyed)
usr << "\blue You look at your stump."
return
else
var/datum/organ/external/temp = usr:get_organ("r_hand")
if(temp.destroyed)
usr << "\blue You look at your stump."
return*/
src.attack_hand(usr, usr.hand)
// usr:afterattack(src, usr, (t5 ? 1 : 0), params)
else
// ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED -------
if (istype(usr, /mob/living/carbon/monkey))
@@ -1058,9 +1062,11 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
else
var/nhref = "src=\ref[src];aiDisable=5"
src.Topic(nhref, params2list(nhref), src, 1)
return
/atom/proc/AICtrlClick() // Bolts doors.
/atom/proc/AICtrlClick() // Bolts doors, turns off APCs.
if(istype(src , /obj/machinery/door/airlock))
if(src:locked)
var/nhref = "src=\ref[src];aiEnable=4"
@@ -1068,6 +1074,13 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
else
var/nhref = "src=\ref[src];aiDisable=4"
src.Topic(nhref, params2list(nhref), src, 1)
else if (istype(src , /obj/machinery/power/apc/))
var/nhref = "src=\ref[src];breaker=1"
src.Topic(nhref, params2list(nhref), 0)
return
/*

View File

@@ -19,8 +19,6 @@
/world/proc/load_motd()
join_motd = file2text("config/motd.txt")
auth_motd = file2text("config/motd-auth.txt")
no_auth_motd = file2text("config/motd-noauth.txt")
/world/proc/load_rules()
rules = file2text("config/rules.html")
@@ -108,8 +106,6 @@
..()
sleep(50)
plmaster = new /obj/effect/overlay( )
plmaster.icon = 'tile_effects.dmi'
plmaster.icon_state = "plasma"
@@ -125,7 +121,8 @@
src.update_status()
master_controller = new /datum/controller/game_controller()
spawn(-1) master_controller.setup()
spawn(-1)
master_controller.setup()
return
//Crispy fullban

View File

@@ -221,9 +221,17 @@
if (!output) output = "5"
return output
/proc/isblockon(hnumber, bnumber)
/proc/isblockon(hnumber, bnumber , var/UI = 0)
var/temp2
temp2 = hex2num(hnumber)
if(UI)
if(temp2 >= 2050)
return 1
else
return 0
if (bnumber == HULKBLOCK || bnumber == TELEBLOCK)
if (temp2 >= 3500 + BLOCKADD)
return 1
@@ -313,7 +321,7 @@
H.g_eyes = hex2num(getblock(structure,9,3))
H.b_eyes = hex2num(getblock(structure,10,3))
if (isblockon(getblock(structure, 11,3),11))
if (isblockon(getblock(structure, 11,3),11 , 1))
H.gender = FEMALE
else
H.gender = MALE
@@ -750,7 +758,7 @@
// if (!M.client)
// for(var/mob/dead/observer/ghost in world)
// if(ghost.corpse == M && ghost.client)
// ghost << "<b><font color = #330033><font size = 3>Your corpse has been placed into a cloning scanner. Return to your body if you want to be ressurected/cloned!</b> (Verbs -> Ghost -> Re-enter corpse)</font color>"
// ghost << "<b><font color = #330033><font size = 3>Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned!</b> (Verbs -> Ghost -> Re-enter corpse)</font color>"
// break
del(G)
return
@@ -845,7 +853,10 @@
/obj/machinery/computer/scan_consolenew/New()
..()
spawn(5)
src.connected = locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
for(dir in list(NORTH,EAST,SOUTH,WEST))
connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
if(!isnull(connected))
break
spawn(250)
src.injectorready = 1
return

View File

@@ -2,86 +2,87 @@
name = "black hole"
icon = 'objects.dmi'
desc = "FUCK FUCK FUCK AAAHHH"
icon_state = "bhole2"
opacity = 0
icon_state = "bhole3"
opacity = 1
unacidable = 1
density = 0
anchored = 1
var/datum/effect/effect/system/harmless_smoke_spread/smoke
/obj/effect/bhole/New()
src.smoke = new /datum/effect/effect/system/harmless_smoke_spread()
src.smoke.set_up(5, 0, src)
src.smoke.attach(src)
src:life()
spawn(4)
controller()
/obj/effect/bhole/proc/controller()
while(src)
if(!isturf(loc))
del(src)
return
//DESTROYING STUFF AT THE EPICENTER
for(var/mob/living/M in orange(1,src))
del(M)
for(var/obj/O in orange(1,src))
del(O)
for(var/turf/simulated/ST in orange(1,src))
ST.ReplaceWithSpace()
sleep(6)
grav(10, 4, 10, 0 )
sleep(6)
grav( 8, 4, 10, 0 )
sleep(6)
grav( 9, 4, 10, 0 )
sleep(6)
grav( 7, 3, 40, 1 )
sleep(6)
grav( 5, 3, 40, 1 )
sleep(6)
grav( 6, 3, 40, 1 )
sleep(6)
grav( 4, 2, 50, 6 )
sleep(6)
grav( 3, 2, 50, 6 )
sleep(6)
grav( 2, 2, 75,25 )
sleep(6)
/obj/effect/bhole/Bumped(atom/A)
if (istype(A,/mob/living))
del(A)
else
A:ex_act(1.0)
/obj/effect/bhole/proc/life() //Oh man , this will LAG
if (prob(10))
//MOVEMENT
if( prob(50) )
src.anchored = 0
step(src,pick(alldirs))
if (prob(30))
step(src,pick(alldirs))
src.anchored = 1
for (var/atom/X in orange(9,src))
if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7))
if (!X:anchored)
step_towards(X,src)
/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen
del(src)
return
for(var/t = -r, t < r, t++)
affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance)
affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance)
affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance)
affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance)
return
for (var/atom/B in orange(7,src))
if (istype(B,/obj))
if (!B:anchored && prob(50))
step_towards(B,src)
if(prob(10)) B:ex_act(3.0)
/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
//Get turf at coordinate
var/turf/T = locate(x, y, z)
if(isnull(T)) return
//Pulling and/or ex_act-ing movable atoms in that turf
if( prob(pull_chance) )
for(var/obj/O in T.contents)
if(O.anchored)
O.ex_act(ex_act_force)
else
B:anchored = 0
//step_towards(B,src)
//B:anchored = 1
if(prob(10)) B:ex_act(3.0)
else if (istype(B,/turf))
if (istype(B,/turf/simulated) && (prob(1) && prob(75)))
src.smoke.start()
B:ReplaceWithSpace()
else if (istype(B,/mob/living))
step_towards(B,src)
step_towards(O,src)
for(var/mob/living/M in T.contents)
step_towards(M,src)
for (var/atom/A in orange(4,src))
if (istype(A,/obj))
if (!A:anchored && prob(90))
step_towards(A,src)
if(prob(30)) A:ex_act(2.0)
else
A:anchored = 0
//step_towards(A,src)
//A:anchored = 1
if(prob(30)) A:ex_act(2.0)
else if (istype(A,/turf))
if (istype(A,/turf/simulated) && prob(1))
src.smoke.start()
A:ReplaceWithSpace()
else if (istype(A,/mob/living))
step_towards(A,src)
for (var/atom/D in orange(1,src))
//if (hascall(D,"blackholed"))
// call(D,"blackholed")(null)
// continue
if (istype(D,/mob/living))
del(D)
else
D:ex_act(1.0)
spawn(17)
life()
//Destroying the turf
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
var/turf/simulated/ST = T
ST.ReplaceWithSpace()
return

View File

@@ -25,7 +25,7 @@
if(/obj/item/weapon/circular_saw) del src
if(/obj/item/weapon/kitchen/utensil/knife) del src
if(/obj/item/weapon/scalpel) del src
if(/obj/item/weapon/fireaxe) del src
if(/obj/item/weapon/twohanded/fireaxe) del src
if(/obj/item/weapon/hatchet) del src
if(/obj/item/weapon/melee/energy) del src

View File

@@ -0,0 +1,63 @@
/proc/wormhole_event()
spawn()
var/list/pick_turfs = list()
for(var/turf/simulated/floor/T in world)
if(T.z == 1)
pick_turfs += T
if(pick_turfs.len)
//All ready. Announce that bad juju is afoot.
command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
world << sound('spanomalies.ogg')
//prob(20) can be approximated to 1 wormhole every 5 turfs!
//admittedly less random but totally worth it >_<
var/event_duration = 3000 //~5 minutes in ticks
var/number_of_selections = (pick_turfs.len/5)+1 //+1 to avoid division by zero!
var/sleep_duration = round( event_duration / number_of_selections )
var/end_time = world.time + event_duration //the time by which the event should have ended
var/increment = max(1,round(number_of_selections/50))
// world << "DEBUG: number_of_selections: [number_of_selections] | sleep_duration: [sleep_duration]"
var/i = 1
while( 1 )
//we've run into overtime. End the event
if( end_time < world.time )
// world << "DEBUG: we've run into overtime. End the event"
return
if( !pick_turfs.len )
// world << "DEBUG: we've run out of turfs to pick. End the event"
return
//loop it round
i += increment
i %= pick_turfs.len
i++
//get our enter and exit locations
var/turf/simulated/floor/enter = pick_turfs[i]
pick_turfs -= enter //remove it from pickable turfs list
if( !enter || !istype(enter) ) continue //sanity
var/turf/simulated/floor/exit = pick(pick_turfs)
pick_turfs -= exit
if( !exit || !istype(exit) ) continue //sanity
create_wormhole(enter,exit)
sleep(sleep_duration) //have a well deserved nap!
//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions?
/proc/create_wormhole(var/turf/enter as turf, var/turf/exit as turf)
var/obj/effect/portal/P = new /obj/effect/portal( enter )
P.target = exit
P.creator = null
P.icon = 'objects.dmi'
P.failchance = 0
P.icon_state = "anom"
P.name = "wormhole"
spawn(rand(300,600))
del(P)

View File

@@ -8,7 +8,6 @@ var
/datum/game_mode/blob
name = "blob"
config_tag = "blob"
required_players = 0
uplink_welcome = "Syndicate Uplink Console:"
uplink_uses = 10

View File

@@ -403,6 +403,117 @@
del(usr)
return
/*
/client/proc/changeling_greater_form() // Oh shit, it's on now.
set category = "Changeling"
set name = "Greater Form"
set desc = "Become onto the Goddess"
if (usr.monkeyizing)
return
for(var/obj/item/W in src)
usr.drop_from_slot(W)
usr.update_clothing()
usr.monkeyizing = 1
usr.canmove = 0
usr.icon = null
usr.invisibility = 101
for(var/datum/organ/external/organ in usr:organs)
del(organ)
var/atom/movable/overlay/animation = new /atom/movable/overlay( usr.loc )
animation.icon_state = "blank"
animation.icon = 'mob.dmi'
animation.master = src
flick("h2monkey", animation)
sleep(48)
//animation = null
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src )
del(animation)
O.real_name = usr.real_name
O.name = usr.name
O.dna = usr.dna
usr.dna = null
O.changeling = usr.changeling
updateappearance(O,O.dna.uni_identity)
O.loc = usr.loc
O.viruses = usr.viruses
usr.viruses = list()
for(var/datum/disease/D in O.viruses)
D.affected_mob = O
O.universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans
if (usr.client)
usr.client.mob = O
if(usr.mind)
usr.mind.transfer_to(O)
spawn(300)
command_alert("Extreme danger. A level four biological entity has been detected on board the station. Emergancy evacuation procedures have begun. Civilian staff, do NOT engage the creature if spotted. Renforcements are on route.")
emergency_shuttle.online = 1
emergency_shuttle.settimeleft(10)
spawn(10)
var/list/candidates = list()
for(var/mob/dead/observer/G in world)
candidates += G
for(var/mob/dead/observer/G in candidates)
if(!G.client || !G.key)
candidates.Remove(G)
for(var/obj/structure/stool/bed/chair/C in locate(/area/shuttle/escape/transit))
var/mob/living/carbon/human/new_commando = create_death_commando(C, 0)
if(candidates.len)
var/mob/dead/observer/G = pick(candidates)
new_commando.mind.key = G.key//For mind stuff.
new_commando.key = G.key
new_commando.internal = new_commando.s_store
new_commando.internals.icon_state = "internal1"
candidates -= G
del(G)
else
break
//So they don't forget their code or mission.
new_commando.mind.store_memory("<B>Mission:</B> \red Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.")
new_commando << "\blue You are a Special Ops Commando in the service of Central Command. \nYour current mission is: \red<B>Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.</B>"
spawn(100)
emergency_shuttle.online = 0
command_alert("The emergancy shuttle will hold until the hostile entity has been terminated. During evacuation, do NOT use escape pods. To avoid the chance of a hostile entity escaping, the Thunderchild will be firing on and destorying any escape pods leaving the station")
O << "Your way out has arrived. Obtain the ID of three heads to override the holding protocol and escape. Let none stand in your way, for you are a perfect creature."
for(var/datum/objective/objective in O.mind.objectives)
O.mind.objectives.Remove(objective)
del(objective)
var/datum/objective/new_objective = null
new_objective = new /datum/objective/escape
new_objective.owner = O.mind
O.mind.objectives += new_objective
spawn(0)
while(emergency_shuttle.online == 0)
sleep(10)
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
spawn(900)
for(var/mob/M in locate(/area/shuttle/escape_pod1/transit))
M.gib()
for(var/mob/M in locate(/area/shuttle/escape_pod2/transit))
M.gib()
for(var/mob/M in locate(/area/shuttle/escape_pod3/transit))
M.gib()
for(var/mob/M in locate(/area/shuttle/escape_pod5/transit))
M.gib()
while(emergency_shuttle.online == 1)
sleep(10)
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
*/
/client/proc/changeling_fakedeath()
set category = "Changeling"
set name = "Regenerative Stasis (20)"

View File

@@ -47,7 +47,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
genomecost = 250
// doesn't happen lol. Yet!
// verbpath = /client/proc/changeling_greater_form
/obj/effect/proc_holder/power/fakedeath
name = "Fake Death"

View File

@@ -4,7 +4,7 @@
list/allwords = list("travel","self","see","hell","blood","join","tech","destroy", "other", "hide")
/proc/iscultist(mob/living/carbon/M as mob)
/proc/iscultist(mob/living/M as mob)
return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult)
/proc/is_convertable_to_cult(datum/mind/mind)

View File

@@ -0,0 +1,52 @@
/obj/structure/cult
density = 1
anchored = 1
icon = 'cult.dmi'
/obj/structure/cult/talisman
name = "Altar"
desc = "A bloodstained altar dedicated to Nar-Sie"
icon_state = "talismanaltar"
/obj/structure/cult/forge
name = "Daemon forge"
desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie"
icon_state = "forge"
/obj/structure/cult/pylon
name = "Pylon"
desc = "A floating crystal that hums with an unearthly energy"
icon_state = "pylon"
/obj/structure/cult/tome
name = "Desk"
desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl"
icon_state = "tomealtar"
/obj/structure/cult/pillar
name = "Pillar"
desc = "This should not exist"
icon_state = "pillar"
icon = 'magic_pillar.dmi'
/obj/effect/gateway
name = "gateway"
desc = "You're pretty sure that abyss is staring back"
icon = 'cult.dmi'
icon_state = "hole"
density = 1
unacidable = 1
anchored = 1.0
/obj/effect/gateway/Bumped(mob/M as mob|obj)
spawn(0)
return
return
/obj/effect/gateway/HasEntered(AM as mob|obj)
spawn(0)
return
return

View File

@@ -13,6 +13,7 @@
var/virus_name = ""
var/stage = 0
var/doctors = 0
///////////////////////////
//Announces the game type//
@@ -26,7 +27,7 @@
//Gets the round setup, cancelling if there's not enough players at the start//
///////////////////////////////////////////////////////////////////////////////
/datum/game_mode/epidemic/pre_setup()
var/doctors = 0
doctors = 0
for(var/mob/new_player/player in world)
if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor"))
doctors++
@@ -65,8 +66,15 @@
comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT")
comm.messagetext.Add(intercepttext)
world << sound('commandreport.ogg')
// add an extra law to the AI to make sure it cooperates with the heads
var/extra_law = "Crew authorized to know of pathogen [virus_name]'s existence are: Heads of command, any crew member with loyalty implant. Do not allow unauthorized personnel to gain knowledge of [virus_name]. Aid authorized personnel in quarantining and neutrlizing the outbreak. This law overrides all other laws."
for(var/mob/living/silicon/ai/M in world)
M.add_ion_law(extra_law)
M << "\red " + extra_law
/datum/game_mode/epidemic/proc/announce_to_kill_crew()
var/intercepttext = "<FONT size = 3 color='red'><B>CONFIDENTIAL REPORT</FONT><HR>"
intercepttext += "<FONT size = 2;color='red'><B>PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].</B></FONT><BR>"
@@ -84,33 +92,45 @@
/datum/game_mode/epidemic/post_setup()
// make sure viral outbreak events don't happen on this mode
EventTypes.Remove(/datum/event/viralinfection)
// scan the crew for possible infectees
var/list/crew = list()
for(var/mob/living/carbon/human/H in world) if(H.client)
// heads should not be infected
if(H.mind.assigned_role in command_positions) continue
crew += H
if(crew.len < 2)
world << "\red There aren't enough players for this mode!"
world << "\red Rebooting world in 5 seconds."
if(blackbox)
blackbox.save_all_data_to_sql()
sleep(50)
world.Reboot()
var/datum/disease2/disease/lethal = new
lethal.makerandom(1)
lethal.infectionchance = 5
var/datum/disease2/disease/nonlethal = new
nonlethal.makerandom(0)
nonlethal.infectionchance = 0
// the more doctors, the more will be infected
var/lethal_amount = doctors * 2
for(var/i = 0, i < crew.len / 3, i++)
// keep track of initial infectees
var/list/infectees = list()
for(var/i = 0, i < lethal_amount, i++)
var/mob/living/carbon/human/H = pick(crew)
if(H.virus2)
i--
continue
H.virus2 = lethal.getcopy()
infectees += H
for(var/i = 0, i < crew.len / 3, i++)
var/mob/living/carbon/human/H = pick(crew)
if(H.virus2)
continue
H.virus2 = nonlethal.getcopy()
var/mob/living/carbon/human/patient_zero = pick(infectees)
patient_zero.virus2.stage = 3
cruiser_arrival = world.time + (10 * 90 * 60)
stage = 1
@@ -126,9 +146,12 @@
if(stage == 1 && cruiser_seconds() < 60 * 30)
announce_to_kill_crew()
stage = 2
else if(stage == 2 && cruiser_seconds() <= 0)
crew_lose()
else if(stage == 2 && cruiser_seconds() <= 60 * 5)
command_alert("Inbound cruiser detected on collision course. Scans indicate the ship to be armed and ready to fire. Estimated time of arrival: 5 minutes.", "[station_name()] Early Warning System")
stage = 3
else if(stage == 3 && cruiser_seconds() <= 0)
crew_lose()
stage = 4
checkwin_counter++
if(checkwin_counter >= 20)
@@ -176,11 +199,9 @@
world << "\blue<b>[i]..</b>"
sleep(10)
enter_allowed = 0
for(var/mob/M in world)
if(M.client)
spawn(0)
M.client.station_explosion_cinematic()
sleep(110)
if(ticker)
ticker.station_explosion_cinematic(0,null)
if(ticker.mode)
ticker.mode:station_was_nuked = 1
ticker.mode:explosion_in_progress = 0
return

View File

@@ -1,7 +1,6 @@
/datum/game_mode/extended
name = "extended"
config_tag = "extended"
required_players = 0
uplink_welcome = "Syndicate Uplink Console:"
uplink_uses = 10

View File

@@ -22,7 +22,7 @@
list/datum/mind/modePlayer = new
list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist
list/protected_jobs = list() // Jobs that can't be tratiors because
required_players = 0
required_players = 1
required_enemies = 0
recommended_enemies = 0
uplink_welcome
@@ -47,7 +47,7 @@ Stealth and Camouflage Items;
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
/obj/item/device/chameleon:4:Chameleon-Projector;
/obj/item/weapon/stamperaser:1:Stamp Remover;
/obj/item/weapon/stamperaser:1:Stamp Remover and Forger;
Whitespace:Seperator;
Devices and Tools;
/obj/item/weapon/card/emag:4:Cryptographic Sequencer (Limited uses, almost full access);

View File

@@ -22,6 +22,7 @@ var/datum/roundinfo/roundinfo = new()
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
var/Bible_item_state // item_state the chaplain has chosen for his bible
var/Bible_name // name of the bible
var/Bible_deity_name
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
@@ -54,7 +55,7 @@ var/datum/roundinfo/roundinfo = new()
runnable_modes = config.get_runnable_modes()
if (runnable_modes.len==0)
current_state = GAME_STATE_PREGAME
world << "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby."
world << "<B>Unable to choose playable game mode. Not enough players?</B> Reverting to pre-game lobby."
return 0
if(secret_force_mode != "secret")
var/datum/game_mode/M = config.pick_mode(secret_force_mode)
@@ -138,6 +139,107 @@ var/datum/roundinfo/roundinfo = new()
return 1
/datum/controller/gameticker
//station_explosion used to be a variable for every mob's hud. Which was a waste!
//Now we have a general cinematic centrally held within the gameticker....far more efficient!
var/obj/screen/cinematic = null
//Plus it provides an easy way to make cinematics for other events. Just use this as a template :)
proc/station_explosion_cinematic(var/station_missed=0, var/override = null)
if( cinematic ) return //already a cinematic in progress!
//initialise our cinematic screen object
cinematic = new(src)
cinematic.icon = 'station_explosion.dmi'
cinematic.icon_state = "start"
cinematic.layer = 20
cinematic.mouse_opacity = 0
cinematic.screen_loc = "1,3" //TODO resize them
var/obj/structure/stool/bed/temp_buckle = new(src)
//Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around
if(station_missed)
for(var/mob/M in world)
M.buckled = temp_buckle //buckles the mob so it can't do anything
if(M.client)
M.client.screen += cinematic //show every client the cinematic
else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived"
for(var/mob/M in world)
M.buckled = temp_buckle
if(M.client)
M.client.screen += cinematic
switch(M.z)
if(0) //inside a crate or something
var/turf/T = get_turf(M)
if(T && T.z==1) //we don't use M.death(0) because it calls a for(/mob) loop and
M.health = 0
M.stat = DEAD
if(1) //on a z-level 1 turf.
M.health = 0
M.stat = DEAD
//Now animate the cinematic
switch(station_missed)
if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
sleep(50)
world << sound('explosionfar.ogg')
if(1) //nuke was nearby but (mostly) missed
if( mode && !override )
override = mode.name
switch( override )
if("nuclear emergency")
flick("start_nuke",cinematic)
sleep(50)
world << sound('explosionfar.ogg')
flick("explode2",cinematic)
cinematic.icon_state = "loss_nuke2"
else
sleep(50)
world << sound('explosionfar.ogg')
flick("explode2",cinematic)
else //station was destroyed
if( mode && !override )
override = mode.name
switch( override )
if("nuclear emergency")
flick("start_nuke",cinematic)
sleep(50)
world << sound('explosionfar.ogg')
cinematic.icon_state = "end"
flick("explode",cinematic)
cinematic.icon_state = "loss_nuke"
if("AI malfunction")
flick("start_malf",cinematic)
sleep(50)
world << sound('explosionfar.ogg')
cinematic.icon_state = "end"
flick("explode",cinematic)
cinematic.icon_state = "loss_malf"
if("blob")
flick("start_blob",cinematic) //TODO: make a blob one
sleep(50)
world << sound('explosionfar.ogg')
cinematic.icon_state = "end"
flick("explode",cinematic)
cinematic.icon_state = "loss_blob" //TODO: make a blob one
else
//default station-destroyed ending
sleep(50)
world << sound('explosionfar.ogg')
cinematic.icon_state = "end"
flick("explode",cinematic)
cinematic.icon_state = "loss_general"
sleep(100)
//Tidy-up time!
if(cinematic) del(cinematic) //end the cinematic
if(temp_buckle) del(temp_buckle) //release everybody
return
proc/create_characters()
for(var/mob/new_player/player in world)
@@ -215,7 +317,7 @@ var/datum/roundinfo/roundinfo = new()
if (aiPlayer.connected_robots.len)
var/robolist = "<b>The AI's loyal minions were:</b> "
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":", (Played by: [robo.key])"]"
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]"
world << "[robolist]"
for (var/mob/living/silicon/robot/robo in world)

View File

@@ -4,7 +4,6 @@
/datum/game_mode/malfunction
name = "AI malfunction"
config_tag = "malfunction"
required_players = 1
required_enemies = 1
recommended_enemies = 1
@@ -188,14 +187,11 @@
world << i
sleep(10)
enter_allowed = 0
for(var/mob/M in world)
if(M.client)
spawn(0)
M.client.station_explosion_cinematic()
sleep(110)
if(ticker)
ticker.station_explosion_cinematic(0,null)
if(ticker.mode)
ticker.mode:station_was_nuked = 1
ticker.mode:explosion_in_progress = 0
//world << "<B>Everyone was killed by the self-destruct!"
return

View File

@@ -5,7 +5,6 @@
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
var/const/meteordelay = 2000
var/nometeors = 1
required_players = 0
uplink_welcome = "EVIL METEOR Uplink Console:"
uplink_uses = 10

View File

@@ -234,6 +234,7 @@
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack)
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt)
synd_mob.equip_if_possible(new /obj/item/weapon/storage/box/engineer(synd_mob.back), synd_mob.slot_in_backpack)
var/datum/organ/external/O = pick(synd_mob.organs)
var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(O)
O.implant += E

View File

@@ -151,7 +151,6 @@
/obj/machinery/nuclearbomb/ex_act(severity)
return
/obj/machinery/nuclearbomb/blob_act()
if (src.timing == -1.0)
return
@@ -160,6 +159,7 @@
return
#define NUKERANGE 80
/obj/machinery/nuclearbomb/proc/explode()
if (src.safety)
src.timing = 0
@@ -174,57 +174,43 @@
ticker.mode.explosion_in_progress = 1
sleep(100)
/*
var/turf/ground_zero = get_turf(loc)
explosion(ground_zero, 50, 250, 500, 750)
*/
enter_allowed = 0
var/off_station = 0
var/area/A = get_area(src.loc)
if(A && (istype(A,/area/syndicate_station) || A.type == "/area"))
var/turf/bomb_location = get_turf(src)
if( bomb_location && (bomb_location.z == 1) )
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
off_station = 1
if (ticker && ticker.mode && ticker.mode.name == "nuclear emergency")
else
off_station = 2
if (ticker)
if(ticker.mode && ticker.mode.name == "nuclear emergency")
ticker.mode:herp = syndicate_station_at_station
ticker.mode:nuke_off_station = off_station
for(var/mob/M in world)
if(M.client)
spawn(0)
M.client.station_explosion_cinematic(off_station)
sleep(110)
if (ticker && ticker.mode)
ticker.station_explosion_cinematic(off_station,null)
if(ticker.mode)
ticker.mode.explosion_in_progress = 0
if(ticker.mode.name == "nuclear emergency")
ticker.mode:nukes_left --
ticker.mode.station_was_nuked = (off_station==0)
else
world << "<B>The station was destoyed by the nuclear blast!</B>"
ticker.mode.station_was_nuked = 1
/*
TODO: derped blast should partially damage nearest objects
and do not reboot the game. Also make it work properly on other z-levels --rastaf0
Further TODO: make nuke detonation work with objectives. Right now, you can't track player
location because they are viewing the cinematic (can't get_turf on them to determine z_level
as it will return null). Leaving this for you since you apparently plan to work this further. /N
*/
ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
//kinda shit but I couldn't get permission to do what I wanted to do.
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
world << "<B>Resetting in 30 seconds!</B>"
//feedback_set_details("end_error","nuke - unhandled ending")
feedback_set_details("end_error","nuke - unhandled ending")
if(blackbox)
blackbox.save_all_data_to_sql()
sleep(300)
log_game("Rebooting due to nuclear detonation")
world.Reboot()
return
return
/obj/item/weapon/disk/nuclear/Del()
if(blobstart.len > 0)

View File

@@ -75,7 +75,7 @@
for(var/datum/mind/rev_mind in head_revolutionaries)
for(var/datum/mind/head_mind in heads)
var/datum/objective/assassinate/rev_obj = new
var/datum/objective/mutiny/rev_obj = new
rev_obj.owner = rev_mind
rev_obj.target = head_mind
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]."
@@ -95,7 +95,7 @@
/datum/game_mode/revolution/process()
checkwin_counter++
if(checkwin_counter >= 20)
if(checkwin_counter >= 5)
if(!finished)
ticker.mode.check_win()
checkwin_counter = 0
@@ -370,7 +370,7 @@
var/list/heads = get_all_heads()
var/list/targets = new
for (var/datum/mind/i in head_revolutionaries)
for (var/datum/objective/assassinate/o in i.objectives)
for (var/datum/objective/mutiny/o in i.objectives)
targets |= o.target
if (head_revolutionaries.len!=0 || \
revolutionaries.len!=0 || \

View File

@@ -1,7 +1,6 @@
/datum/game_mode/sandbox
name = "sandbox"
config_tag = "sandbox"
required_players = 0
votable = 0
uplink_welcome = "Syndicate Uplink Console:"

View File

@@ -7,7 +7,6 @@
config_tag = "traitor"
restricted_jobs = list("Cyborg", "AI")//Approved by headmins for a week test, if you see this it would be nice if you didn't spread it everywhere
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_players = 0
required_enemies = 1
recommended_enemies = 4

View File

@@ -19,20 +19,20 @@
for(var/datum/objective/OBJ in H.mind.objectives)
H << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
obj_count++
var/randomize = pick("taser","egun","laser","revolver","smg","decloner","deagle","gyrojet","pulse","silenced","cannon","shotgun","freeze","uzi","crossbow")
var/randomize = pick("taser","egun","laser","revolver","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","shotgun","mateba","uzi","crossbow")
switch (randomize)
if("taser")
new /obj/item/weapon/gun/energy/taser(get_turf(H))
if("egun")
new /obj/item/weapon/gun/energy(get_turf(H))
new /obj/item/weapon/gun/energy/gun(get_turf(H))
if("laser")
new /obj/item/weapon/gun/energy/laser(get_turf(H))
if("revolver")
new /obj/item/weapon/gun/projectile(get_turf(H))
if("smg")
new /obj/item/weapon/gun/projectile/automatic/c20r(get_turf(H))
if("decloner")
new /obj/item/weapon/gun/energy/decloner(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))
if("gyrojet")
@@ -44,9 +44,9 @@
if("cannon")
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
if("shotgun")
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
if("freeze")
new /obj/item/weapon/gun/energy/temperature(get_turf(H))
new /obj/item/weapon/gun/projectile/shotgun/pump/combat(get_turf(H))
if("mateba")
new /obj/item/weapon/gun/projectile/mateba(get_turf(H))
if("uzi")
new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H))
if("crossbow")

View File

@@ -15,6 +15,8 @@
attack(mob/living/carbon/human/M as mob, mob/user as mob)
if(!istype(M, /mob/living/carbon/human))//If target is not a human.
return ..()
if(istype(M, /mob/living/carbon/human/dummy))
return..()
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their soul captured with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
@@ -161,12 +163,21 @@
var/mob/living/simple_animal/shade/A = locate() in C
if(A)
var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
var/mob/living/simple_animal/Z
switch(construct_class)
if("Juggernaut")
Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc))
var/mob/living/simple_animal/constructarmoured/Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc))
if (A.client)
A.client.mob = Z
Z.mind_initialize(Z)
if(iscultist(U))
if (ticker.mode.name == "cult")
ticker.mode:add_cultist(Z.mind)
Z.mind.special_role = "Cultist"
ticker.mode.update_cult_icons_added(Z.mind)
else
ticker.mode.cult+=Z.mind
Z.mind.special_role = "Cultist"
ticker.mode.update_cult_icons_added(Z.mind)
del(T)
Z << "<B>You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
@@ -175,9 +186,19 @@
del(C)
if("Wraith")
Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc))
var/mob/living/simple_animal/constructwraith/Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc))
if (A.client)
A.client.mob = Z
Z.mind_initialize(Z)
if(iscultist(U))
if (ticker.mode.name == "cult")
ticker.mode:add_cultist(Z.mind)
Z.mind.special_role = "Cultist"
ticker.mode.update_cult_icons_added(Z.mind)
else
ticker.mode.cult+=Z.mind
Z.mind.special_role = "Cultist"
ticker.mode.update_cult_icons_added(Z.mind)
del(T)
Z << "<B>You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
@@ -186,9 +207,19 @@
del(C)
if("Artificer")
Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc))
var/mob/living/simple_animal/constructbuilder/Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc))
if (A.client)
A.client.mob = Z
Z.mind_initialize(Z)
if(iscultist(U))
if (ticker.mode.name == "cult")
ticker.mode:add_cultist(Z.mind)
Z.mind.special_role = "Cultist"
ticker.mode.update_cult_icons_added(Z.mind)
else
ticker.mode.cult+=Z.mind
Z.mind.special_role = "Cultist"
ticker.mode.update_cult_icons_added(Z.mind)
del(T)
Z << "<B>You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"

View File

@@ -5,7 +5,6 @@
/datum/game_mode/wizard
name = "wizard"
config_tag = "wizard"
required_players = 0
required_enemies = 1
recommended_enemies = 1

View File

@@ -238,13 +238,12 @@
access_heads, access_ai_upload, access_construction, access_robotics,
access_mint, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat)
if("Research Director")
return list(access_medlab, access_rd,
access_heads, access_tox,
access_tox_storage, access_chemistry, access_teleporter,
access_research, access_robotics, access_xenobiology, access_RC_announce,
access_keycard_auth, access_tcomsat)
/*if("Virologist")
return list(access_medical, access_morgue, access_virology)*/
return list(access_rd, access_heads, access_tox,
access_tox_storage, access_teleporter, access_medlab,
access_research, access_robotics, access_xenobiology,
access_RC_announce, access_keycard_auth, access_tcomsat)
// if("Virologist")
// return list(access_medical, access_morgue, access_virology)
if("Chief Medical Officer")
return list(access_medical, access_morgue, access_medlab, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
@@ -299,17 +298,17 @@
if(1) //security
return list(access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_hos)
if(2) //medbay
return list(access_medical, access_medlab, access_morgue, access_chemistry, access_virology, access_cmo, access_surgery)
return list(access_medical, access_medlab, access_morgue, access_chemistry, access_virology, access_surgery, access_cmo)
if(3) //research
return list(access_tox, access_tox_storage, access_rd, access_hydroponics, access_research, access_xenobiology)
return list(access_research, access_tox, access_tox_storage, access_xenobiology, access_rd)
if(4) //engineering and maintenance
return list(access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, access_tech_storage, access_atmospherics, access_construction, access_robotics, access_ce)
return list(access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_tech_storage, access_atmospherics, access_construction, access_robotics, access_ce)
if(5) //command
return list(access_change_ids, access_ai_upload, access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers, access_mint_vault, access_heads_vault, access_hop, access_RC_announce, access_keycard_auth, access_tcomsat)
return list(access_heads, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_all_personal_lockers, access_heads_vault, access_RC_announce, access_keycard_auth, access_tcomsat, access_hop, access_captain)
if(6) //station general
return list(access_chapel_office, access_kitchen,access_bar, access_janitor, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime)
return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_clown, access_mime)
if(7) //supply
return list(access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mailsorting, access_mint)
return list(access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_mining, access_mining_station)
/proc/get_region_accesses_name(var/code)
switch(code)
@@ -340,29 +339,29 @@
if(access_security)
return "Security"
if(access_brig)
return "Brig"
return "Brig Cells"
if(access_court)
return "Courtroom"
if(access_forensics_lockers)
return "Forensics"
return "Detective's Office"
if(access_medical)
return "Medical"
if(access_medlab)
return "Med-Sci"
return "Genetics Lab"
if(access_morgue)
return "Morgue"
if(access_tox)
return "Toxins Research"
return "Research Lab"
if(access_tox_storage)
return "Toxins Storage"
if(access_chemistry)
return "Toxins Chemical Lab"
return "Chemistry Lab"
if(access_rd)
return "RD Private"
if(access_bar)
return "Bar"
if(access_janitor)
return "Janitorial Equipment"
return "Custodial Closet"
if(access_engine)
return "Engineering"
if(access_engine_equip)
@@ -370,7 +369,7 @@
if(access_maint_tunnels)
return "Maintenance"
if(access_external_airlocks)
return "External Airlock"
return "External Airlocks"
if(access_emergency_storage)
return "Emergency Storage"
if(access_change_ids)
@@ -382,11 +381,11 @@
if(access_eva)
return "EVA"
if(access_heads)
return "Head's Quarters/Bridge"
return "Bridge"
if(access_captain)
return "Captain's Quarters"
if(access_all_personal_lockers)
return "Personal Locker"
return "Personal Lockers"
if(access_chapel_office)
return "Chapel Office"
if(access_tech_storage)
@@ -398,7 +397,7 @@
if(access_armory)
return "Armory"
if(access_construction)
return "Construction Site"
return "Construction Areas"
if(access_kitchen)
return "Kitchen"
if(access_hydroponics)
@@ -440,9 +439,9 @@
if(access_heads_vault)
return "Main Vault"
if(access_mining_station)
return "Mining Station"
return "Mining Station EVA"
if(access_xenobiology)
return "Xenobiology"
return "Xenobiology Lab"
if(access_hop)
return "HoP Private"
if(access_hos)
@@ -450,11 +449,11 @@
if(access_ce)
return "CE Private"
if(access_RC_announce)
return "RC announcements"
return "RC Announcements"
if(access_keycard_auth)
return "Keycode auth. device"
return "Keycode Auth. Device"
if(access_tcomsat)
return "Telecommunications Satellite"
return "Telecoms Satellite"
/proc/get_centcom_access_desc(A)
switch(A)
@@ -478,10 +477,10 @@
return "Code Gold"
/proc/get_all_jobs()
return list("Assistant", "Station Engineer", "Shaft Miner", "Detective", "Medical Doctor", "Captain", "Security Officer", "Warden",
"Geneticist", "Scientist", "Head of Security", "Head of Personnel", "Atmospheric Technician",
"Chaplain", "Bartender", "Chemist", "Janitor", "Chef", "Roboticist", "Quartermaster",
"Chief Engineer", "Research Director", "Botanist", "Librarian", "Lawyer", "Virologist", "Cargo Technician", "Chief Medical Officer")
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Chef", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
"Atmospheric Technician", "Roboticist", "Chief Medical Officer", "Medical Doctor", "Geneticist",
"Research Director", "Scientist", "Chemist", "Head of Security", "Warden", "Detective", "Security Officer")
/proc/get_all_centcom_jobs()
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")

View File

@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "Nanotrasen officials and Space law"
selection_color = "#ccccff"
idtype = /obj/item/weapon/card/id/gold
equip(var/mob/living/carbon/human/H)
@@ -43,6 +44,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)

View File

@@ -79,6 +79,7 @@
H.equip_if_possible(new /obj/item/clothing/gloves/botanic_leather(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/suit/storage/apron(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/analyzer/plant_analyzer(H), H.slot_s_store)
H.equip_if_possible(new /obj/item/device/pda/botanist(H), H.slot_belt)
return 1
@@ -266,6 +267,7 @@
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/clothing/under/suit_jacket/red(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/device/pda/librarian(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_store)
return 1

View File

@@ -145,6 +145,7 @@
ticker.Bible_icon_state = B.icon_state
ticker.Bible_item_state = B.item_state
ticker.Bible_name = B.name
ticker.Bible_deity_name = B.deity_name
// feedback_set_details("religion_deity","[new_deity]")
// feedback_set_details("religion_book","[new_book_style]")
return 1

View File

@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffeeaa"
idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)

View File

@@ -25,6 +25,9 @@
//Sellection screen color
var/selection_color = "#ffffff"
//the type of the ID the player will have
var/idtype = /obj/item/weapon/card/id
//List of alternate titles, if any
var/list/alt_titles

View File

@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffddf0"
idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
@@ -59,6 +60,32 @@
//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete
/datum/job/chemist
title = "Chemist"
flag = CHEMIST
department_flag = MEDSCI
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_chem(H), H.slot_back)
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/toxins(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
return 1
/datum/job/geneticist
title = "Geneticist"
flag = GENETICIST
@@ -66,7 +93,7 @@
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the chief medical officer and research director"
supervisors = "the chief medical officer"
selection_color = "#ffeef0"

View File

@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffddff"
idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
@@ -46,28 +47,3 @@
H.equip_if_possible(new /obj/item/clothing/mask/gas(H), H.slot_wear_mask)
H.equip_if_possible(new /obj/item/weapon/tank/oxygen(H), H.slot_l_hand)
return 1
//Chemist is a medical job damnit
/datum/job/chemist
title = "Chemist"
flag = CHEMIST
department_flag = MEDSCI
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the chief medical officer and the research director"
selection_color = "#ffeeff"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_chem(H), H.slot_back)
H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/toxins(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
return 1

View File

@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffdddd"
idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)

View File

@@ -285,11 +285,18 @@ var/global/datum/controller/occupations/job_master
if(!H) return 0
if(!title) title = rank
var/obj/item/weapon/card/id/C = null
switch(rank)
if("Cyborg")
var/datum/job/job = null
for(var/datum/job/J in occupations)
if(J.title == rank)
job = J
break
if(job)
if(job.title == "Cyborg")
return
if("Captain")
C = new /obj/item/weapon/card/id/gold(H)
else
C = new job.idtype(H)
else
C = new /obj/item/weapon/card/id(H)
if(C)

View File

@@ -88,8 +88,9 @@ obj/mapinfo
var/decks = 4
proc/GetMapInfo()
var/obj/mapinfo/M = locate()
world << M.name
world << M.mapname
// Just removing these to try and fix the occasional JSON -> WORLD issue.
// world << M.name
// world << M.mapname
client/proc/ChangeMap(var/X as text)
set name = "Change Map"
set category = "Admin"

View File

@@ -13,16 +13,18 @@
var/updatesicon = 1
var/obj/machinery/computer/operating/computer = null
var/id = 0.0
New()
/obj/machinery/optable/New()
..()
if(!isnull(id))
for(var/obj/machinery/computer/operating/O in world)
if(src.id == O.id)
src.computer = O
for(dir in list(NORTH,EAST,SOUTH,WEST))
computer = locate(/obj/machinery/computer/operating, get_step(src, dir))
if (!isnull(computer))
break
spawn(100)
process()
/obj/machinery/optable/ex_act(severity)
ex_act(severity)
switch(severity)
if(1.0)
//SN src = null
@@ -39,15 +41,16 @@
else
return
blob_act()
/obj/machinery/optable/blob_act()
if(prob(75))
del(src)
hand_p(mob/user as mob)
/obj/machinery/optable/hand_p(mob/user as mob)
return src.attack_paw(user)
return
attack_paw(mob/user as mob)
/obj/machinery/optable/attack_paw(mob/user as mob)
if ((usr.mutations & HULK))
usr << text("\blue You destroy the operating table.")
for(var/mob/O in oviewers())
@@ -64,7 +67,7 @@
//Foreach goto(69)
return
attack_hand(mob/user as mob)
/obj/machinery/optable/attack_hand(mob/user as mob)
if ((usr.mutations & HULK))
usr << text("\blue You destroy the table.")
for(var/mob/O in oviewers())
@@ -74,7 +77,7 @@
del(src)
return
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
/obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSTABLE))
@@ -82,7 +85,8 @@
else
return 0
MouseDrop_T(obj/O as obj, mob/user as mob)
/obj/machinery/optable/MouseDrop_T(obj/O as obj, mob/user as mob)
if(isrobot(user))
return
if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O))
@@ -92,7 +96,7 @@
step(O, get_dir(O, src))
return
proc/check_victim()
/obj/machinery/optable/proc/check_victim()
if(locate(/mob/living/carbon, src.loc))
var/mob/M = locate(/mob/living/carbon, src.loc)
if(M.resting)
@@ -108,10 +112,10 @@
processing_objects.Remove(src)
return 0
process()
/obj/machinery/optable/process()
check_victim()
attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/machinery/optable/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isrobot(user))
return
if (istype(W, /obj/item/weapon/grab))
@@ -146,7 +150,6 @@
icon_state = "up"
density = 1
anchored = 0
id = null
updatesicon = 0
New()

View File

@@ -66,6 +66,7 @@
dat += text("[]\t-Toxin Content %: []</FONT><BR>", (occupant.getToxLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getToxLoss())
dat += text("[]\t-Burn Severity %: []</FONT><BR>", (occupant.getFireLoss() < 60 ? "<font color='blue'>" : "<font color='red'>"), occupant.getFireLoss())
dat += text("<HR>Paralysis Summary %: [] ([] seconds left!)<BR>", occupant.paralysis, round(occupant.paralysis / 4))
if(occupant.reagents)
dat += text("Inaprovaline units: [] units<BR>", occupant.reagents.get_reagent_amount("inaprovaline"))
dat += text("Soporific (Sleep Toxin): [] units<BR>", occupant.reagents.get_reagent_amount("stoxin"))
dat += text("[]\tDermaline: [] units</FONT><BR>", (occupant.reagents.get_reagent_amount("dermaline") < 30 ? "<font color='black'>" : "<font color='red'>"), occupant.reagents.get_reagent_amount("dermaline"))

View File

@@ -1191,6 +1191,15 @@ table tr:first-child th:first-child { border: none;}
A = A.loc
if (!( istype(A, /area) ))
return
if(network)
for(var/obj/machinery/door/firedoor/D in world)
if(!D.blocked && D.net_id == src.network)
if(D.operating)
D.nextstate = CLOSED
else if(!D.density)
spawn(0)
D.close()
else
for(var/area/RA in A.related)
RA.firereset()
return
@@ -1202,6 +1211,15 @@ table tr:first-child th:first-child { border: none;}
A = A.loc
if (!( istype(A, /area) ))
return
if(network)
for(var/obj/machinery/door/firedoor/D in world)
if(!D.blocked && D.net_id == src.network)
if(D.operating)
D.nextstate = OPEN
else if(!D.density)
spawn(0)
D.open()
else
for(var/area/RA in A.related)
RA.firealert()
//playsound(src.loc, 'signal.ogg', 75, 0)

View File

@@ -40,30 +40,3 @@
if ( istype(A2) && A2.master && A2.master == A )
SCRUBBER.on = scrubber_state
SCRUBBER.update_icon()
/obj/machinery/computer/mining_shuttle/attack_hand(user as mob)
src.add_fingerprint(usr)
var/dat
dat = text("<center>Mining shuttle:<br> <b><A href='?src=\ref[src];move=[1]'>Send</A></b></center>")
user << browse("[dat]", "window=miningshuttle;size=200x100")
/obj/machinery/computer/mining_shuttle/Topic(href, href_list)
if(..())
return
usr.machine = src
src.add_fingerprint(usr)
if(href_list["move"])
if(ticker.mode.name == "blob")
if(ticker.mode:declared)
usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
return
if (!mining_shuttle_moving)
usr << "\blue Shuttle recieved message and will be sent shortly."
move_mining_shuttle()
else
usr << "\blue Shuttle is already moving."

View File

@@ -171,6 +171,20 @@
src.health -= W.force
src.add_fingerprint(user)
healthcheck()
if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/weapon/tank/jetpack))
var/datum/gas_mixture/thejetpack = W:air_contents
var/env_pressure = thejetpack.return_pressure()
var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2)
//Can not have a pressure delta that would cause environment pressure > tank pressure
var/transfer_moles = 0
if((air_contents.temperature > 0) && (pressure_delta > 0))
transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
thejetpack.merge(removed)
user << "You pulse-pressurize your jetpack from the tank."
return
..()
/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob)

View File

@@ -262,19 +262,17 @@ var/global/list/autolathe_recipes_hidden = list( \
restart:
if(outputAmount > 0)
if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier)
busy = 1
use_power(power)
icon_state = "autolathe"
flick("autolathe_n",src)
spawn(16)
if(!busy)
busy = 1
use_power(power)
spawn(16)
use_power(power)
spawn(16)
flick("autolathe_n",src)
src.m_amount -= template.m_amt*multiplier
src.g_amount -= template.g_amt*multiplier
if(src.m_amount < 0)

View File

@@ -792,15 +792,6 @@
src.visible_message("\red [src] drives over [H]!")
playsound(src.loc, 'splat.ogg', 50, 1)
/*
if(ismob(load))
var/mob/M = load
if(M.reagents.has_reagent("beer"))
M.unlock_medal("DUI", 1)
if(M.reagents.has_reagent("space_drugs") && istype(H) && H.wear_id.assignment == "Security Officer")
M.unlock_medel("Ridin' Dirty",1)
*/
var/damage = rand(5,15)
H.apply_damage(2*damage, BRUTE, "head")
H.apply_damage(2*damage, BRUTE, "chest")
@@ -810,7 +801,7 @@
H.apply_damage(0.5*damage, BRUTE, "r_arm")
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
B.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
B.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
bloodiness += 4
@@ -933,7 +924,7 @@
var/list/kv = list(
"type" = "mulebot",
"name" = suffix,
"loca" = loc.loc, // area
"loca" = (loc ? loc.loc : "Unknown"), // somehow loc can be null and cause a runtime - Quarxink
"mode" = mode,
"powr" = (cell ? cell.percent() : 0),
"dest" = destination,

View File

@@ -137,6 +137,11 @@
var/obj/machinery/camera/C = usr:current
if ((C && istype(C, /obj/machinery/camera)) || C==null)
if(isrobot(target))
C = target:camera
usr:current = C
usr.reset_view(C)
else
var/closestDist = -1
if (C!=null)
if (C.status)
@@ -147,7 +152,7 @@
//check other cameras
var/obj/machinery/camera/closest = C
for(var/obj/machinery/camera/C2 in world)
if (C2.network in src.networks)
if (C2.network == src.networks)
if (C2.z == target.z)
zmatched = 1
if (C2.status)

View File

@@ -149,9 +149,9 @@
if(clonename)
src.occupant.real_name = clonename
src.occupant.original_name = clonename //we don't want random ghost names should we die again.
else
src.occupant.real_name = "clone" //No null names!!
src.occupant.original_name = original_name
var/datum/mind/clonemind = (locate(mindref) in ticker.minds)

View File

@@ -34,9 +34,6 @@
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
if(issilicon(user) && !emagged)
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
if(emagged)
dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
@@ -46,6 +43,8 @@
dat += "<BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else
if(issilicon(user))
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
dat += "<BR>"
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
@@ -88,16 +87,19 @@
loadProgram(target)
else if(href_list["burntest"])
if(!emagged) return
target = locate(/area/holodeck/source_burntest)
if(target)
loadProgram(target)
else if(href_list["wildlifecarp"])
if(!emagged) return
target = locate(/area/holodeck/source_wildlife)
if(target)
loadProgram(target)
else if(href_list["AIoverride"])
if(!issilicon(usr)) return
emagged = 1
src.add_fingerprint(usr)

View File

@@ -5,15 +5,16 @@
desc = "Used to monitor status of people being operated on."
icon_state = "operating"
circuit = "/obj/item/weapon/circuitboard/operating"
var/mob/living/carbon/human/victim = null
var/obj/machinery/optable/table = null
var/id = 0.0
var
mob/living/carbon/human/victim = null
obj/machinery/optable/table = null
/obj/machinery/computer/operating/New()
..()
for(var/obj/machinery/optable/O in world)
if(src.id == O.id)
src.table = O
for(dir in list(NORTH,EAST,SOUTH,WEST))
table = locate(/obj/machinery/optable, get_step(src, dir))
if (!isnull(table))
break
/obj/machinery/computer/operating/attack_ai(mob/user)
add_fingerprint(user)
@@ -21,12 +22,14 @@
return
interact(user)
/obj/machinery/computer/operating/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
interact(user)
/obj/machinery/computer/operating/proc/interact(mob/user)
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
if (!istype(user, /mob/living/silicon))
@@ -43,7 +46,7 @@
<B>Patient Information:</B><BR>
<BR>
<B>Name:</B> [src.victim.real_name]<BR>
<B>Age:</B> [!isnull(src.victim.age) ? src.victim.age : "Undetermined"]<BR>
<B>Age:</B> [src.victim.age]<BR>
<B>Blood Type:</B> [src.victim.dna.b_type]<BR>
<BR>
<B>Health:</B> [src.victim.health]<BR>
@@ -51,7 +54,7 @@
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
<B>Patient Status:</B> [src.victim.stat ? "Non-responsive" : "Stable"]<BR>
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
"}
else
src.victim = null
@@ -63,15 +66,15 @@
user << browse(dat, "window=op")
onclose(user, "op")
/obj/machinery/computer/operating/Topic(href, href_list)
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
// if (href_list["update"])
// src.interact(usr)
return
/obj/machinery/computer/operating/process()
if(!(stat & (NOPOWER|BROKEN)) )
use_power(500)

View File

@@ -48,7 +48,7 @@
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/scan_consolenew
name = "Circuit board (DNA Machine)"
build_path = "/obj/machinery/scan_consolenew"
build_path = "/obj/machinery/computer/scan_consolenew"
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/communications
name = "Circuit board (Communications)"
@@ -147,6 +147,7 @@
name = "Circuit board (Supply shuttle console)"
build_path = "/obj/machinery/computer/supplycomp"
origin_tech = "programming=3"
var/contraband_enabled = 0
/obj/item/weapon/circuitboard/operating
name = "Circuit board (Operating Computer)"
build_path = "/obj/machinery/computer/operating"
@@ -207,6 +208,28 @@
/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/device/multitool))
var/catastasis = src.contraband_enabled
var/opposite_catastasis
if(catastasis)
opposite_catastasis = "STANDARD"
catastasis = "BROAD"
else
opposite_catastasis = "BROAD"
catastasis = "STANDARD"
switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
//switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
if("Switch to STANDARD","Switch to BROAD")
src.contraband_enabled = !src.contraband_enabled
if("Cancel")
return
else
user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
return
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
switch(state)
if(0)
@@ -306,4 +329,8 @@
if(circuit.id) B:id = circuit.id
if(circuit.records) B:records = circuit.records
if(circuit.frequency) B:frequency = circuit.frequency
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
var/obj/machinery/computer/supplycomp/SC = B
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
SC.can_order_contraband = C.contraband_enabled
del(src)

View File

@@ -2,22 +2,17 @@
name = "Identification Computer"
desc = "A computer used to modify ID cards."
icon_state = "id"
circuit = "/obj/item/weapon/circuitboard/card"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/card/id/modify = null
var/authenticated = 0.0
var/mode = 0.0
var/printing = null
req_access = list(access_change_ids)
circuit = "/obj/item/weapon/circuitboard/card"
var
obj/item/weapon/card/id/scan = null
obj/item/weapon/card/id/modify = null
authenticated = 0.0
mode = 0.0
printing = null
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
req_access = list(access_cent_captain)
/obj/machinery/computer/card/attackby(O as obj, user as mob)
/obj/machinery/computer/card/attackby(O as obj, user as mob)//TODO:SANITY
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/idcard = O
if(access_change_ids in idcard.access)
@@ -37,12 +32,15 @@
else
..()
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
if(..())
return
@@ -169,6 +167,7 @@
onclose(user, "id_com")
return
/obj/machinery/computer/card/Topic(href, href_list)
if(..())
return
@@ -188,6 +187,9 @@
if ("modify")
if (modify)
data_core.manifest_modify(modify.registered_name, modify.assignment)
if(istype(modify,/obj/item/weapon/card/id/fluff/lifetime))
modify.name = text("[modify.registered_name]'s Lifetime ID Card ([modify.assignment])")
else
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
if(ishuman(usr))
modify.loc = usr.loc
@@ -243,7 +245,9 @@
if (authenticated)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
t1 = input("Enter a custom job assignment.","Assignment")
var/temp_t = copytext(sanitize(input("Enter a custom job assignment.","Assignment")),1,MAX_MESSAGE_LEN)
if(temp_t)
t1 = temp_t
else
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
if (modify)
@@ -268,3 +272,11 @@
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
updateUsrDialog()
return
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
req_access = list(access_cent_captain)

View File

@@ -1,3 +1,17 @@
/obj/machinery/computer/hologram_comp
name = "Hologram Computer"
desc = "Rumoured to control holograms."
icon = 'stationobjs.dmi'
icon_state = "holo_console0"
var
obj/machinery/hologram/projector/projector = null
temp = null
lumens = 0.0
h_r = 245.0
h_g = 245.0
h_b = 245.0
/obj/machinery/computer/hologram_comp/New()
..()
spawn( 10 )

View File

@@ -16,7 +16,7 @@
//only load blast doors for map-defined departments for the moment
switch(department)
if("Engineering")
if("SinguloEngineering-Antiqua")
connectedDoorIds.Add("Engineering Primary Access")
connectedDoorIds.Add("Engineering Secondary Access")
connectedDoorIds.Add("Fore Maintenance Access")
@@ -28,7 +28,13 @@
connectedDoorIds.Add("Atmospheric Storage Rad Shielding")
connectedDoorIds.Add("Construction Storage Rad Shielding")
connectedDoorIds.Add("Engineering Secure Storage")
if("Medbay")
if("RustEngineering-Antiqua")
connectedDoorIds.Add("Port vessel entry")
connectedDoorIds.Add("Starboard vessel entry")
connectedDoorIds.Add("Central aft shell access")
connectedDoorIds.Add("Port aft shell access")
connectedDoorIds.Add("Starboard aft shell access")
if("Medbay-Exodus")
connectedDoorIds.Add("Genetics Outer Shutters")
connectedDoorIds.Add("Genetics Inner Shutters")
connectedDoorIds.Add("Chemistry Outer Shutters")

View File

@@ -1,3 +1,25 @@
/obj/machinery/computer/secure_data
name = "Security Records"
desc = "Used to view and edit personnel's security records"
icon_state = "security"
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var
obj/item/weapon/card/id/scan = null
obj/item/weapon/disk/records/disk = null
authenticated = null
rank = null
screen = null
datum/data/record/active1 = null
datum/data/record/active2 = null
a_id = null
temp = null
printing = null
can_change_id = 0
list/Perp
tempname = null
/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob)
if(istype(O, /obj/item/weapon/card/id) && !scan)
usr.drop_item()
@@ -523,6 +545,10 @@ What a mess.*/
updateUsrDialog()
return
/obj/machinery/computer/secure_data/detective_computer
icon = 'computer.dmi'
icon_state = "messyfiles"
/obj/item/weapon/disk/records
name = "Crew Records Disk"
desc = "Stores security and medical records."

View File

@@ -39,6 +39,7 @@
message_admins("[key_name_admin(user)] has launched the shuttle")
log_game("[user.ckey] has launched the shuttle early")
world << "\blue <B>Alert: Shuttle launch time shortened to 10 seconds!</B>"
emergency_shuttle.online = 1
emergency_shuttle.settimeleft(10)
//src.authorized = null
del(src.authorized)

View File

@@ -225,6 +225,11 @@ to destroy them and players will be able to make replacements.
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
origin_tech = "programming=3;powerstorage=5;engineering=5"
/obj/item/weapon/circuitboard/pacman/industrial
name = "Circuit Board (Industrial PACMAN-type Generator)"
build_path = "/obj/machinery/power/port_gen/pacman/industrial"
origin_tech = "programming=3;powerstorage=4;engineering=4"
/obj/item/weapon/circuitboard/pacman2
name = "Circuit Board (PACMANII-type Generator)"
build_path = "/obj/machinery/power/port_gen/pacman2"

View File

@@ -65,7 +65,7 @@ for reference:
var/health = 100.0
var/maxhealth = 100.0
attackby(obj/item/weapon/W as obj, mob/user as mob)
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/stack/sheet/wood))
if (src.health < src.maxhealth)
for(var/mob/O in viewers(src, null))
@@ -88,7 +88,7 @@ for reference:
else
if (src.health <= 0)
for(var/mob/O in viewers(src, null))
O << "\red <B>The barricade is smashed appart!</B>"
O << "\red <B>The barricade is smashed apart!</B>"
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
@@ -99,14 +99,14 @@ for reference:
switch(severity)
if(1.0)
for(var/mob/O in viewers(src, null))
O << "\red <B>The barricade is blown appart!</B>"
O << "\red <B>The barricade is blown apart!</B>"
del(src)
return
if(2.0)
src.health -= 25
if (src.health <= 0)
for(var/mob/O in viewers(src, null))
O << "\red <B>The barricade is blown appart!</B>"
O << "\red <B>The barricade is blown apart!</B>"
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
@@ -115,7 +115,7 @@ for reference:
meteorhit()
for(var/mob/O in viewers(src, null))
O << "\red <B>The barricade is smashed appart!</B>"
O << "\red <B>The barricade is smashed apart!</B>"
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))

Some files were not shown because too many files have changed in this diff Show More