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

Conflicts:
	maps/tgstation.2.0.8.dmm
This commit is contained in:
Erthilo
2012-06-08 20:19:27 +01:00
49 changed files with 7520 additions and 7304 deletions
+17 -9
View File
@@ -54,12 +54,12 @@ vs_control/var
airflow_light_pressure = 30
airflow_medium_pressure = 45
airflow_heavy_pressure = 60
airflow_heaviest_pressure = 100
airflow_heaviest_pressure = 90
airflow_damage = 0.3
airflow_stun = 0.15
airflow_speed_decay = 1
airflow_delay = 35 //Time in deciseconds before they can be moved by airflow again.
airflow_delay = 25 //Time in deciseconds before they can be moved by airflow again.
airflow_mob_slowdown = 3 //Time in tenths of a second to add as a delay to each movement by a mob.\
Only active if they are fighting the pull of the airflow.
airflow_stun_cooldown = 10 //How long, in tenths of a second, to wait before stunning them again.
@@ -85,7 +85,7 @@ mob/living/carbon/human/airflow_stun()
if(shoes)
if(shoes.flags & NOSLIP) return 0
if(weakened <= 0) src << "\red The sudden rush of air knocks you over!"
weakened = max(weakened,rand(1,2))
weakened = max(weakened,rand(1,5))
last_airflow_stun = world.time
atom/movable/proc/check_airflow_movable(n)
@@ -126,11 +126,17 @@ proc/Airflow(zone/A,zone/B)
//These turfs are the midway point between A and B, and will be the destination point for thrown objects.
var/list/connection/connections_A = A.connections
var/list/turf/connected_turfs = list()
for(var/connection/C in connections_A)
for(var/connection/C in connections_A) //Grab the turf that is in the zone we are flowing to (determined by n)
if( ( A == C.A.zone || A == C.zone_A ) && ( B == C.B.zone || B == C.zone_B ) )
connected_turfs |= C.A
if(n < 0)
connected_turfs |= C.B
else
connected_turfs |= C.A
else if( ( A == C.B.zone || A == C.zone_B ) && ( B == C.A.zone || B == C.zone_A ) )
connected_turfs |= C.B
if(n < 0)
connected_turfs |= C.A
else
connected_turfs |= C.B
//Get lists of things that can be thrown across the room for each zone.
var/list/pplz = B.movables()
@@ -145,7 +151,7 @@ proc/Airflow(zone/A,zone/B)
if(M.last_airflow > world.time - vsc.airflow_delay) continue
//Check for knocking people over
if(ismob(M) && n > vsc.airflow_medium_pressure)
if(ismob(M) && n > vsc.airflow_heaviest_pressure)
if(M:nodamage) continue
M:airflow_stun()
@@ -333,6 +339,7 @@ atom/movable
airflow_hit(A)
else
airflow_speed = 0
airflow_time = 0
. = ..()
atom/movable/proc/airflow_hit(atom/A)
@@ -343,6 +350,7 @@ mob/airflow_hit(atom/A)
for(var/mob/M in hearers(src))
M.show_message("\red <B>[src] slams into [A]!</B>",1,"\red You hear a loud slam!",2)
playsound(src.loc, "smash.ogg", 25, 1, -1)
weakened = max(weakened, (istype(A,/obj/item) ? A:w_class : rand(1,5))) //Heheheh
. = ..()
obj/airflow_hit(atom/A)
@@ -356,8 +364,8 @@ obj/item/airflow_hit(atom/A)
airflow_dest = null
mob/living/carbon/human/airflow_hit(atom/A)
for(var/mob/M in hearers(src))
M.show_message("\red <B>[src] slams into [A]!</B>",1,"\red You hear a loud slam!",2)
// for(var/mob/M in hearers(src))
// M.show_message("\red <B>[src] slams into [A]!</B>",1,"\red You hear a loud slam!",2)
playsound(src.loc, "punch", 25, 1, -1)
loc:add_blood(src)
if (src.wear_suit)
+36 -18
View File
@@ -11,6 +11,8 @@ connection
zone
zone_A
zone_B
ref_A
ref_B
indirect = 0 //If the connection is purely indirect, the zones should not join.
last_updated //The tick at which this was last updated.
no_zone_count = 0
@@ -21,27 +23,29 @@ connection
if(!A.zone.connections) A.zone.connections = list()
A.zone.connections += src
zone_A = A.zone
ref_A = "\ref[A]"
if(!B.zone.connections) B.zone.connections = list()
B.zone.connections += src
zone_B = B.zone
ref_B = "\ref[B]"
if(!air_master.tiles_with_connections)
air_master.tiles_with_connections = list()
if(air_master.tiles_with_connections[A])
var/list/A_connections = air_master.tiles_with_connections[A]
if(air_master.tiles_with_connections[ref_A])
var/list/A_connections = air_master.tiles_with_connections[ref_A]
A_connections |= src
else
var/list/A_connections = list(src)
air_master.tiles_with_connections[A] = A_connections
air_master.tiles_with_connections[ref_A] = A_connections
if(air_master.tiles_with_connections[B])
var/list/B_connections = air_master.tiles_with_connections[B]
if(air_master.tiles_with_connections[ref_B])
var/list/B_connections = air_master.tiles_with_connections[ref_B]
B_connections |= src
else
var/list/B_connections = list(src)
air_master.tiles_with_connections[B] = B_connections
air_master.tiles_with_connections[ref_B] = B_connections
if(!A.zone.connected_zones)
A.zone.connected_zones = list()
@@ -68,23 +72,23 @@ connection
A.zone.connections.Remove(src)
if(!A.zone.connections.len)
del A.zone.connections
if(A in air_master.tiles_with_connections)
var/list/A_connections = air_master.tiles_with_connections[A]
A_connections -= src
if(A_connections && !A_connections.len)
del A_connections
air_master.tiles_with_connections.Remove(A)
if(ref_A in air_master.tiles_with_connections)
var/list/A_connections = air_master.tiles_with_connections[ref_A]
A_connections -= src
if(A_connections && !A_connections.len)
del A_connections
air_master.tiles_with_connections.Remove(ref_A)
if(B)
if(B.zone && B.zone.connections)
B.zone.connections.Remove(src)
if(!B.zone.connections.len)
del B.zone.connections
if(B in air_master.tiles_with_connections)
var/list/B_connections = air_master.tiles_with_connections[B]
B_connections -= src
if(B_connections && !B_connections.len)
del B_connections
air_master.tiles_with_connections.Remove(B)
if(ref_B in air_master.tiles_with_connections)
var/list/B_connections = air_master.tiles_with_connections[ref_B]
B_connections -= src
if(B_connections && !B_connections.len)
del B_connections
air_master.tiles_with_connections.Remove(ref_B)
if(zone_A)
if(zone_A && zone_A.connections)
zone_A.connections.Remove(src)
@@ -173,6 +177,8 @@ connection
if(A.zone == B.zone)
//world.log << "Connection removed: Zones now merged."
del src
if(ref_A != "\ref[A]" || ref_B != "\ref[B]")
del src
if((A.zone && A.zone != zone_A) || (B.zone && B.zone != zone_B))
Sanitize()
if(!A.zone || !B.zone)
@@ -189,6 +195,17 @@ connection
if(!A.zone || !B.zone)
del src
if(A.zone == zone_B && B.zone == zone_A)
var/turf/temp = B
B = A
A = temp
zone_B = B.zone
zone_A = A.zone
var/temp_ref = ref_A
ref_A = ref_B
ref_B = temp_ref
return
if(zone_A)
if(zone_A.connections)
zone_A.connections.Remove(src)
@@ -244,6 +261,7 @@ connection
zone_A = A.zone
else if(A.zone && A.zone != zone_A)
if(zone_A)
+11 -3
View File
@@ -8,6 +8,8 @@ zone
//Change all the zone vars of the turfs, check for space to be added to space_tiles.
for(var/turf/T in contents)
if(T.zone)
T.zone.RemoveTurf(T)
T.zone = src
if(istype(T,/turf/space))
AddSpace(T)
@@ -30,8 +32,14 @@ zone
Del()
//Ensuring the zone list doesn't get clogged with null values.
for(var/turf/simulated/T in contents)
if(T.zone && T.zone == src)
T.zone = null
for(var/zone/Z in connected_zones)
if(src in Z.connected_zones)
Z.connected_zones.Remove(src)
for(var/connection/C in connections)
del(C)
C.Cleanup()
zones -= src
. = ..()
@@ -70,13 +78,13 @@ turf/proc/ZCanPass(turf/T)
for(var/obj/obstacle in src)
if(istype(obstacle,/obj/machinery/door) && !istype(obstacle,/obj/machinery/door/window))
continue
if(!obstacle.CanPass(0, T, 0, 1))
if(!obstacle.CanPass(0, T, 1.5, 1))
return 0
for(var/obj/obstacle in T)
if(istype(obstacle,/obj/machinery/door) && !istype(obstacle,/obj/machinery/door/window))
continue
if(!obstacle.CanPass(0, src, 0, 1))
if(!obstacle.CanPass(0, src, 1.5, 1))
return 0
return 1
+6 -6
View File
@@ -136,10 +136,11 @@ datum
for(var/turf/simulated/S in world)
if(S.z < 5)
if(!S.blocks_air && !S.zone && S.z < 5) // Added last check to force skipping asteroid z-levels -- TLE
new/zone(S)
if(!S.zone && !S.blocks_air && S.z < 5) // Added last check to force skipping asteroid z-levels -- TLE
if(S.CanPass(null, S, 0, 0))
new/zone(S)
S.update_air_properties()
tiles_to_update |= S
world << "\red \b Geometry processed in [time2text(world.timeofday-start_time, "mm:ss")] minutes!"
spawn start()
@@ -151,6 +152,7 @@ datum
//Outputs: None.
set background = 1
while(1)
if(!kill_air)
current_cycle++
@@ -166,9 +168,7 @@ datum
if(tiles_to_update.len > 0) //If there are tiles to update, do so.
for(var/turf/simulated/T in tiles_to_update)
spawn
if(istype(T))
T.update_air_properties()
T.update_air_properties()
tiles_to_update = list()
for(var/zone/Z in zones)
+23 -21
View File
@@ -174,7 +174,7 @@ turf
if(CanPass(null, get_step(src,direction), 0, 0))
air_check_directions |= direction
if(!zone && !density) //No zone and not a wall, lets add ourself to a zone.
if(!zone && CanPass(null, src, 1.5, 1)) //No zone and not a wall, lets add ourself to a zone.
for(var/direction in cardinal)
if(air_check_directions&direction)
var/turf/simulated/T = get_step(src,direction)
@@ -184,9 +184,10 @@ turf
if(!zone) //No zone found, new zone!
new/zone(src)
if(!CanPass(null, src, 0, 0)) //Can't pass, and was updated. Delete zone connections involving this turf.
if(air_master.tiles_with_connections[src])
for(var/connection/C in air_master.tiles_with_connections[src])
if(!CanPass(null, src, 0, 0) && !CanPass(null, src, 1.5, 1)) //Can't pass, and was updated. Delete zone connections involving this turf.
if(air_master.tiles_with_connections["\ref[src]"])
var/list/connections = air_master.tiles_with_connections["\ref[src]"]
for(var/connection/C in connections)
del C
update_zone_properties() //Update self zone and adjacent zones.
@@ -202,25 +203,26 @@ turf
var/turf/simulated/T = get_step(src,direction)
if(air_check_directions&direction) //I can connect air in this direction
if(!istype(T)) //Space
if(zone)
if(!CanPass(null, T, 1.5, 1) && CanPass(src, T, 0, 0)) //Normally would block it, instead lets make a connection to it.
if(zone)
zone.AddSpace(T)
else if(!CanPass(src, T, 0, 0)) //I block the air, disconnect from it if connected.
if(zone && T in zone.space_tiles)
zone.RemoveSpace(T)
else if(zone)
zone.rebuild = 1
continue
else if(!(T.CanPass(null, src, 1.5, 1) && CanPass(null, T, 1.5, 1)) && (CanPass(null, T, 0, 0) || T.CanPass(null, src, 0, 0))) //I normally block air, but am permitting it.
if(zone) //Either open or no doors, air can flow.
ZConnect(src,T) //Connect 'em.
else if(!(T.CanPass(null, src, 1.5, 1) && CanPass(null, T, 1.5, 1))) //If I block air, we must look to see if the adjacent turfs need rebuilt.
else if(!T.CanPass(null, src, 1.5, 1) && !T.CanPass(null, src, 0, 0)) //If I block air, we must look to see if the adjacent turfs need rebuilt.
if(T.zone && !T.zone.rebuild)
for(var/direction2 in cardinal - direction) //Check all other directions for air that might be connected.
var/turf/simulated/NT = get_step(src, direction2)
if(NT.zone && NT.zone == T.zone)
if(direction == reverse_direction(direction2)) //If it is opposite, then rebuild anyways.
T.zone.rebuild = 1
break
else
var/turf/simulated/LT = get_step(src, direction2|direction) //Is there a diagonal for the air to path around?
if(!LT || !LT.zone || LT.zone != T.zone) //Either it does not exist or the zone does not match, rebuild
T.zone.rebuild = 1
break
else if(!LT.CanPass(null, LT, 0, 0) || !NT.CanPass(null, NT, 0, 0)) //It exist, zone matches, see if it can transfer air. Otherwise, rebuild.
T.zone.rebuild = 1
break
if(NT && NT.zone && NT.zone == T.zone)
T.zone.rebuild = 1
else if((!T.CanPass(null, src, 1.5, 1) && T.CanPass(null, src, 0, 0)) || (!CanPass(null, T, 1.5, 1) && CanPass(null, T, 0, 0)))
if(T.zone != zone)
ZConnect(src,T)
else if(zone && !zone.rebuild)
for(var/direction2 in cardinal - reverse_direction(direction)) //Check all other directions for air that might be connected.
var/turf/simulated/NT = get_step(T, direction2)
if(NT && NT.zone && NT.zone == zone)
zone.rebuild = 1
+38 -15
View File
@@ -1,4 +1,18 @@
vs_control/var/IgnitionLevel = 10 //Moles of oxygen+plasma - co2 needed to burn.
/*
Making Bombs with ZAS:
Make burny fire with lots of burning
Draw off 5000K gas from burny fire
Separate gas into oxygen and plasma components
Obtain plasma and oxygen tanks filled up about 50-75% with normal-temp gas
Fill rest with super hot gas from separated canisters, they should be about 125C now.
Attach to transfer valve and open. BOOM.
*/
vs_control/var/IgnitionLevel = 0.5 //Moles of oxygen+plasma - co2 needed to burn.
//Some legacy definitions so fires can be started.
atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -81,7 +95,7 @@ obj
firelevel = air_contents.calculate_firelevel(liquid)
//Ensure that there is an appropriate amount of fuel and O2 here.
if(firelevel > 25 && (air_contents.toxins || fuel || liquid))
if(firelevel > 0.25 && (air_contents.toxins || fuel || liquid))
for(var/direction in cardinal)
if(S.air_check_directions&direction) //Grab all valid bordering tiles
@@ -92,15 +106,17 @@ obj
//If extinguisher mist passed over the turf it's trying to spread to, don't spread and
//reduce firelevel.
if(enemy_tile.fire_protection > world.time-30)
firelevel -= 150
firelevel -= 1.5
continue
//Spread the fire.
if(!(locate(/obj/fire) in enemy_tile))
if( prob( firelevel/2.5 ) )
if( prob( firelevel*10 ) )
new/obj/fire(enemy_tile,firelevel)
var/datum/gas_mixture/flow = air_contents.remove_ratio(0.5) //Take half the air from the room I guess.
var/datum/gas_mixture/flow = air_contents.remove_ratio(0.25)
//The reason we're taking a part of the air instead of all of it is so that it doesn't jump to
//the fire's max temperature instantaneously.
if(flow)
@@ -109,9 +125,9 @@ obj
//Change icon depending on the fuel, and thus temperature.
icon_state = "1"
if(firelevel > 25)
if(firelevel > 2.5)
icon_state = "2"
if(firelevel > 100)
if(firelevel > 6)
icon_state = "3"
//Ensure flow temperature is higher than minimum fire temperatures.
@@ -245,17 +261,20 @@ datum/gas_mixture/proc/zburn(obj/liquid_fuel/liquid)
//Calculate the firelevel.
var/firelevel = calculate_firelevel(liquid)
//Reaches a maximum practical temperature of around 2750.
//Reaches a maximum practical temperature of around 4500.
temperature = 1000*log(0.016*firelevel + 1.45)
//Increase temperature.
temperature = max( 1700*log(0.4*firelevel + 1.23) , temperature )
//Consume some gas.
var/consumed_gas = min(oxygen,0.002*firelevel,total_fuel) / fuel_sources
var/consumed_gas = min(oxygen,0.0005*firelevel,total_fuel) / fuel_sources
oxygen -= consumed_gas
toxins = max(0,toxins-consumed_gas)
carbon_dioxide += consumed_gas*2
if(fuel)
fuel.moles -= consumed_gas
if(fuel.moles <= 0) del fuel
@@ -268,16 +287,20 @@ datum/gas_mixture/proc/zburn(obj/liquid_fuel/liquid)
return consumed_gas*fuel_sources
return 0
datum/gas_mixture/proc/calculate_firelevel(obj/liquid_fuel/liquid)
//Calculates the firelevel based on one equation instead of having to do this multiple times in different areas.
var
datum/gas/volatile_fuel/fuel = locate() in trace_gases
fuel_level = 0
liquid_level = 0
liquid_concentration = 0
if(fuel) fuel_level = fuel.moles
if(liquid) liquid_level = liquid.amount
return oxygen + toxins + liquid_level*15 + fuel_level*5
oxy_concentration = oxygen / volume
tox_concentration = toxins / volume
fuel_concentration = 0
if(fuel) fuel_concentration = (fuel.moles*5) / volume
if(liquid) liquid_concentration = (liquid.amount*15) / volume
return (oxy_concentration + tox_concentration + liquid_concentration + fuel_concentration)*100
/mob/living/carbon/human/proc/FireBurn(mx as num)
//Burns mobs due to fire. Respects heat transfer coefficients on various body parts.
+17 -7
View File
@@ -3,6 +3,8 @@
//Adds the turf to contents, increases the size of the zone, and sets the zone var.
if(T in contents)
return
if(T.zone)
T.zone.RemoveTurf(T)
contents += T
air.group_multiplier++
T.zone = src
@@ -42,8 +44,8 @@
/turf/proc/check_connections()
//Checks for new connections that can be made.
for(var/d in cardinal)
var/turf/T = get_step(src,d)
if(!T || !T.zone || !T.CanPass(0,src,0,0))
var/turf/simulated/T = get_step(src,d)
if(!istype(T) || !T.zone || !T.CanPass(0,src,0,0))
continue
if(T.zone != zone)
ZConnect(src,T)
@@ -90,9 +92,12 @@ proc/ZMerge(zone/A,zone/B)
A.contents = new_contents
//Set all the zone vars.
for(var/turf/T in B.contents)
for(var/turf/simulated/T in B.contents)
T.zone = A
for(var/connection/C in A.connections)
C.Cleanup()
del B
proc/ZConnect(turf/A,turf/B)
@@ -111,12 +116,17 @@ proc/ZConnect(turf/A,turf/B)
//Make some preliminary checks to see if the connection is valid.
if(!A.zone || !B.zone) return
if(A.zone == B.zone) return
if(!A.CanPass(0,B,0,0)) return
if(!A.CanPass(0,B,0,0) || !B.CanPass(0,A,0,0)) return
if(A.CanPass(null, B, 1.5, 1) && B.CanPass(null, A, 1.5, 1))
return ZMerge(A.zone, B.zone)
//Ensure the connection isn't already made.
for(var/connection/C in A.zone.connections)
if((C.A == A && C.B == B) || (C.A == B && C.B == A))
return
if(air_master.tiles_with_connections["\ref[A]"])
var/list/connections = air_master.tiles_with_connections["\ref[A]"]
for(var/connection/C in connections)
C.Cleanup()
if(C.B == B || C.A == B)
return
var/connection/C = new(A,B)
+45 -16
View File
@@ -2,16 +2,16 @@
var/explosion_halt = 0
var/zone_share_percent = 3.5
zone/proc/process()
//Deletes zone if empty.
if(!contents.len)
del src
return 0
//Does rebuilding stuff. Not sure if used.
if(rebuild)
//Deletes zone if empty.
if(!contents.len)
del src
return 0
//Choose a random turf and regenerate the zone from it.
var
turf/sample = pick(contents)
turf/simulated/sample = pick(contents)
list/new_contents
problem = 0
@@ -19,9 +19,25 @@ zone/proc/process()
del(space_tiles)
contents.Remove(null) //I can't believe this is needed.
if(!contents.len)
del src
var/list/tried_turfs = list()
do
sample = pick(contents) //Nor this.
while(!istype(sample))
if(sample)
tried_turfs |= sample
var/list/turfs_to_consider = contents - tried_turfs
if(!turfs_to_consider.len)
break
sample = pick(turfs_to_consider) //Nor this.
while(!istype(sample) || !sample.CanPass(null, sample, 1.5, 1))
if(!istype(sample) || !sample.CanPass(null, sample, 1.5, 1)) //Not a single valid turf.
for(var/turf/simulated/T in contents)
air_master.tiles_to_update |= T
del src
new_contents = FloodFill(sample)
for(var/turf/space/S in new_contents)
@@ -33,22 +49,25 @@ zone/proc/process()
for(var/turf/T in contents)
if(!(T in new_contents))
problem = 1
T.zone = null
if(problem)
//Build some new zones for stuff that wasn't included.
var/list/rebuild_turfs = list()
for(var/turf/T in contents - new_contents)
contents -= T
rebuild_turfs += T
T.zone = null
var/list/turf/simulated/rebuild_turfs = contents - new_contents
var/list/turf/simulated/reconsider_turfs = list()
contents = new_contents
for(var/turf/T in rebuild_turfs)
if(istype(T,/turf/space))
air_master.tiles_to_update |= T
else if(!T.zone && T.CanPass(null, T, 1.5, 1))
var/zone/Z = new /zone(T)
Z.air.copy_from(air)
else
reconsider_turfs |= T
for(var/turf/T in reconsider_turfs)
if(!T.zone)
var/zone/Z = new /zone(T)
Z.air.copy_from(air)
if(istype(T,/turf/space))
if(!T.zone.space_tiles)
T.zone.space_tiles = list()
T.zone.space_tiles |= T
rebuild = 0
//Sometimes explosions will cause the air to be deleted for some reason.
@@ -76,6 +95,16 @@ zone/proc/process()
AirflowSpace(src)
ShareSpace(air,total_space*(zone_share_percent/100))
if(!(last_update%20)) //every 20 processes.
if(connections)
connections.Remove(null)
if(!connections.len)
del connections
if(connected_zones)
connected_zones.Remove(null)
if(!connected_zones.len)
del connected_zones
//React the air here.
//air.react(null,0)
@@ -51,6 +51,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/list/related // the other areas of the same type as this
var/list/lights // list of all lights on this area
var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
var/air_doors_activated
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
+1 -1
View File
@@ -507,7 +507,7 @@
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
/obj/item/device/hacktool
name = "hacktool"
name = "modifed door debugger"
icon_state = "hacktool"
flags = FPRINT | TABLEPASS | CONDUCT
var/in_use = 0
+2 -2
View File
@@ -529,8 +529,8 @@
item_state = "syringe_kit"
/obj/item/weapon/storage/toolbox/syndicate
name = "suspicious looking toolbox"
desc = "You have no idea what this is."
name = "red and black toolbox"
desc = "An oddly coloured toolbox."
icon_state = "syndicate"
item_state = "toolbox_syndi"
origin_tech = "combat=1;syndicate=1"
+2 -2
View File
@@ -720,7 +720,7 @@
/obj/item/weapon/card/id/syndicate
name = "agent card"
desc = "Shhhhh."
// desc = "Shhhhh."
access = list(access_maint_tunnels)
origin_tech = "syndicate=3"
@@ -1840,7 +1840,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
/obj/item/weapon/plastique
name = "plastic explosives"
desc = "Used to put holes in specific areas without too much extra hole."
desc = "Used to put holes in specific areas without too much extra hole. Does not work on people."
gender = PLURAL
icon = 'assemblies.dmi'
icon_state = "plastic-explosive0"
+37 -8
View File
@@ -124,10 +124,32 @@
/area/proc/firealert()
if(src.name == "Space") //no fire alarms in space
return
if (!( src.fire ))
src.fire = 1
src.updateicon()
src.mouse_opacity = 0
if (!fire)
fire = 1
updateicon()
mouse_opacity = 0
for(var/obj/machinery/door/airlock/E in master.all_doors)
if(!E.air_locked)
if((!E.arePowerSystemsOn()) || (E.stat & NOPOWER)) continue
if(!E.density)
spawn(0)
E.close()
sleep(10)
if(E.density)
E.air_locked = E.req_access
E.req_access = list(access_engine, access_atmospherics)
E.update_icon()
if(E.operating)
spawn(10)
E.close()
if(E.density)
E.air_locked = E.req_access
E.req_access = list(access_engine, access_atmospherics)
E.update_icon()
else if(!E:locked) //Don't lock already bolted doors.
E.air_locked = E.req_access
E.req_access = list(access_engine, access_atmospherics)
E.update_icon()
for(var/obj/machinery/door/firedoor/D in src)
if(!D.blocked)
if(D.operating)
@@ -145,10 +167,17 @@
return
/area/proc/firereset()
if (src.fire)
src.fire = 0
src.mouse_opacity = 0
src.updateicon()
if (fire)
fire = 0
mouse_opacity = 0
updateicon()
for(var/obj/machinery/door/airlock/E in master.all_doors)
if((!E.arePowerSystemsOn()) || (E.stat & NOPOWER)) continue
if(E.air_locked) //Don't mess with doors locked for other reasons.
if(E.density)
E.req_access = E.air_locked
E.air_locked = null
E.update_icon()
for(var/obj/machinery/door/firedoor/D in src)
if(!D.blocked)
if(D.operating)
+1 -1
View File
@@ -145,7 +145,7 @@ Devices and Tools;
/obj/item/clothing/glasses/thermal:3:Thermal Imaging Glasses;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
/obj/item/weapon/plastique:2:C-4 (Destroys walls, not people);
/obj/item/device/powersink:5:Powersink (DANGER!);
/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board;
+1 -1
View File
@@ -59,7 +59,7 @@ Devices and Tools;
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit;
/obj/item/clothing/glasses/thermal:3:Thermal Imaging Glasses;
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
/obj/item/weapon/plastique:2:C-4 (Destroys walls, not people);
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
/obj/item/device/powersink:5:Powersink (DANGER!);
/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
+16 -16
View File
@@ -36,25 +36,25 @@
do
switch(pick(1,2,3,4))
if(1) //NORTH
starty = world.maxy-3
startx = rand(1, world.maxx-1)
endy = 1
endx = rand(1, world.maxx-1)
starty = world.maxy-15
startx = rand(15, world.maxx-15)
endy = 15
endx = rand(15, world.maxx-15)
if(2) //EAST
starty = rand(1,world.maxy-1)
startx = world.maxx-3
endy = rand(1, world.maxy-1)
endx = 1
starty = rand(15,world.maxy-15)
startx = world.maxx-15
endy = rand(15, world.maxy-15)
endx = 15
if(3) //SOUTH
starty = 3
startx = rand(1, world.maxx-1)
endy = world.maxy-1
endx = rand(1, world.maxx-1)
starty = 15
startx = rand(15, world.maxx-15)
endy = world.maxy-15
endx = rand(15, world.maxx-15)
if(4) //WEST
starty = rand(1, world.maxy-1)
startx = 3
endy = rand(1,world.maxy-1)
endx = world.maxx-1
starty = rand(15, world.maxy-15)
startx = 15
endy = rand(15,world.maxy-15)
endx = world.maxx-15
pickedstart = locate(startx, starty, 1)
pickedgoal = locate(endx, endy, 1)
+36
View File
@@ -103,6 +103,42 @@
global_mutations += mut// add to global mutations list!
*/
//setupdooralarms() goes through every door in the world before the game starts, checks all the squares
//adjacent to them, and if the adjacent square does not contain a dense turf and is not in the same
//area as the door, then the door is added to that adjacent area's auxdoor list to be used later on for
//atmos and fire alarms.
proc/setupdooralarms() //Strumpetplaya added 11/09/10 Automated Secondary Alarms on Doors
world << "\red <B>Setting up atmospheric lockdown areas...</b>"
for(var/obj/machinery/door/D in world)
var/turf/source = get_turf(D)
var/area/A = get_area(source)
var/turf/north = get_step(source, NORTH)
var/turf/east = get_step(source, EAST)
var/turf/south = get_step(source, SOUTH)
var/turf/west = get_step(source, WEST)
A.all_doors |= D
if(!north.density)
var/area/other_area = get_area(north)
if(other_area.name != A.name)
other_area.master.all_doors |= D
if(!east.density)
var/area/other_area = get_area(east)
if(other_area.name != A.name)
other_area.master.all_doors |= D
if(!south.density)
var/area/other_area = get_area(south)
if(other_area.name != A.name)
other_area.master.all_doors |= D
if(!west.density)
var/area/other_area = get_area(west)
if(other_area.name != A.name)
other_area.master.all_doors |= D
/proc/setupfactions()
+67 -5
View File
@@ -1012,8 +1012,73 @@ table tr:first-child th:first-child { border: none;}
new_area_danger_level = max(new_area_danger_level,AA.danger_level)
if (alarm_area.atmosalert(new_area_danger_level)) //if area was in normal state or if area was in alert state
post_alert(new_area_danger_level)
// if(danger_level > 1)
// air_doors_close(0)
// else
// air_doors_open(0)
update_icon()
/obj/machinery/alarm
proc/air_doors_close(manual)
var/area/A = get_area(src)
if(!A.master.air_doors_activated)
A.master.air_doors_activated = 1
for(var/obj/machinery/door/E in A.master.all_doors)
if(istype(E,/obj/machinery/door/firedoor))
if(!E:blocked)
if(E.operating)
E:nextstate = CLOSED
else if(!E.density)
spawn(0)
E.close()
continue
if(istype(E, /obj/machinery/door/airlock))
if((!E:arePowerSystemsOn()) || (E.stat & NOPOWER)) continue
if(!E.density)
spawn(0)
E.close()
sleep(10)
if(E.density)
E:air_locked = E.req_access
E:req_access = list(access_engine, access_atmospherics)
E.update_icon()
if(E.operating)
spawn(10)
E.close()
if(E.density)
E:air_locked = E.req_access
E:req_access = list(access_engine, access_atmospherics)
E.update_icon()
else if(!E:locked) //Don't lock already bolted doors.
E:air_locked = E.req_access
E:req_access = list(access_engine, access_atmospherics)
E.update_icon()
proc/air_doors_open(manual)
var/area/A = get_area(loc)
if(A.master.air_doors_activated)
A.master.air_doors_activated = 0
for(var/obj/machinery/door/E in A.master.all_doors)
if(istype(E, /obj/machinery/door/firedoor))
if(!E:blocked)
if(E.operating)
E:nextstate = OPEN
else if(E.density)
spawn(0)
E.open()
continue
if(istype(E, /obj/machinery/door/airlock))
if((!E:arePowerSystemsOn()) || (E.stat & NOPOWER)) continue
if(E:air_locked) //Don't mess with doors locked for other reasons.
if(E.density)
E:req_access = E:air_locked
E:air_locked = null
E.update_icon()
/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob)
/* if (istype(W, /obj/item/weapon/wirecutters))
stat ^= BROKEN
@@ -1186,12 +1251,9 @@ table tr:first-child th:first-child { border: none;}
return
/obj/machinery/firealarm/proc/reset()
if (!( src.working ))
return
var/area/A = src.loc
A = A.loc
if (!( istype(A, /area) ))
if (!working)
return
var/area/A = get_area(src)
if(network)
for(var/obj/machinery/door/firedoor/D in world)
if(!D.blocked && D.net_id == src.network)
+4 -1
View File
@@ -78,6 +78,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
spawnPowerRestoreRunning = 0
welded = null
locked = 0
list/air_locked = 0
wires = 4095
aiDisabledIdScanner = 0
aiHacking = 0
@@ -342,12 +343,14 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
icon_state = "door_locked"
else
icon_state = "door_closed"
if(p_open || welded)
if(p_open || welded || air_locked)
overlays = list()
if(p_open)
overlays += image(icon, "panel_open")
if(welded)
overlays += image(icon, "welded")
if(air_locked)
overlays += image('Door1.dmi', "air")
else
icon_state = "door_open"
return
+1 -1
View File
@@ -342,7 +342,7 @@
update_nearby_tiles(need_rebuild)
if(!air_master) return 0
var/turf/simulated/source = loc
var/turf/simulated/source = get_turf(src)
var/turf/simulated/north = get_step(source,NORTH)
var/turf/simulated/south = get_step(source,SOUTH)
var/turf/simulated/east = get_step(source,EAST)
+1 -40
View File
@@ -87,43 +87,4 @@
return
//border_only fire doors are special when it comes to air groups
/obj/machinery/door/firedoor/border_only
New()
..()
var/turf/simulated/source = get_turf(src)
var/turf/simulated/T = get_step(source,dir)
if(!source.CanPass(null, T, 0, 0) || !locate(/obj/machinery/door/firedoor/border_only) in T)
var/obj/machinery/door/firedoor/F = new(source)
F.name = name
F.desc = desc
F.dir = dir
spawn(0)
del src
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group)
var/direction = get_dir(src,target)
if(direction)
return (dir != direction)
return 1 //It will break the zone when it actually drops, otherwise let it work normally.
else if(density)
if(!height)
var/direction = get_dir(src,target)
if(direction)
return (dir != direction)
return 0
return 1
update_nearby_tiles(need_rebuild)
if(!air_master) return 0
var/turf/simulated/source = get_turf(src)
var/turf/simulated/destination = get_step(source,dir)
if(istype(source)) air_master.tiles_to_update |= source
if(istype(destination)) air_master.tiles_to_update |= destination
return 1
/obj/machinery/door/firedoor/border_only
+2 -2
View File
@@ -449,9 +449,9 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
src.toxic = 0
else if(src.waterlevel >= 100)
user << "\red The [src] is already full."
user << "\red \The [src] is already full."
else
user << "\red The bucket is not filled with water."
user << "\red \The [src] is not filled with water."
src.updateicon()
else if ( istype(O, /obj/item/nutrient) )
+2
View File
@@ -59,6 +59,8 @@ datum/controller/game_controller
setupgenetics()
setupdooralarms()
// for(var/i = 0, i < max_secret_rooms, i++)
// make_mining_asteroid_secret()
// Because energy cutlasses, facehuggers, and empty rooms are silly. FOR NOW. - Erthilo
+1 -1
View File
@@ -182,7 +182,7 @@
access_status_display = 1
syndicate
name = "Detomatix Cartridge"
name = "modified signaler cartridge"
icon_state = "cart"
access_remote_door = 1
remote_door_id = "syndicate" //Make sure this matches the syndicate shuttle's shield/door id!!
+1 -1
View File
@@ -40,7 +40,7 @@
return
/obj/item/device/chameleon
name = "chameleon-projector"
name = "small device"
icon_state = "shield0"
flags = FPRINT | TABLEPASS| CONDUCT | USEDELAY
slot_flags = SLOT_BELT
+4
View File
@@ -13,6 +13,10 @@ would spawn and follow the beaker, even if it is carried or thrown.
unacidable = 1//So effect are not targeted by alien acid.
flags = TABLEPASS
/obj/effect/ex_act(severity)
if(severity)
del(src)
/obj/effect/effect/water
name = "water"
icon = 'effects.dmi'
@@ -406,7 +406,7 @@ ZIPPO
var/lit = 0
/obj/item/weapon/lighter/zippo
name = "Zippo lighter"
name = "\improper Zippo lighter"
desc = "The zippo."
icon_state = "zippo"
item_state = "zippo"
@@ -28,6 +28,8 @@
message_admins("ATTACK: [user] ([user.ckey]) planted [src] on [target] ([target:ckey]).")
log_attack("<font color='red'> [user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey])</font>")
target.overlays += image('assemblies.dmi', "plastic-explosive2")
log_admin("[user] ([user.ckey]) has planted a [src].")
message_admins("[user] ([user.ckey]) planted a [src].")
user << "Bomb has been planted. Timer counting down from [timer]."
spawn(timer*10)
if(target)
@@ -66,7 +66,7 @@
/obj/item/weapon/implanter/explosive
name = "implanter-explosive"
name = "implanter (E)"
/obj/item/weapon/implanter/explosive/New()
imp = new /obj/item/weapon/implant/explosive( src )
@@ -75,7 +75,7 @@
return
/obj/item/weapon/implanter/compressed
name = "implanter-compressed"
name = "implanter (C)"
icon_state = "cimplanter0"
/obj/item/weapon/implanter/compressed/New()
+6 -6
View File
@@ -9,8 +9,8 @@
/obj/item/weapon/syndie/c4explosive
icon_state = "c-4small_0"
item_state = "c-4small"
name = "mysterious package"
desc = "A mysterious package."
name = "normal-sized package"
desc = "A small wrapped package."
w_class = 3
var/power = 1 /*Size of the explosion.*/
@@ -27,9 +27,9 @@
var/K = rand(1,2000)
K = md5(num2text(K)+name)
K = copytext(K,1,7)
src.desc += "\n You see [K] engraved on \the [src]"
src.desc += "\n You see [K] engraved on \the [src]."
var/obj/item/weapon/syndie/c4detonator/detonator = new(src.loc)
detonator.desc += "\n You see [K] engraved on \the [src]"
detonator.desc += "\n You see [K] engraved on the lighter."
detonator.bomb = src
/obj/item/weapon/syndie/c4explosive/proc/detonate()
@@ -53,8 +53,8 @@
/obj/item/weapon/syndie/c4detonator
icon_state = "c-4detonator_0"
item_state = "c-4detonator"
name = "lighter" /*Sneaky, thanks Dreyfus.*/
desc = "A disposable lighter, it's quite heavy."
name = "\improper Zippo lighter" /*Sneaky, thanks Dreyfus.*/
desc = "The zippo."
w_class = 1
var/obj/item/weapon/syndie/c4explosive/bomb
+9 -9
View File
@@ -1,11 +1,11 @@
/obj/item/weapon/storage/syndie_kit
name = "Box"
desc = "A sleek, sturdy box"
icon_state = "box_of_doom"
name = "box"
desc = "It's just an ordinary box."
icon_state = "box"
item_state = "syringe_kit"
/obj/item/weapon/storage/syndie_kit/imp_freedom
name = "Freedom Implant (with injector)"
name = "box (FI)"
/obj/item/weapon/storage/syndie_kit/imp_freedom/New()
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
@@ -15,7 +15,7 @@
return
/obj/item/weapon/storage/syndie_kit/imp_compress
name = "Compressed Matter Implant (with injector)"
name = "box (CMI)"
/obj/item/weapon/storage/syndie_kit/imp_compress/New()
new /obj/item/weapon/implanter/compressed(src)
@@ -23,18 +23,18 @@
return
/obj/item/weapon/storage/syndie_kit/imp_explosive
name = "Explosive Implant (with injector)"
name = "box (EI)"
/obj/item/weapon/storage/syndie_kit/imp_explosive/New()
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
O.imp = new /obj/item/weapon/implant/explosive(O)
O.name = "(BIO-HAZARD) BIO-detpack"
// O.name = "(BIO-HAZARD) BIO-detpack"
O.update()
..()
return
/obj/item/weapon/storage/syndie_kit/imp_uplink
name = "Uplink Implant (with injector)"
name = "box (UI)"
/obj/item/weapon/storage/syndie_kit/imp_uplink/New()
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
@@ -44,7 +44,7 @@
return
/obj/item/weapon/storage/syndie_kit/space
name = "Space Suit and Helmet"
name = "box (SS)"
/obj/item/weapon/storage/syndie_kit/space/New()
new /obj/item/clothing/suit/space/syndicate(src)
+3 -3
View File
@@ -345,11 +345,11 @@
/obj/structure/window/proc/update_nearby_tiles(need_rebuild)
if(!air_master) return 0
var/turf/simulated/source = loc
var/turf/simulated/source = get_turf(src)
var/turf/simulated/target = get_step(source,dir)
if(istype(source)) air_master.tiles_to_update += source
if(istype(target)) air_master.tiles_to_update += target
if(istype(source)) air_master.tiles_to_update |= source
if(istype(target)) air_master.tiles_to_update |= target
return 1
+4
View File
@@ -322,6 +322,8 @@
/turf/proc/ReplaceWithWall()
var/old_icon = icon_state
if(zone)
zone.RemoveTurf(src)
var/turf/simulated/wall/S = new /turf/simulated/wall( locate(src.x, src.y, src.z) )
S.icon_old = old_icon
S.opacity = 0
@@ -342,6 +344,8 @@
/turf/proc/ReplaceWithRWall()
var/old_icon = icon_state
if(zone)
zone.RemoveTurf(src)
var/turf/simulated/wall/r_wall/S = new /turf/simulated/wall/r_wall( locate(src.x, src.y, src.z) )
S.icon_old = old_icon
S.opacity = 0
+15 -5
View File
@@ -98,7 +98,21 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
lst[i] = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf)
if("reference")
lst[i] = input("Select reference:","Reference",src) as mob|obj|turf|area in world
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
if(!UID) return
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
return
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
if("Yes")
lst[i] = temp_variable
if("NONOCANCEL!")
return
if("Search")
lst[i] = input("Select reference:","Reference") as null|mob|obj|turf|area in world
if("mob reference")
lst[i] = input("Select reference:","Reference",usr) as mob in world
@@ -171,8 +185,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
if(!UID) return
if(length(UID) != 7)
usr << "ERROR. UID must be 7 digits"
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
@@ -239,8 +251,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
if(!UID) return
if(length(UID) != 7)
usr << "ERROR. UID must be 7 digits"
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
@@ -66,8 +66,6 @@ var/list/forbidden_varedit_object_types = list(
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
if(!UID) return
if(length(UID) != 7)
usr << "ERROR. UID must be 7 digits"
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
@@ -131,8 +129,6 @@ var/list/forbidden_varedit_object_types = list(
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
if(!UID) return
if(length(UID) != 7)
usr << "ERROR. UID must be 7 digits"
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
@@ -308,8 +304,6 @@ var/list/forbidden_varedit_object_types = list(
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as null|text
if(!UID) return
if(length(UID) != 7)
usr << "ERROR. UID must be 7 digits"
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
@@ -554,8 +548,6 @@ var/list/forbidden_varedit_object_types = list(
if("Specifc UID (Hexadecimal number)")
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
if(!UID) return
if(length(UID) != 7)
usr << "ERROR. UID must be 7 digits"
var/temp_variable = locate("\[0x[UID]\]")
if(!temp_variable)
usr << "ERROR. Could not locate referenced object."
+10 -20
View File
@@ -524,14 +524,14 @@ datum
src = null
var/turf/the_turf = get_turf(O)
var/datum/gas_mixture/napalm = new
napalm.oxygen = volume*10
napalm.oxygen = volume/10
napalm.temperature = T0C
napalm.update_values()
the_turf.assume_air(napalm)
reaction_turf(var/turf/T, var/volume)
src = null
var/datum/gas_mixture/napalm = new
napalm.oxygen = volume*10
napalm.oxygen = volume/10
napalm.temperature = T0C
napalm.update_values()
T.assume_air(napalm)
@@ -554,14 +554,14 @@ datum
src = null
var/turf/the_turf = get_turf(O)
var/datum/gas_mixture/napalm = new
napalm.nitrogen = volume*10
napalm.nitrogen = volume/10
napalm.temperature = T0C
napalm.update_values()
the_turf.assume_air(napalm)
reaction_turf(var/turf/T, var/volume)
src = null
var/datum/gas_mixture/napalm = new
napalm.nitrogen = volume*10
napalm.nitrogen = volume/10
napalm.temperature = T0C
napalm.update_values()
T.assume_air(napalm)
@@ -1036,18 +1036,10 @@ datum
var/turf/the_turf = get_turf(O)
if(!the_turf)
return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
var/datum/gas_mixture/napalm = new
napalm.toxins = volume*10
napalm.temperature = T0C
napalm.update_values()
the_turf.assume_air(napalm)
new /obj/liquid_fuel(the_turf, volume)
reaction_turf(var/turf/T, var/volume)
src = null
var/datum/gas_mixture/napalm = new
napalm.toxins = volume*10
napalm.temperature = T0C
napalm.update_values()
T.assume_air(napalm)
new /obj/liquid_fuel(T, volume)
return
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -1155,19 +1147,17 @@ datum
src = null
var/turf/the_turf = get_turf(O)
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
fuel.moles = 5
napalm.trace_gases += fuel
napalm.toxins = volume/5
napalm.update_values()
the_turf.assume_air(napalm)
new /obj/liquid_fuel(the_turf, volume)
reaction_turf(var/turf/T, var/volume)
src = null
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
fuel.moles = 5
napalm.trace_gases += fuel
napalm.toxins = volume/5
napalm.update_values()
T.assume_air(napalm)
new /obj/liquid_fuel(T, volume)
return
leporazine
+10
View File
@@ -142,6 +142,16 @@
//////////// Clothing ////////////
//////////////////////////////////
//////////// Gloves ////////////
/obj/item/clothing/gloves/fluff/walter_brooks_1 //botanistpower: Walter Brooks
name = "mittens"
desc = "A pair of well worn, blue mittens."
icon = 'custom_items.dmi'
icon_state = "walter_brooks_1"
item_state = "bluegloves"
color="blue"
//////////// Eye Wear ////////////
/obj/item/clothing/glasses/meson/fluff/book_berner_1 //asanadas: Book Berner
@@ -63,7 +63,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/proc/ghost()
set category = "Ghost"
set name = "Ghost"
set desc = "You cannot be revived as a ghost."
/*if(stat != 2) //this check causes nothing but troubles. Commented out for Nar-Sie's sake. --rastaf0
src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive."
+10 -5
View File
@@ -486,8 +486,9 @@
head = null
if(prev_head && (prev_head.flags & BLOCKHAIR))
// rebuild face
del(face_standing)
del(face_lying)
// del(face_standing)
// del(face_lying)
update_face()
else if (W == l_ear)
l_ear = null
@@ -506,8 +507,9 @@
wear_mask = null
if(prev_mask && (prev_mask.flags & BLOCKHAIR))
// rebuild face
del(face_standing)
del(face_lying)
// del(face_standing)
// del(face_lying)
update_face()
else if (W == wear_id)
wear_id = null
@@ -1255,7 +1257,6 @@
// Should be called only when something about the clothing itself changed
// which is not handled by the equip code.
rebuild_appearance()
update_face() //Fixes hair not coming back after using a BLOCKHAIR mask/helmet
return
// TODO: once I have replaced the udpate_clothing() calls with update_lying() or
@@ -1770,6 +1771,8 @@ It can still be worn/put on as normal.
return
var/obj/item/clothing/W = target.wear_mask
target.u_equip(W)
if (W.flags & BLOCKHAIR)
target.update_face()
if (target.client)
target.client.screen -= W
if (W)
@@ -1899,6 +1902,8 @@ It can still be worn/put on as normal.
target.u_equip(W)
if (target.client)
target.client.screen -= W
if (W.flags & BLOCKHAIR)
target.update_face()
if (W)
W.loc = target.loc
W.dropped(target)
+4
View File
@@ -123,6 +123,8 @@
var/list/icons = list("Blue", "Monochrome", "Rainbow", "Inverted", "Firewall", "Green", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Red", "Static")
if (src.name == "B.A.N.N.E.D." && src.ckey == "spaceman96")
icons += "B.A.N.N.E.D."
if (src.name == "M00X-BC" && src.ckey == "searif")
icons += "M00X-BC"
icontype = input("Please, select a display!", "AI", null/*, null*/) in icons
if(icontype == "Blue")
icon_state = "ai"
@@ -148,6 +150,8 @@
icon_state = "ai-bliss"
else if(icontype == "B.A.N.N.E.D.")
icon_state = "ai-banned"
else if(icontype == "M00X-BC")
icon_state = "ai-searif"
else if(icontype == "Red")
icon_state = "ai-malf"
else if(icontype == "Static")
-2
View File
@@ -82,7 +82,6 @@
for(var/L = 1 to netcount)
var/datum/powernet/PN = new()
//PN.tag = "powernet #[L]"
powernets += PN
PN.number = L
@@ -287,7 +286,6 @@
// not looped, so make a new powernet
var/datum/powernet/PN = new()
//PN.tag = "powernet #[L]"
powernets += PN
PN.number = powernets.len
+1 -1
View File
@@ -69,7 +69,7 @@
/obj/item/weapon/gun/energy/crossbow
name = "mini energy-crossbow"
desc = "A weapon favored by many of the syndicates stealth specialists."
desc = "A crossbow that doesn't seem to have space for bolts."
icon_state = "crossbow"
w_class = 2.0
item_state = "crossbow"
+1
View File
@@ -1,5 +1,6 @@
asanadas: Book Berner: /obj/item/clothing/under/chameleon/psyche, /obj/item/clothing/glasses/meson/fluff/book_berner_1
atomicdog92: Seth Sealis: /obj/item/clothing/suit/storage/det_suit/fluff/leatherjack
botanistpower: Walter Brooks: /obj/item/clothing/gloves/fluff/walter_brooks_1
chinsky: Victor Kaminski: /obj/item/fluff/victor_kaminsky_1
chinsky: Summer Springfield: /obj/item/weapon/camera_test/fluff/orange
compactninja: Ysyr Rylias: /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

+7067 -7064
View File
File diff suppressed because it is too large Load Diff