Merge branch 'master' of https://github.com/Baystation12/Baystation12 into rust
@@ -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"
|
||||
|
||||
@@ -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>"}
|
||||
|
||||
43
code/WorkInProgress/SkyMarshal/officer_stuff.dm
Normal 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
|
||||
@@ -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,24 +47,48 @@ connection
|
||||
else
|
||||
air_master.turfs_with_connections[ref_B] = list(src)
|
||||
|
||||
if(!A.zone.connected_zones)
|
||||
A.zone.connected_zones = list()
|
||||
if(!B.zone.connected_zones)
|
||||
B.zone.connected_zones = list()
|
||||
if(A.CanPass(null, B, 0, 0))
|
||||
|
||||
if(B.zone in A.zone.connected_zones)
|
||||
A.zone.connected_zones[B.zone]++
|
||||
else
|
||||
A.zone.connected_zones += B.zone
|
||||
A.zone.connected_zones[B.zone] = 1
|
||||
if(!A.zone.connected_zones)
|
||||
A.zone.connected_zones = list()
|
||||
if(!B.zone.connected_zones)
|
||||
B.zone.connected_zones = list()
|
||||
|
||||
if(B.zone in A.zone.connected_zones)
|
||||
A.zone.connected_zones[B.zone]++
|
||||
else
|
||||
A.zone.connected_zones += B.zone
|
||||
A.zone.connected_zones[B.zone] = 1
|
||||
|
||||
if(A.zone in B.zone.connected_zones)
|
||||
B.zone.connected_zones[A.zone]++
|
||||
else
|
||||
B.zone.connected_zones += A.zone
|
||||
B.zone.connected_zones[A.zone] = 1
|
||||
|
||||
if(A.HasDoor(B) || B.HasDoor(A))
|
||||
indirect = CONNECTION_INDIRECT
|
||||
|
||||
if(A.zone in B.zone.connected_zones)
|
||||
B.zone.connected_zones[A.zone]++
|
||||
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_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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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)))
|
||||
|
||||
@@ -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,9 +245,11 @@ 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.A.zone.air.compare(C.B.zone.air) || unsimulated_tiles)
|
||||
ZMerge(C.A.zone,C.B.zone)
|
||||
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)
|
||||
|
||||
progress = "problem with: ShareRatio(), Airflow(), a couple of misc procs"
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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™ 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)
|
||||
else
|
||||
intercepttext += i_text.build(A, pick(modePlayer))
|
||||
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 += "<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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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,10 +180,12 @@
|
||||
|
||||
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
|
||||
cell.use(heating_power/20000)
|
||||
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]"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
..()
|
||||
|
||||
@@ -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>",\
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
// -----------------------------
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]"
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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--)
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
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
|
||||
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")
|
||||
else
|
||||
overlays_lying[ID_LAYER] = null
|
||||
overlays_standing[ID_LAYER] = null
|
||||
else
|
||||
overlays_lying[ID_LAYER] = null
|
||||
overlays_standing[ID_LAYER] = null
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -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]°",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]° ([angle2text(sun.angle)])<BR>"
|
||||
t += "Array Orientation: [rate_control(src,"cdir","[cdir]°",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]°/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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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?"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 //
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 269 KiB |
|
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 232 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |