This commit is contained in:
Cael_Aislinn
2013-05-19 19:34:10 +10:00
110 changed files with 28635 additions and 15397 deletions

View File

@@ -35,6 +35,7 @@
#define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf"
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "icons/xenoarch_icons"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience"
@@ -51,6 +52,9 @@
#define FILE_DIR "sound/violin"
#define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons"
#define FILE_DIR "tools"
#define FILE_DIR "tools/AddToChangelog"
#define FILE_DIR "tools/AddToChangelog/AddToChangelog"
// END_FILE_DIR
// BEGIN_PREFERENCES
#define DEBUG
@@ -392,6 +396,7 @@
#include "code\game\machinery\embedded_controller\airlock_controller.dm"
#include "code\game\machinery\embedded_controller\embedded_controller_base.dm"
#include "code\game\machinery\embedded_controller\simple_vent_controller.dm"
#include "code\game\machinery\embedded_controller\smart_airlock_controller.dm"
#include "code\game\machinery\kitchen\gibber.dm"
#include "code\game\machinery\kitchen\juicer.dm"
#include "code\game\machinery\kitchen\microwave.dm"
@@ -1289,7 +1294,9 @@
#include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\Cib\MedicalSideEffects.dm"
#include "code\WorkInProgress\Mini\ATM.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Ported\policetape.dm"
#include "code\WorkInProgress\SkyMarshal\officer_stuff.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
#include "code\WorkInProgress\Susan\susan_desert_turfs.dm"
#include "code\WorkInProgress\virus2\analyser.dm"
@@ -1301,6 +1308,7 @@
#include "code\WorkInProgress\virus2\isolator.dm"
#include "code\ZAS\Airflow.dm"
#include "code\ZAS\Connection.dm"
#include "code\ZAS\Debug.dm"
#include "code\ZAS\FEA_gas_mixture.dm"
#include "code\ZAS\FEA_system.dm"
#include "code\ZAS\Fire.dm"

View File

@@ -13,9 +13,19 @@
var/overridden = 0 //not set yet, can't think of a good way to do it
req_access = list(access_ce)
/obj/machinery/computer/atmoscontrol/attack_ai(var/mob/user as mob)
return interact(user)
/obj/machinery/computer/atmoscontrol/attack_paw(var/mob/user as mob)
return interact(user)
/obj/machinery/computer/atmoscontrol/attack_hand(mob/user)
if(..())
return
return interact(user)
/obj/machinery/computer/atmoscontrol/interact(mob/user)
user.set_machine(src)
if(allowed(user))
overridden = 1
@@ -29,9 +39,9 @@
dat += "<a href='?src=\ref[src]&alarm=\ref[alarm]'>"
switch(max(alarm.danger_level, alarm.alarm_area.atmosalm))
if (0)
dat += "<font color=blue>"
dat += "<font color=green>"
if (1)
dat += "<font color=yellow>"
dat += "<font color=blue>"
if (2)
dat += "<font color=red>"
dat += "[alarm]</font></a><br/>"
@@ -62,7 +72,6 @@
return
if(href_list["reset"])
current = null
src.updateUsrDialog()
if(href_list["alarm"])
current = locate(href_list["alarm"])
if(href_list["command"])
@@ -129,6 +138,11 @@
selected[2] = selected[4]
if(selected[3] > selected[4])
selected[3] = selected[4]
//Sets the temperature the built-in heater/cooler tries to maintain.
if(env == "temperature")
current.target_temperature = (selected[2] + selected[3])/2
spawn(1)
updateUsrDialog()
return
@@ -167,7 +181,7 @@
spawn(5)
src.updateUsrDialog()
return
src.updateUsrDialog()
updateUsrDialog()
//copypasta from alarm code, changed to work with this without derping hard
//---START COPYPASTA----
@@ -185,7 +199,7 @@
output += {"
<a href='?src=\ref[src];alarm=\ref[current];screen=[AALARM_SCREEN_SCRUB]'>Scrubbers Control</a><br>
<a href='?src=\ref[src];alarm=\ref[current];screen=[AALARM_SCREEN_VENT]'>Vents Control</a><br>
<a href='?src=\ref[src];alarm=\ref[current];screen=[AALARM_SCREEN_MODE]'>Set envirenomentals mode</a><br>
<a href='?src=\ref[src];alarm=\ref[current];screen=[AALARM_SCREEN_MODE]'>Set environmental mode</a><br>
<a href='?src=\ref[src];alarm=\ref[current];screen=[AALARM_SCREEN_SENSORS]'>Sensor Control</a><br>
<HR>
"}
@@ -288,8 +302,8 @@ Nitrous Oxide
AALARM_MODE_REPLACEMENT = "<font color='red'>REPLACE AIR</font>",
AALARM_MODE_PANIC = "<font color='red'>PANIC</font>",
AALARM_MODE_CYCLE = "<font color='red'>CYCLE</font>",
AALARM_MODE_FILL = "<font color='red'>FILL</font>",
)
AALARM_MODE_FILL = "<font color='red'>FILL</font>",\
AALARM_MODE_OFF = "<font color='blue'>OFFF</font>",)
for (var/m=1,m<=modes.len,m++)
if (current.mode==m)
output += {"<li><A href='?src=\ref[src];alarm=\ref[current];mode=[m]'><b>[modes[m]]</b></A> (selected)</li>"}

View File

@@ -0,0 +1,43 @@
// Reference: http://www.teuse.net/personal/harrington/hh_bible.htm
// http://www.trmn.org/portal/images/uniforms/rmn/rmn_officer_srv_dress_lrg.png
/obj/item/clothing/head/beret/centcom/officer
name = "officers beret"
desc = "A black beret adorned with the shield<6C>a silver kite shield with an engraved sword<72>of the NanoTrasen security forces, announcing to the world that the wearer is a defender of NanoTrasen."
icon_state = "centcomofficerberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/captain
name = "captains beret"
desc = "A white beret adorned with the shield<6C>a cobalt kite shield with an engraved sword<72>of the NanoTrasen security forces, worn only by those captaining a vessel of the NanoTrasen Navy."
icon_state = "centcomcaptain"
flags = FPRINT | TABLEPASS
/obj/item/clothing/shoes/centcom
name = "dress shoes"
desc = "They appear impeccably polished."
icon_state = "laceups"
/obj/item/clothing/under/rank/centcom/representative
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Navy Uniform"
icon_state = "officer"
item_state = "g_suit"
color = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom/officer
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant Commander\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Officers Uniform"
icon_state = "officer"
item_state = "g_suit"
color = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom/captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Captains Uniform"
icon_state = "centcom"
item_state = "dg_suit"
color = "centcom"
displays_id = 0

View File

@@ -17,7 +17,7 @@ connection
zone_B
ref_A
ref_B
indirect = 0 //If the connection is purely indirect, the zones should not join.
indirect = CONNECTION_DIRECT //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
@@ -47,6 +47,8 @@ connection
else
air_master.turfs_with_connections[ref_B] = list(src)
if(A.CanPass(null, B, 0, 0))
if(!A.zone.connected_zones)
A.zone.connected_zones = list()
if(!B.zone.connected_zones)
@@ -63,8 +65,30 @@ connection
else
B.zone.connected_zones += A.zone
B.zone.connected_zones[A.zone] = 1
if(A.HasDoor(B) || B.HasDoor(A))
indirect = 1
indirect = CONNECTION_INDIRECT
else
indirect = CONNECTION_CLOSED
if(!A.zone.closed_connection_zones)
A.zone.closed_connection_zones = list()
if(B.zone in A.zone.closed_connection_zones)
A.zone.closed_connection_zones[B.zone]++
else
A.zone.closed_connection_zones += B.zone
A.zone.closed_connection_zones[B.zone] = 1
if(!B.zone.closed_connection_zones)
B.zone.closed_connection_zones = list()
if(A.zone in B.zone.closed_connection_zones)
B.zone.closed_connection_zones[A.zone]++
else
B.zone.closed_connection_zones += A.zone
B.zone.closed_connection_zones[A.zone] = 1
else
world.log << "Attempted to create connection object for non-zone tiles: [T] -> [O]"
del(src)
@@ -168,6 +192,75 @@ connection
zone_B.connected_zones -= zone_A
if(zone_B.connected_zones && !zone_B.connected_zones.len)
zone_B.connected_zones = null
else
if(A && A.zone)
if(B && B.zone)
if(B.zone in A.zone.closed_connection_zones)
if(A.zone.closed_connection_zones[B.zone] > 1)
A.zone.closed_connection_zones[B.zone]--
else
A.zone.closed_connection_zones -= B.zone
if(A.zone.closed_connection_zones && !A.zone.closed_connection_zones.len)
A.zone.closed_connection_zones = null
if( zone_B && (!B.zone || zone_B != B.zone) )
if(zone_B in A.zone.closed_connection_zones)
if(A.zone.closed_connection_zones[zone_B] > 1)
A.zone.closed_connection_zones[zone_B]--
else
A.zone.closed_connection_zones -= zone_B
if(A.zone.closed_connection_zones && !A.zone.closed_connection_zones.len)
A.zone.closed_connection_zones = null
if(zone_A && (!A.zone || zone_A != A.zone))
if(B && B.zone)
if(B.zone in zone_A.closed_connection_zones)
if(zone_A.closed_connection_zones[B.zone] > 1)
zone_A.closed_connection_zones[B.zone]--
else
zone_A.closed_connection_zones -= B.zone
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
zone_A.closed_connection_zones = null
if( zone_B && (!B.zone || zone_B != B.zone) )
if(zone_B in zone_A.closed_connection_zones)
if(zone_A.closed_connection_zones[zone_B] > 1)
zone_A.closed_connection_zones[zone_B]--
else
zone_A.closed_connection_zones -= zone_B
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
zone_A.closed_connection_zones = null
if(B && B.zone)
if(A && A.zone)
if(A.zone in B.zone.closed_connection_zones)
if(B.zone.closed_connection_zones[A.zone] > 1)
B.zone.closed_connection_zones[A.zone]--
else
B.zone.closed_connection_zones -= A.zone
if(B.zone.closed_connection_zones && !B.zone.closed_connection_zones.len)
B.zone.closed_connection_zones = null
if( zone_A && (!A.zone || zone_A != A.zone) )
if(zone_A in B.zone.closed_connection_zones)
if(B.zone.closed_connection_zones[zone_A] > 1)
B.zone.closed_connection_zones[zone_A]--
else
B.zone.closed_connection_zones -= zone_A
if(B.zone.closed_connection_zones && !B.zone.closed_connection_zones.len)
B.zone.closed_connection_zones = null
if(zone_B && (!B.zone || zone_B != B.zone))
if(A && A.zone)
if(A.zone in zone_B.closed_connection_zones)
if(zone_B.closed_connection_zones[A.zone] > 1)
zone_B.closed_connection_zones[A.zone]--
else
zone_B.closed_connection_zones -= A.zone
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
zone_B.closed_connection_zones = null
if( zone_A && (!A.zone || zone_A != A.zone) )
if(zone_A in zone_B.closed_connection_zones)
if(zone_B.closed_connection_zones[zone_A] > 1)
zone_B.closed_connection_zones[zone_A]--
else
zone_B.closed_connection_zones -= zone_A
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
zone_B.closed_connection_zones = null
. = ..()
proc/Cleanup()
@@ -212,12 +305,32 @@ connection
else
B.zone.connected_zones += A.zone
B.zone.connected_zones[A.zone] = 1
if(A.zone.closed_connection_zones)
if(A.zone.closed_connection_zones[B.zone] > 1)
A.zone.closed_connection_zones[B.zone]--
else
A.zone.closed_connection_zones.Remove(B.zone)
if(A.zone.closed_connection_zones && !A.zone.closed_connection_zones.len)
A.zone.closed_connection_zones = null
if(B.zone.closed_connection_zones)
if(B.zone.closed_connection_zones[A.zone] > 1)
B.zone.closed_connection_zones[A.zone]--
else
B.zone.closed_connection_zones.Remove(A.zone)
if(B.zone.closed_connection_zones && !B.zone.closed_connection_zones.len)
B.zone.closed_connection_zones = null
if(door_pass)
indirect = CONNECTION_DIRECT
else if(!door_pass)
indirect = CONNECTION_INDIRECT
else if(indirect > CONNECTION_CLOSED)
indirect = CONNECTION_CLOSED
//ADJUST FOR CANNOT CONNECT
if(A.zone.connected_zones)
if(A.zone.connected_zones[B.zone] > 1)
@@ -226,13 +339,33 @@ connection
A.zone.connected_zones.Remove(B.zone)
if(A.zone.connected_zones && !A.zone.connected_zones.len)
A.zone.connected_zones = null
if(B.zone.connected_zones)
if(B.zone.connected_zones[A.zone] > 1)
B.zone.connected_zones[A.zone]--
else
B.zone.connected_zones.Remove(A.zone)
if(B.zone.connected_zones && !B.zone.connected_zones.len)
B.zone.connected_zones = null
//Add to the closed connections list(s)
if(!A.zone.closed_connection_zones)
A.zone.closed_connection_zones = list()
if(B.zone in A.zone.closed_connection_zones)
A.zone.closed_connection_zones[B.zone]++
else
A.zone.closed_connection_zones += B.zone
A.zone.closed_connection_zones[B.zone] = 1
if(!B.zone.closed_connection_zones)
B.zone.closed_connection_zones = list()
if(A.zone in B.zone.closed_connection_zones)
B.zone.closed_connection_zones[A.zone]++
else
B.zone.closed_connection_zones += A.zone
B.zone.closed_connection_zones[A.zone] = 1
else //If I can no longer pass air, better delete
del src
@@ -268,6 +401,16 @@ connection
if(zone_A.connected_zones && !zone_A.connected_zones.len)
zone_A.connected_zones = null
else
if(zone_A.closed_connection_zones)
if(zone_A.closed_connection_zones[zone_B] > 1)
zone_A.closed_connection_zones[zone_B]--
else
zone_A.closed_connection_zones.Remove(zone_B)
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
zone_A.closed_connection_zones = null
if(zone_B)
if(zone_B.connections)
zone_B.connections.Remove(src)
@@ -283,6 +426,15 @@ connection
if(zone_B.connected_zones && !zone_B.connected_zones.len)
zone_B.connected_zones = null
else
if(zone_B.closed_connection_zones)
if(zone_B.closed_connection_zones[zone_A] > 1)
zone_B.closed_connection_zones[zone_A]--
else
zone_B.closed_connection_zones.Remove(zone_A)
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
zone_B.closed_connection_zones = null
if(indirect != CONNECTION_CLOSED)
if(!A.zone.connections)
A.zone.connections = list()
@@ -307,6 +459,31 @@ connection
B.zone.connected_zones += A.zone
B.zone.connected_zones[A.zone] = 1
else
if(!A.zone.connections)
A.zone.connections = list()
A.zone.connections |= src
if(!B.zone.connections)
B.zone.connections = list()
B.zone.connections |= src
if(!A.zone.closed_connection_zones)
A.zone.closed_connection_zones = list()
if(B.zone in A.zone.closed_connection_zones)
A.zone.closed_connection_zones[B.zone]++
else
A.zone.closed_connection_zones += B.zone
A.zone.closed_connection_zones[B.zone] = 1
if(!B.zone.closed_connection_zones)
B.zone.closed_connection_zones = list()
if(A.zone in B.zone.closed_connection_zones)
B.zone.closed_connection_zones[A.zone]++
else
B.zone.closed_connection_zones += A.zone
B.zone.closed_connection_zones[A.zone] = 1
zone_B = B.zone
zone_A = A.zone
@@ -340,6 +517,23 @@ connection
else
A.zone.connected_zones[zone_B]++
else
if(zone_A.closed_connection_zones)
if(zone_A.closed_connection_zones[zone_B] > 1)
zone_A.closed_connection_zones[zone_B]--
else
zone_A.closed_connection_zones.Remove(zone_B)
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
zone_A.closed_connection_zones = null
if(!A.zone.closed_connection_zones)
A.zone.closed_connection_zones = list()
if(!(zone_B in A.zone.closed_connection_zones))
A.zone.closed_connection_zones += zone_B
A.zone.closed_connection_zones[zone_B] = 1
else
A.zone.closed_connection_zones[zone_B]++
zone_A = A.zone
else
@@ -373,6 +567,23 @@ connection
else
B.zone.connected_zones[zone_A]++
else
if(zone_B.closed_connection_zones)
if(zone_B.closed_connection_zones[zone_A] > 1)
zone_B.closed_connection_zones[zone_A]--
else
zone_B.closed_connection_zones.Remove(zone_A)
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
zone_B.closed_connection_zones = null
if(!B.zone.closed_connection_zones)
B.zone.closed_connection_zones = list()
if(!(zone_A in B.zone.closed_connection_zones))
B.zone.closed_connection_zones += zone_A
B.zone.closed_connection_zones[zone_A] = 1
else
B.zone.closed_connection_zones[zone_A]++
zone_B = B.zone
else

View File

@@ -1,5 +1,5 @@
client/verb/Zone_Info(turf/T as null|turf)
client/proc/Zone_Info(turf/T as null|turf)
set category = "Debug"
if(T)
if(T.zone)
@@ -14,7 +14,7 @@ client/verb/Zone_Info(turf/T as null|turf)
client/verb/Test_ZAS_Connection(var/turf/simulated/T as turf)
client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
set category = "Debug"
if(!istype(T))
return

View File

@@ -63,6 +63,10 @@ proc/FloodFill(turf/simulated/start)
proc/ZMerge(zone/A,zone/B)
if(!istype(A) || !istype(B))
return
//Merges two zones so that they are one.
var
a_size = A.air.group_multiplier
@@ -109,6 +113,7 @@ proc/ZMerge(zone/A,zone/B)
proc/ZConnect(turf/simulated/A,turf/simulated/B)
//Connects two zones by forming a connection object representing turfs A and B.
//Make sure that if it's space, it gets added to unsimulated_tiles instead.
if(!istype(B))
if(A.zone)
@@ -126,8 +131,6 @@ proc/ZConnect(turf/simulated/A,turf/simulated/B)
if(!A.zone || !B.zone) return
if(A.zone == B.zone) return
if(!A.CanPass(null,B,0,0)) return
if(A.CanPass(null,B,0,1))
return ZMerge(A.zone,B.zone)

View File

@@ -155,6 +155,8 @@ turf/Entered(obj/item/I)
//Items that are in plasma, but not on a mob, can still be contaminated.
if(istype(I) && vsc.plc.CLOTH_CONTAMINATION)
var/datum/gas_mixture/env = return_air(1)
if(!env)
return
if(env.toxins > MOLES_PLASMA_VISIBLE + 1)
if(I.can_contaminate())
I.contaminate()

View File

@@ -198,6 +198,9 @@ turf
else
zone.RemoveTurf(NT) //Not adjacent to anything, and unsimulated. Goodbye~
//To make a closed connection through closed door.
ZConnect(T, src)
if(T.zone && !T.zone.rebuild) //I block air.
var/turf/NT = get_step(src, reverse_direction(direction))
if(istype(NT,/turf/simulated) && (NT in T.zone.contents || (NT.zone && T in NT.zone.contents)))

View File

@@ -12,6 +12,7 @@ zone
list/connections // /connection objects which refer to connections with other zones, e.g. through a door.
list/connected_zones //Parallels connections, but lists zones to which this one is connected and the number
//of points they're connected at.
list/closed_connection_zones //Same as connected_zones, but for zones where the door or whatever is closed.
list/unsimulated_tiles // Any space tiles in this list will cause air to flow out.
last_update = 0
progress = "nothing"
@@ -244,7 +245,9 @@ zone/proc/process()
//Do merging if conditions are met. Specifically, if there's a non-door connection
//to somewhere with space, the zones are merged regardless of equilibrium, to speed
//up spacing in areas with double-plated windows.
if(C && C.indirect == 2 && C.A.zone && C.B.zone) //indirect = 2 is a direct connection.
if(C && C.A.zone && C.B.zone)
//indirect = 2 is a direct connection.
if(C.indirect == 2 )
if(C.A.zone.air.compare(C.B.zone.air) || unsimulated_tiles)
ZMerge(C.A.zone,C.B.zone)
@@ -269,13 +272,18 @@ zone/proc/process()
Airflow(src,Z)
ShareRatio( air , Z.air , connected_zones[Z] )
for(var/zone/Z in closed_connection_zones)
if(air && Z.air)
if( abs(air.temperature - Z.air.temperature) > 10 )
ShareHeat(air, Z.air, closed_connection_zones[Z])
progress = "all components completed successfully, the problem is not here"
////////////////
//Air Movement//
////////////////
var/list/sharing_lookup_table = list(0.08, 0.15, 0.21, 0.26, 0.30, 0.33)
var/list/sharing_lookup_table = list(0.15, 0.20, 0.24, 0.27, 0.30, 0.33)
proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
//Shares a specific ratio of gas between mixtures using simple weighted averages.
@@ -407,6 +415,29 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles)
return abs(old_pressure - A.return_pressure())
proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
//Shares a specific ratio of gas between mixtures using simple weighted averages.
var
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
ratio = 0.33
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
full_heat_capacity = A.heat_capacity()
s_full_heat_capacity = B.heat_capacity()
temp_avg = (A.temperature * full_heat_capacity + B.temperature * s_full_heat_capacity) / (full_heat_capacity + s_full_heat_capacity)
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
if(sharing_lookup_table.len >= connecting_tiles) //6 or more interconnecting tiles will max at 42% of air moved per tick.
ratio = sharing_lookup_table[connecting_tiles]
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
A.temperature = max(0, (A.temperature - temp_avg) * (1- (ratio / max(1,A.group_multiplier)) ) + temp_avg )
B.temperature = max(0, (B.temperature - temp_avg) * (1- (ratio / max(1,B.group_multiplier)) ) + temp_avg )
///////////////////
//Zone Rebuilding//
///////////////////
@@ -487,6 +518,7 @@ zone/proc/Rebuild()
if(istype(T) && T.zone && S.CanPass(null, T, 0, 0))
T.zone.AddTurf(S)
proc/play_wind_sound(var/turf/random_border, var/n)
if(random_border)
var/windsound = 'sound/effects/wind/wind_2_1.ogg'

View File

@@ -132,6 +132,9 @@ datum/controller/vote
restart = 1
else
master_mode = .
if(!going)
going = 1
world << "<font color='red'><b>The round will start soon.</b></font>"
if("crew_transfer")
if(. == "Initiate Crew Transfer")
init_shift_change(null, 1)
@@ -194,8 +197,14 @@ datum/controller/vote
var/text = "[capitalize(mode)] vote started by [initiator]."
if(mode == "custom")
text += "\n[question]"
log_vote(text)
world << "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>"
world << sound('weapons/smg_empty_alarm.ogg')
if(mode == "gamemode" && going)
going = 0
world << "<font color='red'><b>Round start has been delayed.</b></font>"
time_remaining = round(config.vote_period/10)
return 1
return 0

View File

@@ -2,14 +2,15 @@
var/angle
var/dx
var/dy
var/counter = 50 // to make the vars update during 1st call
// var/counter = 50 // to make the vars update during 1st call
var/rate
var/list/solars // for debugging purposes, references solars_list at the constructor
var/nexttime = 3600 // Replacement for var/counter to force the sun to move every X IC minutes
/datum/sun/New()
solars = solars_list
rate = rand(75,125)/100 // 75% - 125% of standard rotation
rate = rand(750,1250)/1000 // 75.0% - 125.0% of standard rotation
if(prob(50))
rate = -rate
@@ -17,13 +18,22 @@
/datum/sun/proc/calc_position()
counter++
/* counter++
if(counter<50) // count 50 pticks (50 seconds, roughly - about a 5deg change)
return
counter = 0
counter = 0 */
angle = ((rate*world.time/100)%360 + 360)%360
/*
Yields a 45 - 75 IC minute rotational period
Rotation rate can vary from 4.8 deg/min to 8 deg/min (288 to 480 deg/hr)
*/
// To prevent excess server load the server only updates the sun's sight lines every 6 minutes
if(nexttime < world.time)
return
nexttime = nexttime + 3600 // 600 world.time ticks = 1 minute, 3600 = 6 minutes.
angle = ((rate*world.realtime/100)%360 + 360)%360 // gives about a 60 minute rotation time
// now 45 - 75 minutes, depending on rate
// now calculate and cache the (dx,dy) increments for line drawing
var/s = sin(angle)

View File

@@ -662,6 +662,24 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
access = access_armory
group = "Security"
/datum/supply_packs/shotgunammo
name = "Shotgun shells"
contains = list(/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/shotgun)
cost = 20
containertype = /obj/structure/closet/crate/secure
containername = "Shotgun shells"
access = access_armory
group = "Security"
/datum/supply_packs/expenergy
name = "Experimental energy gear crate"
contains = list(/obj/item/clothing/suit/armor/laserproof,

View File

@@ -63,6 +63,24 @@
plant_type = 0
growthstages = 6
/obj/item/seeds/plastiseed
name = "plastellium mycelium"
desc = "This mycelium grows into Plastellium"
icon_state = "mycelium-plast"
mypath = "/obj/item/seeds/plastiseed"
species = "plastellium"
plantname = "Plastellium"
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium"
lifespan = 15
endurance = 17
maturation = 5
production = 6
yield = 6
oneharvest = 1
potency = 20
plant_type = 2
growthstages = 3
/obj/item/seeds/replicapod
name = "pack of replica pod seeds"
desc = "These seeds grow into replica pods. They say these are used to harvest humans."
@@ -413,6 +431,24 @@
plant_type = 0
growthstages = 6
/obj/item/seeds/riceseed
name = "pack of rice seeds"
desc = "These seeds grow into rice stalks."
icon_state = "seed-rice"
mypath = "/obj/item/seeds/riceseed"
species = "rice"
plantname = "Rice Stalks"
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk"
lifespan = 25
endurance = 15
maturation = 6
production = 1
yield = 4
potency = 5
oneharvest = 1
plant_type = 0
growthstages = 4
/obj/item/seeds/carrotseed
name = "pack of carrot seeds"
desc = "These seeds grow into carrots."

View File

@@ -1139,6 +1139,10 @@ proc/process_ghost_teleport_locs()
name = "\improper Vacant Office"
icon_state = "security"
/area/security/vacantoffice2
name = "\improper Vacant Office"
icon_state = "security"
/area/quartermaster
name = "\improper Quartermasters"
icon_state = "quart"

View File

@@ -205,27 +205,31 @@ Implants;
/datum/game_mode/proc/send_intercept()
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested status information:</FONT><HR>"
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
intercepttext += "<B> In case you have misplaced your copy, attached is a list of personnel whom reliable sources&trade; suspect may be affiliated with the Syndicate:</B><br>"
var/list/possible_modes = list()
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
//possible_modes -= "[ticker.mode]"
var/number = pick(2, 3)
var/i = 0
for(i = 0, i < number, i++)
possible_modes.Remove(pick(possible_modes))
if(!intercept_hacked)
possible_modes.Insert(rand(possible_modes.len), "[ticker.mode]")
shuffle(possible_modes)
var/datum/intercept_text/i_text = new /datum/intercept_text
for(var/A in possible_modes)
if(modePlayer.len == 0)
intercepttext += i_text.build(A)
var/list/suspects = list()
for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind)
// NT relation option
var/special_role = man.mind.special_role
if(man.client.prefs.nanotrasen_relation == "Opposed" && prob(50) || \
man.client.prefs.nanotrasen_relation == "Skeptical" && prob(20))
suspects += man
// Antags
else if(special_role == "traitor" && prob(20) || \
special_role == "Changeling" && prob(40) || \
special_role == "Cultist" && prob(10) || \
special_role == "Head Revolutionary" && prob(10))
suspects += man
// Some poor people who were just in the wrong place at the wrong time..
else if(prob(5))
suspects += man
for(var/mob/M in suspects)
switch(rand(1, 100))
if(1 to 50)
intercepttext += "Someone with the job of <b>[M.mind.assigned_role]</b> <br>"
else
intercepttext += i_text.build(A, pick(modePlayer))
intercepttext += "<b>[M.name]</b>, the <b>[M.mind.assigned_role]</b> <br>"
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)

File diff suppressed because it is too large Load Diff

View File

@@ -225,7 +225,6 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
next_dest_loc = closest_loc
if (next_dest_loc)
src.patrol_path = AStar(src.loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=null)
src.patrol_path = reverselist(src.patrol_path)
else
patrol_move()
@@ -235,7 +234,6 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
spawn(0)
if(!src || !target) return
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 0, 30)
src.path = reverselist(src.path)
if(src.path.len == 0)
src.oldtarget = src.target
src.target = null

View File

@@ -615,7 +615,6 @@ Auto Patrol: []"},
// given an optional turf to avoid
/obj/machinery/bot/ed209/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
src.path = reverselist(src.path)
// look for a criminal in view of the bot

View File

@@ -357,7 +357,6 @@
var/turf/dest = get_step_towards(target,src) //Can't pathfind to a tray, as it is dense, so pathfind to the spot next to the tray
src.path = AStar(src.loc, dest, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
src.path = reverselist(src.path)
if(src.path.len == 0)
for ( var/turf/spot in orange(1,target) ) //The closest one is unpathable, try the other spots
if ( spot == dest ) //We already tried this spot

View File

@@ -244,7 +244,6 @@
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30)
else
src.path = AStar(src.loc, src.target, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30)
src.path = reverselist(src.path)
if(src.path.len == 0)
src.oldtarget = src.target
src.target = null

View File

@@ -299,7 +299,6 @@
if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
spawn(0)
src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
src.path = reverselist(src.path)
if(src.path.len == 0)
src.oldpatient = src.patient
src.patient = null

View File

@@ -706,7 +706,8 @@
// given an optional turf to avoid
/obj/machinery/bot/mulebot/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, id=botcard, exclude=avoid)
src.path = reverselist(src.path)
if(!src.path)
src.path = list()
// sets the current destination

View File

@@ -583,7 +583,6 @@ Auto Patrol: []"},
// given an optional turf to avoid
/obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
src.path = reverselist(src.path)
// look for a criminal in view of the bot

View File

@@ -0,0 +1,369 @@
//States for airlock_control
#define AIRLOCK_STATE_WAIT 0
#define AIRLOCK_STATE_DEPRESSURIZE 1
#define AIRLOCK_STATE_PRESSURIZE 2
#define AIRLOCK_TARGET_INOPEN -1
#define AIRLOCK_TARGET_NONE 0
#define AIRLOCK_TARGET_OUTOPEN 1
datum/computer/file/embedded_program/smart_airlock_controller
var/id_tag
var/tag_exterior_door
var/tag_interior_door
var/tag_airpump
var/tag_chamber_sensor
var/tag_exterior_sensor
var/tag_interior_sensor
//var/sanitize_external
state = AIRLOCK_STATE_WAIT
var/target_state = AIRLOCK_TARGET_NONE
datum/computer/file/embedded_program/smart_airlock_controller/New()
..()
memory["chamber_sensor_pressure"] = ONE_ATMOSPHERE
memory["external_sensor_pressure"] = ONE_ATMOSPHERE
memory["internal_sensor_pressure"] = ONE_ATMOSPHERE
memory["exterior_status"] = "unknown"
memory["interior_status"] = "unknown"
memory["pump_status"] = "unknown"
memory["target_pressure"] = ONE_ATMOSPHERE
datum/computer/file/embedded_program/smart_airlock_controller/receive_signal(datum/signal/signal, receive_method, receive_param)
var/receive_tag = signal.data["tag"]
if(!receive_tag) return
if(receive_tag==tag_chamber_sensor)
if(signal.data["pressure"])
memory["chamber_sensor_pressure"] = text2num(signal.data["pressure"])
else if(receive_tag==tag_exterior_sensor)
if(signal.data["pressure"])
memory["external_sensor_pressure"] = text2num(signal.data["pressure"])
else if(receive_tag==tag_interior_sensor)
if(signal.data["pressure"])
memory["internal_sensor_pressure"] = text2num(signal.data["pressure"])
else if(receive_tag==tag_exterior_door)
memory["exterior_status"] = signal.data["door_status"]
else if(receive_tag==tag_interior_door)
memory["interior_status"] = signal.data["door_status"]
else if(receive_tag==tag_airpump)
if(signal.data["power"])
memory["pump_status"] = signal.data["direction"]
else
memory["pump_status"] = "off"
else if(receive_tag==id_tag)
switch(signal.data["command"])
if("cycle_exterior")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_OUTOPEN
if("cycle_interior")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_INOPEN
master.updateDialog()
datum/computer/file/embedded_program/smart_airlock_controller/receive_user_command(command)
var/shutdown_pump = 0
switch(command)
if("cycle_closed")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_NONE
if(memory["interior_status"] != "closed")
var/datum/signal/signal = new
signal.data["tag"] = tag_interior_door
signal.data["command"] = "secure_close"
post_signal(signal)
if(memory["exterior_status"] != "closed")
var/datum/signal/signal = new
signal.data["tag"] = tag_exterior_door
signal.data["command"] = "secure_close"
post_signal(signal)
shutdown_pump = 1
if("open_interior")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_NONE
if(memory["interior_status"] != "open")
var/datum/signal/signal = new
signal.data["tag"] = tag_interior_door
signal.data["command"] = "secure_open"
post_signal(signal)
if("close_interior")
if(memory["interior_status"] != "closed")
var/datum/signal/signal = new
signal.data["tag"] = tag_interior_door
signal.data["command"] = "secure_close"
post_signal(signal)
shutdown_pump = 1
if("close_exterior")
if(memory["exterior_status"] != "closed")
var/datum/signal/signal = new
signal.data["tag"] = tag_exterior_door
signal.data["command"] = "secure_close"
post_signal(signal)
shutdown_pump = 1
if("open_exterior")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_NONE
if(memory["exterior_status"] != "open")
var/datum/signal/signal = new
signal.data["tag"] = tag_exterior_door
signal.data["command"] = "secure_open"
post_signal(signal)
if("cycle_exterior")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_OUTOPEN
if("cycle_interior")
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_INOPEN
if(shutdown_pump)
//send a signal to stop pressurizing
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = tag_airpump,
"power" = 0,
"sigtype"="command"
)
post_signal(signal)
master.updateDialog()
datum/computer/file/embedded_program/smart_airlock_controller/process()
var/process_again = 1
while(process_again)
process_again = 0
if(!state && target_state)
//we're ready to do stuff, now what do we want to do?
switch(target_state)
if(AIRLOCK_TARGET_INOPEN)
memory["target_pressure"] = memory["internal_sensor_pressure"]
if(AIRLOCK_TARGET_OUTOPEN)
memory["target_pressure"] = memory["external_sensor_pressure"]
//work out whether we need to pressurize or depressurize the chamber (5% leeway with target pressure)
var/chamber_pressure = memory["chamber_sensor_pressure"]
var/target_pressure = memory["target_pressure"]
if(chamber_pressure <= target_pressure)
state = AIRLOCK_STATE_PRESSURIZE
//send a signal to start pressurizing
var/datum/signal/signal = new
signal.data = list(
"tag" = tag_airpump,
"sigtype"="command",
"power"=1,
"direction"=1,
"set_external_pressure"=target_pressure
)
post_signal(signal)
else if(chamber_pressure > target_pressure)
state = AIRLOCK_STATE_DEPRESSURIZE
//send a signal to start depressurizing
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.data = list(
"tag" = tag_airpump,
"sigtype"="command",
"power"=1,
"direction"=0,
"set_external_pressure"=target_pressure
)
post_signal(signal)
//actually do stuff
//override commands are handled elsewhere, otherwise everything proceeds automatically
switch(state)
if(AIRLOCK_STATE_PRESSURIZE)
if(memory["chamber_sensor_pressure"] >= memory["target_pressure"] * 0.95)
if(target_state < 0)
if(memory["interior_status"] != "open")
var/datum/signal/signal = new
signal.data["tag"] = tag_interior_door
signal.data["command"] = "secure_open"
post_signal(signal)
else if(target_state > 0)
if(memory["exterior_status"] != "open")
var/datum/signal/signal = new
signal.data["tag"] = tag_exterior_door
signal.data["command"] = "secure_open"
post_signal(signal)
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_NONE
//send a signal to stop pumping
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = tag_airpump,
"sigtype"="command",
"power" = 0
)
post_signal(signal)
master.updateDialog()
if(AIRLOCK_STATE_DEPRESSURIZE)
if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05)
if(target_state > 0)
if(memory["exterior_status"] != "open")
var/datum/signal/signal = new
signal.data["tag"] = tag_exterior_door
signal.data["command"] = "secure_open"
post_signal(signal)
else if(target_state < 0)
if(memory["interior_status"] != "open")
var/datum/signal/signal = new
signal.data["tag"] = tag_interior_door
signal.data["command"] = "secure_open"
post_signal(signal)
state = AIRLOCK_STATE_WAIT
target_state = AIRLOCK_TARGET_NONE
//send a signal to stop pumping
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = tag_airpump,
"sigtype"="command",
"power" = 0
)
post_signal(signal)
master.updateDialog()
//memory["sensor_pressure"] = sensor_pressure
memory["processing"] = state != target_state
//sensor_pressure = null //not sure if we can comment this out. Uncomment in case of problems -rastaf0
return 1
obj/machinery/embedded_controller/radio/smart_airlock_controller
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_control_standby"
name = "Cycling Airlock Console"
density = 0
frequency = 1449
power_channel = ENVIRON
// Setup parameters only
var/id_tag
var/tag_exterior_door
var/tag_interior_door
var/tag_airpump
var/tag_chamber_sensor
var/tag_exterior_sensor
var/tag_interior_sensor
//var/sanitize_external
initialize()
..()
var/datum/computer/file/embedded_program/smart_airlock_controller/new_prog = new
new_prog.id_tag = id_tag
new_prog.tag_exterior_door = tag_exterior_door
new_prog.tag_interior_door = tag_interior_door
new_prog.tag_airpump = tag_airpump
new_prog.tag_chamber_sensor = tag_chamber_sensor
new_prog.tag_exterior_sensor = tag_exterior_sensor
new_prog.tag_interior_sensor = tag_interior_sensor
//new_prog.sanitize_external = sanitize_external
new_prog.master = src
program = new_prog
update_icon()
if(on && program)
if(program.memory["processing"])
icon_state = "airlock_control_process"
else
icon_state = "airlock_control_standby"
else
icon_state = "airlock_control_off"
return_text()
var/state_options = ""
var/state = 0
var/chamber_sensor_pressure = "----"
var/external_sensor_pressure = "----"
var/internal_sensor_pressure = "----"
var/exterior_status = "----"
var/interior_status = "----"
var/pump_status = "----"
var/target_pressure = "----"
if(program)
state = program.state
chamber_sensor_pressure = program.memory["chamber_sensor_pressure"]
external_sensor_pressure = program.memory["external_sensor_pressure"]
internal_sensor_pressure = program.memory["internal_sensor_pressure"]
exterior_status = program.memory["exterior_status"]
interior_status = program.memory["interior_status"]
pump_status = program.memory["pump_status"]
target_pressure = program.memory["target_pressure"]
var/exterior_closed = 0
if(exterior_status == "closed")
exterior_closed = 1
var/interior_closed = 0
if(interior_status == "closed")
interior_closed = 1
state_options += "<B>Exterior status: </B> [exterior_status] ([external_sensor_pressure] kPa)<br>"
if(exterior_closed)
state_options += "<A href='?src=\ref[src];command=open_exterior'>Open exterior airlock</A> "
if(abs(chamber_sensor_pressure - external_sensor_pressure) > ONE_ATMOSPHERE * 0.05)
state_options += "<font color='red'><b>WARNING</b></font>"
state_options += "<BR>"
if(!state && exterior_closed && interior_closed)
state_options += "<A href='?src=\ref[src];command=cycle_exterior'>Cycle to Exterior Airlock</A><BR>"
else
state_options += "<br>"
else
state_options += "<A href='?src=\ref[src];command=close_exterior'>Close exterior airlock</A><BR>"
state_options += "<BR>"
state_options += "<B>Interior status: </B> [interior_status] ([internal_sensor_pressure] kPa)<br>"
if(interior_closed)
state_options += "<A href='?src=\ref[src];command=open_interior'>Open interior airlock</A> "
if(abs(chamber_sensor_pressure - internal_sensor_pressure) > ONE_ATMOSPHERE * 0.05)
state_options += "<font color='red'><b>WARNING</b></font>"
state_options += "<BR>"
if(!state && exterior_closed && interior_closed)
state_options += "<A href='?src=\ref[src];command=cycle_interior'>Cycle to Interior Airlock</A><BR>"
else
state_options += "<br>"
else
state_options += "<A href='?src=\ref[src];command=close_interior'>Close interior airlock</A><BR>"
state_options += "<BR>"
state_options += "<br>"
state_options += "<B>Chamber Pressure:</B> [chamber_sensor_pressure] kPa<BR>"
state_options += "<B>Target Chamber Pressure:</B> [target_pressure] kPa<BR>"
state_options += "<B>Control Pump: </B> [pump_status]<BR>"
if(state)
state_options += "<A href='?src=\ref[src];command=cycle_closed'>Abort Cycling</A><BR>"
else
state_options += "<br>"
return state_options
#undef AIRLOCK_STATE_PRESSURIZE
#undef AIRLOCK_STATE_WAIT
#undef AIRLOCK_STATE_DEPRESSURIZE
#undef AIRLOCK_TARGET_INOPEN
#undef AIRLOCK_TARGET_CLOSED
#undef AIRLOCK_TARGET_OUTOPEN

View File

@@ -83,6 +83,10 @@
attack_hand(mob/user as mob)
src.add_fingerprint(user)
interact(user)
interact(mob/user as mob)
if(open)
var/dat
@@ -127,7 +131,7 @@
var/value = text2num(href_list["val"])
// limit to 20-90 degC
set_temperature = dd_range(20, 90, set_temperature + value)
set_temperature = dd_range(0, 90, set_temperature + value)
if("cellremove")
if(open && cell && !usr.get_active_hand())
@@ -164,7 +168,7 @@
var/turf/simulated/L = loc
if(istype(L))
var/datum/gas_mixture/env = L.return_air()
if(env.temperature < (set_temperature+T0C))
if(env.temperature != set_temperature + T0C)
var/transfer_moles = 0.25 * env.total_moles()
@@ -176,9 +180,11 @@
var/heat_capacity = removed.heat_capacity()
//world << "heating ([heat_capacity])"
if(heat_capacity == 0 || heat_capacity == null) // Added check to avoid divide by zero (oshi-) runtime errors -- TLE
heat_capacity = 1
removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000) // Added min() check to try and avoid wacky superheating issues in low gas scenarios -- TLE
if(heat_capacity) // Added check to avoid divide by zero (oshi-) runtime errors -- TLE
if(removed.temperature < set_temperature + T0C)
removed.temperature = min(removed.temperature + heating_power/heat_capacity, 1000) // Added min() check to try and avoid wacky superheating issues in low gas scenarios -- TLE
else
removed.temperature = max(removed.temperature - heating_power/heat_capacity, TCMB)
cell.use(heating_power/20000)
//world << "now at [removed.temperature]"

View File

@@ -774,7 +774,7 @@
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3,
/obj/item/seeds/poppyseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/limeseed = 3,
/obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,
/obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3)
/obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3)
contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/nettleseed = 2,
/obj/item/seeds/plumpmycelium = 2,/obj/item/seeds/reishimycelium = 2)
premium = list(/obj/item/toy/waterflower = 1)

View File

@@ -110,4 +110,15 @@
return
/obj/mecha/working/ripley/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/fluff/sven_fjeltson_1))//this shit broke ripleys
src.icon_state = "earth"
src.initial_icon = "earth"
src.name = "APLU \"Strike the Earth!\""
src.desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
user << "You pick up your old \"Strike the Earth!\" APLU."
user.drop_item()
del(W)
return
else
..()

View File

@@ -14,8 +14,8 @@
if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
var/mob/living/silicon/robot/R = M
if (R.getBruteLoss() || R.getFireLoss() )
R.adjustBruteLoss(-60)
R.adjustFireLoss(-60)
R.adjustBruteLoss(-15)
R.adjustFireLoss(-15)
R.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applied some [src] at [R]'s damaged areas.</span>",\
@@ -28,7 +28,7 @@
var/datum/organ/external/S = H.get_organ(user.zone_sel.selecting)
if (S && (S.status & ORGAN_ROBOT))
if(S.get_damage())
S.heal_damage(30, 30, robo_repair = 1)
S.heal_damage(15, 15, robo_repair = 1)
H.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the"][S.display_name] with \the [src].</span>",\

View File

@@ -114,6 +114,33 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
pixel_y = rand(0,4)-4
..()
/obj/item/stack/sheet/mineral/plastic
name = "Plastic"
icon_state = "sheet-plastic"
force = 5.0
throwforce = 5
w_class = 3.0
throw_speed = 3
throw_range = 3
origin_tech = "materials=3"
perunit = 2000
sheettype = "plastic"
var/global/list/datum/stack_recipe/plastic_recipes = list ( \
new/datum/stack_recipe("plastic crate", /obj/structure/closet/pcrate, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("plastic ashtray", /obj/item/ashtray/plastic, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("plastic fork", /obj/item/weapon/kitchen/utensil/pfork, 1, on_floor = 1), \
new/datum/stack_recipe("plastic spoon", /obj/item/weapon/kitchen/utensil/pspoon, 1, on_floor = 1), \
new/datum/stack_recipe("plastic knife", /obj/item/weapon/kitchen/utensil/pknife, 1, on_floor = 1), \
new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1), \
)
/obj/item/stack/sheet/mineral/plastic/New(var/loc, var/amount=null)
recipes = plastic_recipes
pixel_x = rand(0,4)-4
pixel_y = rand(0,4)-4
..()
/*
* Gold
*/

View File

@@ -556,6 +556,7 @@
name = "toy phazon"
desc = "Mini-Mecha action figure! Collect them all! 11/11."
icon_state = "phazonprize"
/obj/item/toy/katana
name = "replica katana"
desc = "Woefully underpowered in D20."

View File

@@ -40,6 +40,12 @@
icon_state = "spoon"
attack_verb = list("attacked", "poked")
/obj/item/weapon/kitchen/utensil/pspoon
name = "plastic spoon"
desc = "Super dull action!"
icon_state = "pspoon"
attack_verb = list("attacked", "poked")
/*
* Forks
*/
@@ -71,6 +77,34 @@
M = user
return eyestab(M,user)
/obj/item/weapon/kitchen/utensil/pfork
name = "plastic fork"
desc = "Yay, no washing up to do."
icon_state = "pfork"
/obj/item/weapon/kitchen/utensil/pfork/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return ..()
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
return ..()
if (src.icon_state == "forkloaded") //This is a poor way of handling it, but a proper rewrite of the fork to allow for a more varied foodening can happen when I'm in the mood. --NEO
if(M == user)
for(var/mob/O in viewers(M, null))
O.show_message(text("\blue [] eats a delicious forkful of omelette!", user), 1)
M.reagents.add_reagent("nutriment", 1)
else
for(var/mob/O in viewers(M, null))
O.show_message(text("\blue [] feeds [] a delicious forkful of omelette!", user, M), 1)
M.reagents.add_reagent("nutriment", 1)
src.icon_state = "fork"
return
else
if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M,user)
/*
* Knives
*/
@@ -95,6 +129,21 @@
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..()
/obj/item/weapon/kitchen/utensil/pknife
name = "plastic knife"
desc = "The bluntest of blades."
icon_state = "pknife"
force = 10.0
throwforce = 10.0
/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50))
user << "\red You somehow managed to cut yourself with the [src]."
user.take_organ_damage(20)
return
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..()
/*
* Kitchen knives
*/

View File

@@ -38,7 +38,6 @@
can_hold = list() // any
cant_hold = list("/obj/item/weapon/disk/nuclear")
/obj/item/weapon/storage/bag/trash/update_icon()
if(contents.len == 0)
icon_state = "trashbag0"
@@ -48,6 +47,24 @@
icon_state = "trashbag2"
else icon_state = "trashbag3"
// -----------------------------
// Plastic Bag
// -----------------------------
/obj/item/weapon/storage/bag/plasticbag
name = "plastic bag"
desc = "It's a very flimsy, very noisy alternative to a bag."
icon = 'icons/obj/trash.dmi'
icon_state = "plasticbag"
item_state = "plasticbag"
w_class = 4
max_w_class = 2
storage_slots = 21
can_hold = list() // any
cant_hold = list("/obj/item/weapon/disk/nuclear")
// -----------------------------
// Mining Satchel
// -----------------------------

View File

@@ -75,13 +75,13 @@
else
user.take_organ_damage(2*force)
return
/*this is already called in ..()
src.add_fingerprint(user)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
*/
if (user.a_intent == "hurt")
if(!..()) return
playsound(src.loc, "swing_hit", 50, 1, -1)
@@ -90,13 +90,88 @@
M.Stun(8)
M.Weaken(8)
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red <B>[M] has been beaten with the police baton by [user]!</B>", 1, "\red You hear someone fall", 2)
if (O.client) O.show_message("\red <B>[M] has been beaten with \the [src] by [user]!</B>", 1, "\red You hear someone fall", 2)
else
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1, -1)
M.Stun(5)
M.Weaken(5)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
src.add_fingerprint(user)
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red <B>[M] has been stunned with the police baton by [user]!</B>", 1, "\red You hear someone fall", 2)
if (O.client) O.show_message("\red <B>[M] has been stunned with \the [src] by [user]!</B>", 1, "\red You hear someone fall", 2)
//Telescopic baton
/obj/item/weapon/melee/telebaton
name = "telescopic baton"
desc = "A compact yet robust personal defense weapon. Can be concealed when folded."
icon = 'icons/obj/weapons.dmi'
icon_state = "telebaton_0"
item_state = "telebaton_0"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
w_class = 2
force = 3
var/on = 0
/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob)
on = !on
if(on)
user.visible_message("\red You extend the baton.",\
"\red With a flick of their wrist, [user] extends their telescopic baton.",\
"You hear an ominous click.")
icon_state = "telebaton_1"
item_state = "telebaton_1"
w_class = 4
force = 15//quite robust
attack_verb = list("smacked", "struck", "slapped")
else
user.visible_message("\blue You collapse the baton.",\
"\blue [user] collapses their telescopic baton.",\
"You hear a click.")
icon_state = "telebaton_0"
item_state = "telebaton_0"
w_class = 2
force = 3//not so robust now
attack_verb = list("hit", "punched")
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
add_fingerprint(user)
if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any
overlays.Cut()//this might delete other item overlays as well but eeeeeeeh
var/icon/I = new /icon(src.icon, src.icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD)
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY)
blood_overlay = I
overlays += blood_overlay
return
/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
if(on)
if ((CLUMSY in user.mutations) && prob(50))
user << "\red You club yourself over the head."
user.Weaken(3 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, "head")
else
user.take_organ_damage(2*force)
return
if(!..()) return
playsound(src.loc, "swing_hit", 50, 1, -1)
//target.Stun(4) //naaah
target.Weaken(4)
return
else
return ..()
/*
*Energy Blade

View File

@@ -12,6 +12,11 @@
new /obj/item/clothing/under/shorts/red(src)
new /obj/item/clothing/under/shorts/blue(src)
new /obj/item/clothing/under/shorts/green(src)
new /obj/item/clothing/under/swimsuit/red(src)
new /obj/item/clothing/under/swimsuit/black(src)
new /obj/item/clothing/under/swimsuit/blue(src)
new /obj/item/clothing/under/swimsuit/green(src)
new /obj/item/clothing/under/swimsuit/purple(src)
/obj/structure/closet/boxinggloves

View File

@@ -19,10 +19,12 @@
sleep(2)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/hairflower
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/dress/dress_saloon
new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/shoes/black(src)

View File

@@ -91,7 +91,10 @@
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/suit/fr_jacket(src)
new /obj/item/clothing/shoes/white(src)
// new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)

View File

@@ -16,6 +16,7 @@
else
new /obj/item/weapon/storage/backpack/satchel_cap(src)
new /obj/item/clothing/suit/captunic(src)
new /obj/item/clothing/suit/captunic/capjacket(src)
new /obj/item/clothing/head/helmet/cap(src)
new /obj/item/clothing/under/rank/captain(src)
new /obj/item/clothing/suit/armor/vest(src)
@@ -26,6 +27,8 @@
new /obj/item/clothing/gloves/captain(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/clothing/suit/armor/captain(src)
new /obj/item/weapon/melee/telebaton(src)
new /obj/item/clothing/under/dress/dress_cap(src)
return
@@ -43,17 +46,41 @@
New()
..()
sleep(2)
new /obj/item/clothing/under/rank/head_of_personnel(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet(src)
new /obj/item/weapon/cartridge/hop(src)
new /obj/item/device/radio/headset/heads/hop(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/storage/box/ids(src)
new /obj/item/weapon/storage/box/ids( src )
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
/obj/structure/closet/secure_closet/hop2
name = "Head of Personnel's Attire"
req_access = list(access_hop)
icon_state = "hopsecure1"
icon_closed = "hopsecure"
icon_locked = "hopsecure1"
icon_opened = "hopsecureopen"
icon_broken = "hopsecurebroken"
icon_off = "hopsecureoff"
New()
..()
sleep(2)
new /obj/item/clothing/under/rank/head_of_personnel(src)
new /obj/item/clothing/under/dress/dress_hop(src)
new /obj/item/clothing/under/dress/dress_hr(src)
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/oldman(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/leather(src)
new /obj/item/clothing/shoes/white(src)
return
@@ -75,6 +102,7 @@
new /obj/item/weapon/storage/backpack/security(src)
else
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/clothing/head/helmet/HoS(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
new /obj/item/clothing/suit/armor/hos/jensen(src)
@@ -90,6 +118,7 @@
new /obj/item/weapon/melee/baton(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/clothing/tie/holster/waist(src)
new /obj/item/weapon/melee/telebaton(src)
return

View File

@@ -26,6 +26,8 @@
new /obj/item/clothing/under/rank/security2(src)
new /obj/item/clothing/under/rank/security2(src)
new /obj/item/clothing/under/rank/security2(src)
new /obj/item/clothing/under/rank/dispatch(src)
new /obj/item/clothing/under/rank/dispatch(src)
new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/shoes/jackboots(src)
@@ -84,6 +86,7 @@
new /obj/item/clothing/suit/chaplain_hoodie(src)
new /obj/item/clothing/head/chaplain_hood(src)
new /obj/item/clothing/suit/holidaypriest(src)
new /obj/item/clothing/under/wedding/bride_white(src)
new /obj/item/weapon/storage/backpack/cultpack (src)
new /obj/item/weapon/storage/fancy/candle_box(src)
new /obj/item/weapon/storage/fancy/candle_box(src)
@@ -104,6 +107,19 @@
new /obj/item/clothing/shoes/black(src)
return
/obj/structure/closet/wardrobe/xenos
name = "xenos wardrobe"
icon_state = "green"
icon_closed = "green"
/obj/structure/closet/wardrobe/xenos/New()
new /obj/item/clothing/suit/unathi/mantle(src)
new /obj/item/clothing/suit/unathi/robe(src)
new /obj/item/clothing/shoes/sandal(src)
new /obj/item/clothing/shoes/sandal(src)
new /obj/item/clothing/shoes/sandal(src)
return
/obj/structure/closet/wardrobe/orange
name = "prison wardrobe"
@@ -328,13 +344,18 @@
icon_closed = "mixed"
/obj/structure/closet/wardrobe/mixed/New()
new /obj/item/clothing/under/color/white(src)
new /obj/item/clothing/under/color/blue(src)
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/orange(src)
new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/under/dress/plaid_blue(src)
new /obj/item/clothing/under/dress/plaid_red(src)
new /obj/item/clothing/under/dress/plaid_purple(src)
new /obj/item/clothing/shoes/blue(src)
new /obj/item/clothing/shoes/yellow(src)
new /obj/item/clothing/shoes/green(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/shoes/purple(src)
new /obj/item/clothing/shoes/leather(src)
return

View File

@@ -14,6 +14,20 @@
// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
var/rigged = 0
/obj/structure/closet/pcrate
name = "plastic crate"
desc = "A rectangular plastic crate."
icon = 'icons/obj/storage.dmi'
icon_state = "plasticcrate"
density = 1
icon_opened = "plasticcrateopen"
icon_closed = "plasticcrate"
req_access = null
opened = 0
flags = FPRINT
// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
var/rigged = 0
/obj/structure/closet/crate/internals
desc = "A internals crate."
name = "Internals crate"

View File

@@ -105,12 +105,12 @@
if(reinf) new /obj/item/stack/rods(loc)
del(src)
else if (usr.a_intent == "hurt")
playsound(src.loc, 'Glassknock.ogg', 80, 1)
playsound(src.loc, 'glassknock.ogg', 80, 1)
usr.visible_message("\red [usr.name] bangs against the [src.name]!", \
"\red You bang against the [src.name]!", \
"You hear a banging sound.")
else
playsound(src.loc, 'Glassknock.ogg', 80, 1)
playsound(src.loc, 'glassknock.ogg', 80, 1)
usr.visible_message("[usr.name] knocks on the [src.name].", \
"You knock on the [src.name].", \
"You hear a knocking sound.")

View File

@@ -133,7 +133,8 @@ var/list/admin_verbs_debug = list(
/client/proc/air_report,
/client/proc/reload_admins,
/client/proc/restart_controller,
/client/proc/enable_debug_verbs
/client/proc/enable_debug_verbs,
/client/proc/callproc
)
var/list/admin_verbs_possess = list(
/proc/possess,

View File

@@ -13,24 +13,24 @@
var/list/istates = J.IconStates()
if(!Lstates.Find(O.icon_state) && !Lstates.Find(O.item_state))
if(O.icon_state)
text += "[O.type] WANTS IN LEFT HAND CALLED\n\"[O.icon_state]\".\n"
text += "[O.type] is missing left hand icon called \"[O.icon_state]\".\n"
if(!Rstates.Find(O.icon_state) && !Rstates.Find(O.item_state))
if(O.icon_state)
text += "[O.type] WANTS IN RIGHT HAND CALLED\n\"[O.icon_state]\".\n"
text += "[O.type] is missing right hand icon called \"[O.icon_state]\".\n"
if(O.icon_state)
if(!istates.Find(O.icon_state))
text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.icon_state]\" IN \"[O.icon]\"\n"
if(O.item_state)
if(!istates.Find(O.item_state))
text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n"
text+="\n"
text += "[O.type] is missing normal icon called \"[O.icon_state]\" in \"[O.icon]\".\n"
//if(O.item_state)
// if(!istates.Find(O.item_state))
// text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n"
//text+="\n"
del(O)
if(text)
var/F = file("broken_icons.txt")
fdel(F)
F << text
world << "Completely successfully and written to [F]"
world << "Completeled successfully and written to [F]"

View File

@@ -547,13 +547,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
"assassin",
"death commando",
"syndicate commando",
"centcom official",
"centcom commander",
"special ops officer",
"blue wizard",
"red wizard",
"marisa wizard",
"emergency rescue team",
"nanotrasen representative",
"nanotrasen officer",
"nanotrasen captain"
)
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
if (isnull(dresscode))
@@ -742,54 +743,79 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("syndicate commando")
M.equip_syndicate_commando()
if("centcom official")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store)
if("nanotrasen representative")
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/representative(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(M), slot_ears)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "CentCom Review Official"
pda.ownjob = "NanoTrasen Navy Representative"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_to_slot_or_del(pda, slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/clipboard(M), slot_l_hand)
M.equip_if_possible(pda, slot_r_store)
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
M.equip_if_possible(new /obj/item/weapon/clipboard(M), slot_belt)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
W.icon_state = "centcom"
W.item_state = "id_inv"
W.access = get_all_accesses()
W.access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer")
W.assignment = "CentCom Review Official"
W.assignment = "NanoTrasen Navy Representative"
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
M.equip_if_possible(W, slot_wear_id)
if("centcom commander")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/centhat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
if("nanotrasen officer")
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head)
var/obj/item/weapon/card/id/W = new(M)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "NanoTrasen Navy Officer"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_if_possible(pda, slot_r_store)
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
M.equip_if_possible(new /obj/item/weapon/gun/energy(M), slot_belt)
var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card"
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_all_centcom_access()
W.assignment = "CentCom Commanding Officer"
W.assignment = "NanoTrasen Navy Officer"
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
M.equip_if_possible(W, slot_wear_id)
if("nanotrasen captain")
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "NanoTrasen Navy Captain"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_if_possible(pda, slot_r_store)
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
M.equip_if_possible(new /obj/item/weapon/gun/energy(M), slot_belt)
var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card"
W.access = get_all_accesses()
W.access += get_all_centcom_access()
W.assignment = "NanoTrasen Navy Captain"
W.registered_name = M.real_name
M.equip_if_possible(W, slot_wear_id)
if("emergency rescue team")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)

View File

@@ -159,6 +159,8 @@ var/intercom_range_display_status = 0
src.verbs += /client/proc/kill_air_processing
src.verbs += /client/proc/disable_communication
src.verbs += /client/proc/disable_movement
src.verbs += /client/proc/Zone_Info
src.verbs += /client/proc/Test_ZAS_Connection
//src.verbs += /client/proc/cmd_admin_rejuvenate
feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -30,7 +30,7 @@
////////////
var/next_allowed_topic_time = 10
// comment out the line below when debugging locally to enable the options & messages menu
control_freak = 1
//control_freak = 1
////////////////////////////////////

View File

@@ -252,7 +252,7 @@ datum/preferences
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
dat += "Skin Tone: <a href='?_src_=prefs;preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
//dat += "Skin pattern: <a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust</a><br>"
//dat += "Needs Glasses: <a href='?_src_=prefs;preference=disabilities'><b>[disabilities == 0 ? "No" : "Yes"]</b></a><br>"
dat += "Needs Glasses: <a href='?_src_=prefs;preference=disabilities'><b>[disabilities == 0 ? "No" : "Yes"]</b></a><br>"
dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust</a><br>"
//display limbs below

View File

@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 8
#define SAVEFILE_VERSION_MAX 8
#define SAVEFILE_VERSION_MAX 9
//handles converting savefiles to new formats
//MAKE SURE YOU KEEP THIS UP TO DATE!

View File

@@ -156,6 +156,7 @@ BLIND // can't see anything
3 = Report location
*/
var/obj/item/clothing/tie/hastie = null
var/displays_id = 1
/obj/item/clothing/under/attackby(obj/item/I, mob/user)
if(!hastie && istype(I, /obj/item/clothing/tie))

View File

@@ -117,6 +117,13 @@
usr.update_inv_glasses()
/obj/item/clothing/glasses/welding/superior
name = "superior welding goggles"
desc = "Welding goggles made from more expensive materials, strangely smells like potatoes."
icon_state = "rwelding-g"
item_state = "rwelding-g"
icon_action_button = "action_welding_g"
/obj/item/clothing/glasses/sunglasses/blindfold
name = "blindfold"
desc = "Covers the eyes, preventing sight."

View File

@@ -7,6 +7,13 @@
flags = FPRINT|TABLEPASS
item_state = "centhat"
/obj/item/clothing/head/hairflower
name = "hair flower pin"
icon_state = "hairflower"
desc = "Smells nice."
item_state = "hairflower"
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/powdered_wig
name = "powdered wig"
desc = "A powdered wig."

View File

@@ -68,6 +68,12 @@
permeability_coefficient = 0.01
color = "white"
/obj/item/clothing/shoes/leather
name = "leather shoes"
desc = "A sturdy pair of leather shoes."
icon_state = "leather"
color = "leather"
/obj/item/clothing/shoes/rainbow
name = "rainbow shoes"
desc = "Very gay shoes."

View File

@@ -21,6 +21,14 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/captunic/capjacket
name = "captain's uniform jacket"
desc = "A less formal jacket for everyday captain use."
icon_state = "capjacket"
item_state = "bio_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
//Chaplain
/obj/item/clothing/suit/chaplain_hoodie
name = "chaplain hoodie"

View File

@@ -287,6 +287,13 @@
desc = "A rather skimpy green dress."
icon_state = "stripper_g_over"
item_state = "stripper_g"
/obj/item/clothing/under/stripper/mankini
name = "the mankini"
desc = "No honest man would wear this abomination"
icon_state = "mankini"
color = "mankini"
/obj/item/clothing/suit/xenos
name = "xenos suit"
desc = "A suit made out of chitinous alien hide."
@@ -294,3 +301,35 @@
item_state = "xenos_helm"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
//swimsuit
/obj/item/clothing/under/swimsuit/black
name = "black swimsuit"
desc = "An oldfashioned black swimsuit."
icon_state = "swim_black"
color = "swim_black"
/obj/item/clothing/under/swimsuit/blue
name = "blue swimsuit"
desc = "An oldfashioned blue swimsuit."
icon_state = "swim_blue"
color = "swim_blue"
/obj/item/clothing/under/swimsuit/purple
name = "purple swimsuit"
desc = "An oldfashioned purple swimsuit."
icon_state = "swim_purp"
color = "swim_purp"
/obj/item/clothing/under/swimsuit/green
name = "green swimsuit"
desc = "An oldfashioned green swimsuit."
icon_state = "swim_green"
color = "swim_green"
/obj/item/clothing/under/swimsuit/red
name = "red swimsuit"
desc = "An oldfashioned red swimsuit."
icon_state = "swim_red"
color = "swim_red"

View File

@@ -142,6 +142,13 @@
item_state = "lawyer_purp"
color = "lawyer_purp"
/obj/item/clothing/under/lawyer/oldman
name = "Old Man's Suit"
desc = "A classic suit for the older gentleman with built in back support."
icon_state = "oldman"
item_state = "oldman"
color = "oldman"
/obj/item/clothing/under/librarian
name = "sensible suit"

View File

@@ -70,6 +70,24 @@
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/nurse
desc = "A dress commonly worn by the nursing staff in the medical department."
name = "nurse's dress"
icon_state = "nurse"
item_state = "nurse"
color = "nurse"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/orderly
desc = "A white suit to be worn by orderly people who love orderly things."
name = "orderly's uniform"
icon_state = "orderly"
item_state = "orderly"
color = "orderly"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/medical
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
name = "medical doctor's jumpsuit"

View File

@@ -26,6 +26,15 @@
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/dispatch
name = "dispatcher's uniform"
desc = "A dress shirt and khakis with a security patch sewn on."
icon_state = "dispatch"
item_state = "dispatch"
color = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/security2
name = "security officer's uniform"
desc = "It's made of a slightly sturdier material, to allow for robust protection."

View File

@@ -12,6 +12,13 @@
color = "blue_pyjamas"
item_state = "w_suit"
/obj/item/clothing/under/captain_fly
name = "rogue captains uniform"
desc = "For the man who doesn't care because he's still free."
icon_state = "captain_fly"
item_state = "captain_fly"
color = "captain_fly"
/obj/item/clothing/under/scratch
name = "white suit"
desc = "A white suit, suitable for an excellent host"
@@ -232,70 +239,122 @@
color = "gladiator"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
//dress
/obj/item/clothing/under/dress/dress_fire
name = "flame dress"
desc = "A small black dress with blue flames print on it."
icon_state = "dress_fire"
color = "dress_fire"
/obj/item/clothing/under/dress/dress_green
name = "green dress"
desc = "A simple, tight fitting green dress."
icon_state = "dress_green"
color = "dress_green"
/obj/item/clothing/under/dress/dress_orange
name = "orange dress"
desc = "A fancy orange gown for those who like to show leg."
icon_state = "dress_orange"
color = "dress_orange"
/obj/item/clothing/under/dress/dress_pink
name = "pink dress"
desc = "A simple, tight fitting pink dress."
icon_state = "dress_pink"
color = "dress_pink"
/obj/item/clothing/under/dress/dress_yellow
name = "yellow dress"
desc = "A flirty, little yellow dress."
icon_state = "dress_yellow"
color = "dress_yellow"
/obj/item/clothing/under/dress/dress_saloon
name = "saloon girl dress"
desc = "A old western inspired gown for the girl who likes to drink."
icon_state = "dress_saloon"
color = "dress_saloon"
/obj/item/clothing/under/dress/dress_rd
name = "research director dress uniform"
desc = "Feminine fashion for the style concious RD."
icon_state = "dress_rd"
color = "dress_rd"
/obj/item/clothing/under/dress/dress_cap
name = "captain dress uniform"
desc = "Feminine fashion for the style concious captain."
icon_state = "dress_cap"
color = "dress_cap"
/obj/item/clothing/under/dress/dress_hop
name = "head of personal dress uniform"
desc = "Feminine fashion for the style concious HoP."
icon_state = "dress_hop"
color = "dress_hop"
/obj/item/clothing/under/dress/dress_hr
name = "human resources director uniform"
desc = "Superior class for the nosy H.R. Director."
icon_state = "huresource"
color = "huresource"
/obj/item/clothing/under/dress/plaid_blue
name = "blue plaid skirt"
desc = "A preppy blue skirt with a white blouse."
icon_state = "plaid_blue"
color = "plaid_blue"
/obj/item/clothing/under/dress/plaid_red
name = "red plaid skirt"
desc = "A preppy red skirt with a white blouse."
icon_state = "plaid_red"
color = "plaid_red"
/obj/item/clothing/under/dress/plaid_purple
name = "blue purple skirt"
desc = "A preppy purple skirt with a white blouse."
icon_state = "plaid_purple"
color = "plaid_purple"
//wedding stuff
/obj/item/clothing/under/wedding/bride_orange
name = "orange wedding dress"
desc = "A big and puffy orange dress."
icon_state = "bride_orange"
item_state = "creamsuit"
color = "bride_orange"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/suit_white
name = "white suit"
desc = "A fabulous white suit with orange shirt."
icon_state = "white_suit"
item_state = "creamsuit"
color = "white_suit"
/obj/item/clothing/under/wedding/bride_purple
name = "purple wedding dress"
desc = "A big and puffy purple dress."
icon_state = "bride_purple"
color = "bride_purple"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bridesmaid
name = "yellow dress"
desc = "A big and puffy orange dress."
icon_state = "bridesmaid"
item_state = "creamsuit"
color = "bridesmaid"
/obj/item/clothing/under/wedding/bride_blue
name = "blue wedding dress"
desc = "A big and puffy blue dress."
icon_state = "bride_blue"
color = "bride_blue"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/firedress
name = "flaming hot black dress"
desc = "A small black dress with blue flames print on it."
icon_state = "dress_fire"
item_state = "creamsuit"
color = "dress_fire"
/obj/item/clothing/under/wedding/bride_red
name = "red wedding dress"
desc = "A big and puffy red dress."
icon_state = "bride_red"
color = "bride_red"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/dress_orange
name = "orange dress"
icon_state = "d_orange"
color = "d_orange"
/obj/item/clothing/under/wedding/dress_green
name = "green dress"
icon_state = "d_green"
color = "d_green"
/obj/item/clothing/under/wedding/dress_purple
name = "purple dress"
icon_state = "d_purple"
color = "d_purple"
/obj/item/clothing/under/wedding/dress_red
name = "red dress"
icon_state = "d_red"
color = "d_red"
/obj/item/clothing/under/wedding/dress_blue
name = "blue dress"
icon_state = "d_blue"
color = "d_blue"
/obj/item/clothing/under/wedding/officer_blue
name = "blue officer dress"
icon_state = "officer_blue"
color = "officer_blue"
/obj/item/clothing/under/wedding/dress_vampire
name = "vampire dress"
icon_state = "d_vampire"
color = "d_vampire"
/obj/item/clothing/under/wedding/bride_white
name = "orange wedding dress"
desc = "A white wedding gown made from the finest silk."
icon_state = "bride_white"
color = "bride_white"
flags_inv = HIDESHOES
/obj/item/clothing/under/sundress
name = "sundress"

View File

@@ -135,6 +135,14 @@ hi
icon_on = "bluezippoon"
icon_off = "bluezippo"
/obj/item/weapon/lighter/zippo/fluff/michael_guess_1 //Dragor23: Michael Guess
name = "engraved lighter"
desc = "A golden lighter, engraved with some ornaments and a G."
icon = 'custom_items.dmi'
icon_state = "guessip"
icon_on = "guessipon"
icon_off = "guessip"
/obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1 //rawrtaicho: Riley Rohtin
name = "Riley's black zippo"
desc = "A black zippo lighter, which holds some form of sentimental value."
@@ -192,6 +200,17 @@ hi
icon = 'custom_items.dmi'
desc = "A modified detective's camera, painted in bright orange. On the back you see \"Have fun\" written in small accurate letters with something black."
icon_state = "orangecamera"
icon_on = "orangecamera"
icon_off = "camera_off"
pictures_left = 30
/obj/item/device/camera/fluff/oldcamera //magmaram: Maria Crash
name = "Old Camera"
icon = 'custom_items.dmi'
desc = "An old, slightly beat-up digital camera, with a cheap photo printer taped on. It's a nice shade of blue."
icon_state = "oldcamera"
icon_on = "oldcamera"
icon_off = "oldcamera_off"
pictures_left = 30
/obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have
@@ -317,13 +336,6 @@ hi
icon = 'custom_items.dmi'
icon_state = "odysseus_spec_id"
/obj/item/weapon/card/id/fluff/ian_colm_1 //Roaper: Ian Colm
name = "Technician"
desc = "An old ID with the words 'Ian Colm's Technician ID' printed on it.."
icon = 'custom_items.dmi'
icon_state = "technician_id"
/obj/item/weapon/clipboard/fluff/mcreary_journal //sirribbot: James McReary
name = "McReary's journal"
desc = "A journal with a warning sticker on the front cover. The initials \"J.M.\" are written on the back."
@@ -353,6 +365,14 @@ hi
icon = 'custom_items.dmi'
icon_state = "royce_kit"
////// Ripley customisation kit - Sven Fjeltson - Mordeth221
/obj/item/weapon/fluff/sven_fjeltson_1
name = "Mercenary APLU kit"
desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into an old Mercenaries APLU."
icon = 'custom_items.dmi'
icon_state = "sven_kit"
//////////////////////////////////
//////////// Clothing ////////////
//////////////////////////////////
@@ -402,12 +422,6 @@ hi
icon = 'custom_items.dmi'
icon_state = "uzenwa_sissra_1"
/obj/item/clothing/glasses/welding/fluff/ian_colm_2 //roaper: Ian Colm
name = "Ian's Goggles"
desc = "A pair of goggles used in the application of welding."
icon = 'custom_items.dmi'
icon_state = "ian_colm_1"
////// Medical eyepatch - Thysse Ezinwa - Jadepython
/obj/item/clothing/glasses/eyepatch/fluff/thysse_1
name = "medical eyepatch"
@@ -459,6 +473,17 @@ hi
icon = 'custom_items.dmi'
icon_state = "edvin_telephosphor_1"
/obj/item/clothing/head/hardhat/fluff/neil_patterson_1 //superboredguy: Neil Patterson
name = "Engineering Cap"
desc = "Much safer than a hard helmet."
icon = 'custom_items.dmi'
icon_state = "neilpatterson0_hat"
/obj/item/clothing/head/fluff/krinnhat //Shirotyrant: Krinn Seeskale
name = "saucepan hat"
desc = "This hat is the shiniest shiny Krinn has ever owned."
icon = 'custom_items.dmi'
icon_state = "krinn_hat"
//////////// Suits ////////////
/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber
@@ -496,6 +521,14 @@ hi
icon_state = "deus_blueshield"
item_state = "deus_blueshield"
/obj/item/clothing/suit/fluff/oldscarf //Writerer2: Javaria Zara
name = "old scarf"
desc = "An old looking scarf, it seems to be fairly worn."
icon = 'clothing/suits.dmi'
icon_state = "mantle-unathi"
item_state = "mantle-unathi"
body_parts_covered = UPPER_TORSO
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/jumpsuitdown //searif: Yuki Matsuda
@@ -537,6 +570,14 @@ hi
item_state = "ara_bar_uniform"
color = "ara_bar_uniform"
/obj/item/clothing/under/fluff/callum_suit //roaper: Callum Leamus
name = "knockoff suit"
desc = "A knockoff of a suit commonly worn by the upper class."
icon = 'custom_items.dmi'
icon_state = "callum_suit"
item_state = "callum_suit"
color = "callum_suit"
/////// NT-SID Suit //Zuhayr: Jane Doe
/obj/item/clothing/under/fluff/jane_sidsuit

View File

@@ -36,7 +36,7 @@
var/sender
var/message
switch(pick(1,2,3,4,5))
switch(pick(1,2,3,4,5,6))
if(1)
sender = pick("MaxBet","MaxBet Online Casino","There is no better time to register","I'm excited for you to join us")
message = pick("Triple deposits are waiting for you at MaxBet Online when you register to play with us.",\
@@ -73,6 +73,12 @@
"Dear fund beneficiary, We have please to inform you that overdue funds payment has finally been approved and released for payment",\
"Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\
"Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits")
if(6)
sender = pick("NanoTrasen Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt")
message = pick("The NanoTrasen Morale Division wishes to provide you with quality entertainment sites.",\
"WetSkrell.nt is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\
"Wetskrell.nt only provides the higest quality of male entertaiment to NanoTrasen Employees.",\
"Simply enter your NanoTrasen Bank account system number and pin. With three easy steps this service could be yours!")
useMS.send_pda_message("[P.owner]", sender, message)

View File

@@ -6,7 +6,7 @@ mob/living/carbon/proc/dream()
"light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun",
"a hat","the Luna","a ruined station","a planet","plasma","air","the medical bay","the bridge","blinking lights",
"a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect",
"riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying"
"riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying","the eggs"
)
spawn(0)
for(var/i = rand(1,4),i > 0, i--)

View File

@@ -819,6 +819,14 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti
/datum/recipe/boiledrice
reagents = list("water" = 5, "rice" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/boiledrice
/datum/recipe/ricepudding
reagents = list("milk" = 5, "rice" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/ricepudding
/datum/recipe/pastatomato
reagents = list("water" = 5)
items = list(

View File

@@ -152,7 +152,7 @@ emp_act
location.add_blood(src)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(get_dist(H, src) > 1) //people with TK won't get smeared with blood
if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood
H.bloody_body(src)
H.bloody_hands(src)

View File

@@ -560,9 +560,13 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1)
if(wear_id)
wear_id.screen_loc = ui_id //TODO
if(w_uniform && w_uniform:displays_id)
overlays_lying[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id2")
overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id")
wear_id.screen_loc = ui_id //TODO
else
overlays_lying[ID_LAYER] = null
overlays_standing[ID_LAYER] = null
else
overlays_lying[ID_LAYER] = null
overlays_standing[ID_LAYER] = null

View File

@@ -559,7 +559,7 @@ datum/preferences
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(disabilities & NEARSIGHTED)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY)
preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY)
preview_icon.Blend(eyes_s, ICON_OVERLAY)
if(clothes_s)

View File

@@ -192,7 +192,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/blood/our = get_blood(vessel)
var/datum/reagent/blood/injected = get_blood(container.reagents)
if (!injected)
return
if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) )
reagents.add_reagent("toxin",amount * 0.5)
reagents.update_total()

View File

@@ -122,6 +122,8 @@
var/pictures_max = 10
var/pictures_left = 10
var/on = 1
var/icon_on = "camera"
var/icon_off = "camera_off"
/obj/item/device/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob)
@@ -130,9 +132,9 @@
/obj/item/device/camera/attack_self(mob/user as mob)
on = !on
if(on)
src.icon_state = "camera"
src.icon_state = icon_on
else
src.icon_state = "camera_off"
src.icon_state = icon_off
user << "You switch the camera [on ? "on" : "off"]."
return
@@ -253,8 +255,8 @@
pictures_left--
desc = "A polaroid camera. It has [pictures_left] photos left."
user << "<span class='notice'>[pictures_left] photos left.</span>"
icon_state = "camera_off"
icon_state = icon_off
on = 0
spawn(64)
icon_state = "camera"
icon_state = icon_on
on = 1

View File

@@ -277,10 +277,10 @@ var/list/solars_list = list()
var/cdir = 0
var/gen = 0
var/lastgen = 0
var/track = 0 // 0= off 1=timed 2=auto (tracker)
var/trackrate = 600 // 300-900 seconds
var/trackdir = 1 // 0 =CCW, 1=CW
var/nexttime = 0
var/track = 0 // 0=off 1=manual 2=automatic
var/trackrate = 60 // Measured in tenths of degree per minute (i.e. defaults to 6.0 deg/min)
var/trackdir = 1 // -1=CCW, 1=CW
var/nexttime = 0 // Next clock time that manual tracking will move the array
/obj/machinery/power/solar_control/New()
@@ -371,9 +371,11 @@ var/list/solars_list = list()
return
use_power(250)
if(track==1 && nexttime < world.timeofday && trackrate)
nexttime = world.timeofday + 3600/abs(trackrate)
cdir = (cdir+trackrate/abs(trackrate)+360)%360
if(track==1 && nexttime < world.time && trackdir*trackrate)
// Increments nexttime using itself and not world.time to prevent drift
nexttime = nexttime + 6000/trackrate
// Nudges array 1 degree in desired direction
cdir = (cdir+trackdir+360)%360
set_panels(cdir)
update_icon()
@@ -402,19 +404,28 @@ var/list/solars_list = list()
user.set_machine(src)
var/t = "<TT><B>Solar Generator Control</B><HR><PRE>"
t += "Generated power : [round(lastgen)] W<BR><BR>"
t += "<B>Orientation</B>: [rate_control(src,"cdir","[cdir]&deg",1,15)] ([angle2text(cdir)])<BR><BR><BR>"
t += "<BR><HR><BR><BR>"
t += "<B>Generated power</B> : [round(lastgen)] W<BR>"
t += "Station Rotational Period: [60/abs(sun.rate)] minutes<BR>"
t += "Station Rotational Direction: [sun.rate<0 ? "CCW" : "CW"]<BR>"
t += "Star Orientation: [sun.angle]&deg ([angle2text(sun.angle)])<BR>"
t += "Array Orientation: [rate_control(src,"cdir","[cdir]&deg",1,10,60)] ([angle2text(cdir)])<BR>"
t += "<BR><HR><BR>"
t += "Tracking: "
switch(track)
if(0)
t += "<B>Off</B> <A href='?src=\ref[src];track=1'>Timed</A> <A href='?src=\ref[src];track=2'>Auto</A><BR>"
t += "<B>Off</B> <A href='?src=\ref[src];track=1'>Manual</A> <A href='?src=\ref[src];track=2'>Automatic</A><BR>"
if(1)
t += "<A href='?src=\ref[src];track=0'>Off</A> <B>Timed</B> <A href='?src=\ref[src];track=2'>Auto</A><BR>"
t += "<A href='?src=\ref[src];track=0'>Off</A> <B>Manual</B> <A href='?src=\ref[src];track=2'>Automatic</A><BR>"
if(2)
t += "<A href='?src=\ref[src];track=0'>Off</A> <A href='?src=\ref[src];track=1'>Timed</A> <B>Auto</B><BR>"
t += "<A href='?src=\ref[src];track=0'>Off</A> <A href='?src=\ref[src];track=1'>Manual</A> <B>Automatic</B><BR>"
t += "Tracking Rate: [rate_control(src,"tdir","[trackrate] deg/h ([trackrate<0 ? "CCW" : "CW"])",5,30,180)]<BR><BR>"
t += "Manual Tracking Rate: [rate_control(src,"tdir","[trackrate/10]&deg/min ([trackdir<0 ? "CCW" : "CW"])",1,10)]<BR>"
t += "Manual Tracking Direction: "
switch(trackdir)
if(-1)
t += "<A href='?src=\ref[src];trackdir=1'>CW</A> <B>CCW</B><BR>"
if(1)
t += "<B>CW</B> <A href='?src=\ref[src];trackdir=-1'>CCW</A><BR>"
t += "<A href='?src=\ref[src];close=1'>Close</A></TT>"
user << browse(t, "window=solcon")
onclose(user, "solcon")
@@ -443,11 +454,11 @@ var/list/solars_list = list()
set_panels(cdir)
update_icon()
if(href_list["tdir"])
src.trackrate = dd_range(-7200,7200,src.trackrate+text2num(href_list["tdir"]))
if(src.trackrate) nexttime = world.timeofday + 3600/abs(trackrate)
src.trackrate = dd_range(0,360,src.trackrate+text2num(href_list["tdir"]))
if(src.trackrate) nexttime = world.time + 6000/trackrate
if(href_list["track"])
if(src.trackrate) nexttime = world.timeofday + 3600/abs(trackrate)
if(src.trackrate) nexttime = world.time + 6000/trackrate
track = text2num(href_list["track"])
if(powernet && (track == 2))
for(var/obj/machinery/power/tracker/T in get_solars_powernet())
@@ -455,6 +466,9 @@ var/list/solars_list = list()
cdir = T.sun_angle
break
if(href_list["trackdir"])
trackdir = text2num(href_list["trackdir"])
set_panels(cdir)
update_icon()
src.updateUsrDialog()

View File

@@ -55,7 +55,7 @@
icon_state = "cshotgun"
max_shells = 8
origin_tech = "combat=5;materials=2"
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
ammo_type = "/obj/item/ammo_casing/shotgun"
//this is largely hacky and bad :( -Pete
/obj/item/weapon/gun/projectile/shotgun/doublebarrel

View File

@@ -781,7 +781,10 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("cornoil" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk = list("rice" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium = list("plasticide" = 5),
//archaeology!
/obj/item/weapon/rocksliver = list("ground_rock" = 50),

View File

@@ -331,6 +331,21 @@ datum
..()
return
plasticide
name = "Plasticide"
id = "plasticide"
description = "Liquid plastic, do not eat."
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
custom_metabolism = 0.01
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
// Toxins are really weak, but without being treated, last very long.
M.adjustToxLoss(0.2)
..()
return
cyanide
// Fast and lethal
name = "Cyanide"
@@ -2277,6 +2292,19 @@ datum
if(!istype(T, /turf/space))
new /obj/effect/decal/cleanable/flour(T)
rice
name = "Rice"
id = "rice"
description = "Enjoy the great taste of nothing."
reagent_state = SOLID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#FFFFFF" // rgb: 0, 0, 0
on_mob_life(var/mob/living/M as mob)
M.nutrition += nutriment_factor
..()
return
cherryjelly
name = "Cherry Jelly"
id = "cherryjelly"
@@ -2622,6 +2650,67 @@ datum
color = "#878F00" // rgb: 135, 40, 0
adj_temp = -8
lemonade
name = "Lemonade"
description = "Oh the nostalgia..."
id = "lemonade"
color = "#FFFF00" // rgb: 255, 255, 0
kiraspecial
name = "Kira Special"
description = "Long live the guy who everyone had mistaken for a girl. Baka!"
id = "kiraspecial"
color = "#CCCC99" // rgb: 204, 204, 153
brownstar
name = "Brown Star"
description = "Its not what it sounds like..."
id = "brownstar"
color = "#9F3400" // rgb: 159, 052, 000
adj_temp = - 2
milkshake
name = "Milkshake"
description = "Glorious brainfreezing mixture."
id = "milkshake"
color = "#AEE5E4" // rgb" 174, 229, 228
adj_temp = -9
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
if(1 to 15)
M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
if(holder.has_reagent("capsaicin"))
holder.remove_reagent("capsaicin", 5)
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(5,20)
if(15 to 25)
M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(10,20)
if(25 to INFINITY)
M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
if(prob(1)) M.emote("shiver")
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(15,20)
data++
holder.remove_reagent(src.id, FOOD_METABOLISM)
..()
return
rewriter
name = "Rewriter"
description = "The secert of the sanctuary of the Libarian..."
id = "rewriter"
color = "#485000" // rgb:72, 080, 0
on_mob_life(var/mob/living/M as mob)
..()
M.make_jittery(5)
return
hippies_delight
name = "Hippie's Delight"
id = "hippiesdelight"
@@ -2792,6 +2881,12 @@ datum
description = "Number one drink AND fueling choice for Russians worldwide."
color = "#664300" // rgb: 102, 67, 0
sake
name = "Sake"
id = "sake"
description = "Anime's favorite drink."
color = "#664300" // rgb: 102, 67, 0
tequilla
name = "Tequila"
id = "tequilla"

View File

@@ -482,6 +482,19 @@ datum
var/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/mineral/plasma(location)
return
plastication
name = "Plastic"
id = "solidplastic"
result = null
required_reagents = list("pacid" = 10, "plasticide" = 20)
result_amount = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic
M.amount = 10
M.loc = get_turf_loc(holder.my_atom)
return
virus_food
name = "Virus Food"
id = "virusfood"
@@ -1461,6 +1474,13 @@ datum
required_reagents = list("potato" = 10)
required_catalysts = list("enzyme" = 5)
result_amount = 10
sake
name = "Sake"
id = "sake"
result = "sake"
required_reagents = list("rice" = 10)
required_catalysts = list("enzyme" = 5)
result_amount = 10
kahlua
name = "Kahlua"
@@ -1887,3 +1907,40 @@ datum
required_reagents = list("nothing" = 1, "gin" = 1)
result_amount = 2
lemonade
name = "Lemonade"
id = "lemonade"
result = "lemonade"
required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
result_amount = 3
kiraspecial
name = "Kira Special"
id = "kiraspecial"
result = "kiraspecial"
required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
result_amount = 2
brownstar
name = "Brown Star"
id = "brownstar"
result = "brownstar"
required_reagents = list("orangejuice" = 2, "cola" = 1)
result_amount = 2
milkshake
name = "Milkshake"
id = "milkshake"
result = "milkshake"
required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
result_amount = 5
rewriter
name = "Rewriter"
id = "rewriter"
result = "rewriter"
required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
result_amount = 2

View File

@@ -384,6 +384,18 @@
icon_state = "flask"
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
name = "Detective's Flask"
desc = "A metal flask with a leather band and golden badge belonging to the detective."
icon_state = "detflask"
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
name = "flask"
desc = "For those who can't be bothered to hang out at the bar to drink."
icon_state = "barflask"
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/britcup
name = "cup"
desc = "A cup with the british flag emblazoned on it."

View File

@@ -82,6 +82,10 @@
icon_state = "ginvodkaglass"
name = "Glass of vodka"
desc = "The glass contain wodka. Xynta."
if("sake")
icon_state = "ginvodkaglass"
name = "Glass of Sake"
desc = "A glass of Sake."
if("goldschlager")
icon_state = "ginvodkaglass"
name = "Glass of goldschlager"
@@ -422,6 +426,30 @@
icon_state = "dr_gibb_glass"
name = "Glass of welder fuel"
desc = "Unless you are an industrial tool, this is probably not safe for consumption."
if("brownstar")
icon_state = "brownstar"
name = "Brown Star"
desc = "Its not what it sounds like..."
if("icetea")
icon_state = "icetea"
name = "Iced Tea"
desc = "No relation to a certain rap artist/ actor."
if("milkshake")
icon_state = "milkshake"
name = "Milkshake"
desc = "Glorious brainfreezing mixture."
if("lemonade")
icon_state = "lemonade"
name = "Lemonade"
desc = "Oh the nostalgia..."
if("kiraspecial")
icon_state = "kiraspecial"
name = "Kira Special"
desc = "Long live the guy who everyone had mistaken for a girl. Baka!"
if("rewriter")
icon_state = "rewriter"
name = "Rewriter"
desc = "The secert of the sanctuary of the Libarian..."
else
icon_state ="glass_brown"
name = "Glass of ..what?"

View File

@@ -1566,6 +1566,26 @@
reagents.add_reagent("nutriment", 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/boiledrice
name = "Boiled Rice"
desc = "A boring dish of boring rice."
icon_state = "boiledrice"
trash = /obj/item/trash/snack_bowl
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/ricepudding
name = "Rice Pudding"
desc = "Where's the Jam!"
icon_state = "rpudding"
trash = /obj/item/trash/snack_bowl
New()
..()
reagents.add_reagent("nutriment", 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/pastatomato
name = "Spagetti"
desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"

View File

@@ -232,6 +232,17 @@
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium
seed = "/obj/item/seeds/plastiseed"
name = "clump of plastellium"
desc = "Hmm, needs some processing"
icon_state = "plastellium"
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
reagents.add_reagent("plasticide", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries
seed = "/obj/item/seeds/glowberryseed"
name = "bunch of glow-berries"
@@ -648,6 +659,18 @@
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk
seed = "/obj/item/seeds/riceseed"
name = "rice stalk"
desc = "Rice to see you."
gender = PLURAL
icon_state = "rice"
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod
seed = "/obj/item/seeds/kudzuseed"
name = "kudzu pod"

View File

@@ -534,6 +534,10 @@
proc/move()
var/obj/structure/disposalpipe/last
while(active)
if(hasmob && prob(3))
for(var/mob/living/H in src)
H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie
if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
active = 0
// find the fat guys

View File

@@ -102,7 +102,7 @@
// BRAIN DAMAGE FIXING //
//////////////////////////////////////////////////////////////////
/datum/surgery_step/brain/fix_brain
/datum/surgery_step/brain/bone_chips
required_tool = /obj/item/weapon/hemostat
allowed_tools = list(/obj/item/weapon/wirecutters, /obj/item/weapon/kitchen/utensil/fork)
@@ -113,22 +113,48 @@
return ..() && target.brain_op_stage == 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts mending ruptured vessels in [target]'s brain with \the [tool].", \
"You start mending [target]'s brain with \the [tool].")
user.visible_message("[user] starts taking out bone chips and out of [target]'s brain with \the [tool].", \
"You start taking out bone chips and out of [target]'s brain with \the [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\blue [user] mends [target]'s brain hematoma with \the [tool].", \
"\blue You mend ruptured vessels to [target]'s brain hematoma with \the [tool].")
user.visible_message("\blue [user] takes out all bone chips out of [target]'s brain with \the [tool].", \
"\blue You take out all bone chips out of [target]'s brain with \the [tool].")
target.brain_op_stage = 3
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, jabbing \the [tool] in [target]'s brain!", \
"\red Your hand slips, jabbing \the [tool] in [target]'s brain!")
target.apply_damage(30, BRUTE, "head", 1)
/datum/surgery_step/brain/hematoma
required_tool = /obj/item/weapon/FixOVein
allowed_tools = list(/obj/item/weapon/cable_coil)
min_duration = 90
max_duration = 110
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target.brain_op_stage == 3
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts mending hematoma in [target]'s brain with \the [tool].", \
"You start mending hematoma in [target]'s brain with \the [tool].")
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\blue [user] mends hematoma in [target]'s brain with \the [tool].", \
"\blue You mend hematoma in [target]'s brain with \the [tool].")
var/datum/organ/internal/brain/sponge = target.internal_organs["brain"]
if (sponge)
sponge.damage = 0
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, cutting a vein in [target]'s brain with \the [tool]!", \
"\red Your hand slips, cutting a vein in [target]'s brain with \the [tool]!")
target.apply_damage(50, BRUTE, "head", 1)
user.visible_message("\red [user]'s hand slips, bruising [target]'s brain with \the [tool]!", \
"\red Your hand slips, bruising [target]'s brain with \the [tool]!")
target.apply_damage(20, BRUTE, "head", 1)
//////////////////////////////////////////////////////////////////
// SLIME CORE EXTRACTION //

View File

@@ -29,6 +29,7 @@ leonheart11: Johann Erzatz: /obj/item/weapon/reagent_containers/food/drinks/fla
lexusjjss: Lexus Langg: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
lexusjjss: Zachary Tomlinson: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
madmalicemccrea: Alice McCrea: /obj/item/clothing/head/welding/fluff/alice_mccrea_1
magmaram: Maria Crash: /obj/item/device/camera/fluff/oldcamera
mangled: Li Matsuda: /obj/item/weapon/lighter/zippo/fluff/li_matsuda_1
maximumbob: Maurice Bedford: /obj/item/fluff/maurice_bedford_1
mcgulliver: Wox Derax: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/lithiumflask
@@ -48,7 +49,7 @@ rawrtaicho: Riley Rohtin: /obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1
rawrtaicho: Wyatt Engstrom: /obj/item/clothing/under/fluff/wyatt_1
roaper: Ian Colm: /obj/item/weapon/card/id/fluff/ian_colm_1
roaper: Ian Colm: /obj/item/clothing/glasses/welding/fluff/ian_colm_2
rukral: Nashida Bisha'ra: /obj/item/weapon/reagent_containers/glass/beaker/large/fluff/nashida_bishara_1
rukral: Nashida Bishara: /obj/item/weapon/reagent_containers/glass/beaker/large/fluff/nashida_bishara_1
searif: Yuki Matsuda: /obj/item/clothing/under/fluff/jumpsuitdown, /obj/item/clothing/head/welding/fluff/yuki_matsuda_1
searif: Ara Al-Jazari: /obj/item/clothing/under/rank/bartender/fluff/classy
serithi: Altair An-Nasaqan: /obj/item/clothing/tie/fluff/altair_locket
@@ -60,6 +61,7 @@ spaceman96: Trenna Seber: /obj/item/weapon/pen/fluff/multi, /obj/item/clothing/s
sparklysheep: Cado Keppel: /obj/item/weapon/fluff/cado_keppel_1
sparklysheep: Uzenwa Sissra: /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
suethecake: Ana Ka'Rimah: /obj/item/weapon/gun/energy/stunrevolver/fluff/ana_peacemaker
superboredguy: Neil Patterson: /obj/item/clothing/head/hardhat/fluff/neil_patterson_1
staghorn: Mara Kilpatrick: /obj/item/clothing/mask/mara_kilpatrick_1
tastyfish: Cindy Robertson: /obj/item/weapon/wrapping_paper
thatoneguy: Hugo Cinderbatch: /obj/item/weapon/fluff/hugo_cinderbacth_1
@@ -72,3 +74,4 @@ vinceluk: Seth Sealis: /obj/item/clothing/suit/det_suit/fluff/graycoat
whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
whitewolf41: Jeremy Wolf: /obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1
zuhayr: Jane Doe: /obj/item/clothing/under/fluff/jane_sidsuit
mordeth221: Sven Fjeltson: /obj/item/weapon/fluff/sven_fjeltson_1

View File

@@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Baystation 12 Changelog</title>
@@ -39,7 +39,7 @@ Header Section
<table align='center' class="top">
<tr>
<td valign='top'>
<font size='2'><b>Code:</b> Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty<br></font>
<font size='2'><b>Code:</b> Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty<br></font>
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone<br></font>
<font size='2'><b>Sounds:</b> Aryn<br></font>
<font size='2'><b>Thanks To:</b> /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot.</font>
@@ -57,14 +57,47 @@ Stuff which is in development and not yet visible to players or just code relate
(ie. code improvements for expandability, etc.) should not be listed here. They
should be listed in the changelog upon commit though. Thanks. -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here --><div class="commit sansserif">
<h2 class="date">April 24, 2013</h2>
<h3 class="author">Jediluke69 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter)</li>
<li class="tweak">Nanopaste now heals about half of what it used to</li>
<li class="tweak">Ballistic crates should now come with shotguns loaded with actual shells no more beanbags</li>
<li class="bugfix">Iced tea no longer makes a glass of .what?</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">April 24, 2013</h2>
<h3 class="author">faux updated:</h3>
<ul class="changes bgimages16">
<li class="imageadd">Mixed Wardrobe Closet now has colored shoes and plaid skirts.</li>
<li class="imageadd">Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A uniform jacket has also been added to the Captain's closet. HoS' hat has been re-added to their closet. I do not love the CMO and CE enough to give them anything.</li>
<li class="imageadd">Atheletic closet now has five different swimsuits *for the ladies* in them. If you are a guy, be prepared to be yelled at if you run around like a moron in one of these. Same goes for ladies who run around in shorts with their titties swaying in the space winds.</li>
<li class="imageadd">A set of dispatcher uniforms will spawn in the security closet. These are for playtesting the dispatcher role.</li>
<li class="imageadd">New suit spawns in the laundry room. It's for geezer's only. You're welcome, Book.</li>
<li class="imageadd">Nurse outfit variant, orderly uniform, and first responder jacket will now spawn in the medical wardrobe closet.</li>
<li class="imageadd">A white wedding dress will spawn in the chaplain's closet. There are also several dresses currently only adminspawnable. Admins: Look either under "bride" or "dress." The bride one leads to the colored wedding dresses, and there are some other kinds of dresses under dress.</li>
<li class="tweak">No more luchador masks or boxing gloves or boxing ring. You guys have a swimming pool now, dip in and enjoy it.</li>
<li class="tweak">he meeting hall has been replaced with an awkwardly placed security office meant for prisoner processing.</li>
<li class="tweak">Added a couple more welding goggles to engineering since you guys liked those a lot.</li>
<li class="imageadd">Flasks spawn behind the bar. Only three. Don't fight over them. I don't know how to add them to the bar vending machine otherwise I would have done that instead. Detective, you have your own flask in your office, it's underneath the cigarettes on your desk.</li>
<li class="tweak">Added two canes to the medical storage, for people who have leg injuries and can't walk good and stuff. I do not want to see doctors pretending to be House. These are for patients. Do not make me delete this addition and declare you guys not being able to have nice things.</li>
<li class="tweak">Secondary entance to EVA now directly leads into the medbay hardsuit section. Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits whenever they want.</li>
<li class="tweak">Secondary security hardsuit has been added to the armory. Security members please stop stealing engineer's hardsuits when you guys want to pair up for space travel.</li>
<li class="tweak">Firelocks have been moved around in the main hallways to form really ghetto versions of airlocks.</li>
<li class="tweak">Violin spawns in theatre storage now. I didn't put the piano there though, that was someone else.</li>
<li class="tweak">Psych office in medbay has been made better looking.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">May 14th 2013</h2>
<h3 class="author">Cael_Aislinn updated:</h3>
<h2 class="date">24th April 2013</h2>
<h3 class="author">NerdyBoy1104 updated:</h3>
<ul class="changes bgimages16">
<li class="experiment">Depth scanners can now be used to determine what material archaeological deposits are made of, meaning lab analysis is no longer required.</li>
<li class="tweak">Some useability issues with xenoarchaeology tools have been resolved, and the transit pods cycle automatically now.</li>
<li class="rscadd">New Botany additions: Rice and Plastellium. New sheet material: Plastic.</li>
<li class="rscadd">Plastellium is refined into plastic by first grinding the produce to get plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which can be used to make crates, forks, spoons, knives, ashtrays or plastic bags from.</li>
<li class="rscadd">Rice seeds grows into rice stalks that you grind to get rice. 10 Rice + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + 5 universal enzyme (in beaker) makes Sake.</li>
</ul>
</div>
@@ -76,15 +109,6 @@ should be listed in the changelog upon commit though. Thanks. -->
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">30.04.2013</h2>
<h3 class="author">Spamcat updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Pill bottle capacity increased to 14 items.</li>
<li class="bugfix">Fixed Lamarr (it now spawns properly)</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">17 April 2013</h2>
<h3 class="author">SkyMarshal updated:</h3>
@@ -100,6 +124,47 @@ should be listed in the changelog upon commit though. Thanks. -->
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">17 April 2013</h2>
<h3 class="author">SkyMarshal updated:</h3>
<ul class="changes bgimages16">
<li class="experiment">ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.</li>
<li class="experiment">World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)</li>
<li class="tweak">Zones will now equalize air more rapidly.</li>
<li class="bugfix">ZAS now respects active magboots when airflow occurs.</li>
<li class="bugfix">Airflow will no longer throw you into doors and open them.</li>
<li class="bugfix">Race condition in zone construction has been fixed, so zones connect properly at round start.</li>
<li class="bugfix">Plasma effects readded.</li>
<li class="bugfix">Fixed runtime involving away mission.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">30.04.2013</h2>
<h3 class="author">Spamcat updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Pill bottle capacity increased to 14 items.</li>
<li class="bugfix">Fixed Lamarr (it now spawns properly)</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">15.04.2013</h2>
<h3 class="author">Spamcat updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added <a href=http://www.safecity.com.au/aspchrlar.jpg>telescopic batons</a> to HoS's and captain's lockers. These are quite robust and easily concealable.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">May 14th 2013</h2>
<h3 class="author">Cael_Aislinn updated:</h3>
<ul class="changes bgimages16">
<li class="experiment">Depth scanners can now be used to determine what material archaeological deposits are made of, meaning lab analysis is no longer required.</li>
<li class="tweak">Some useability issues with xenoarchaeology tools have been resolved, and the transit pods cycle automatically now.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">11 April 2013</h2>
<h3 class="author">SkyMarshal updated:</h3>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

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