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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
client/verb/Zone_Info(turf/T as null|turf) client/proc/Zone_Info(turf/T as null|turf)
set category = "Debug" set category = "Debug"
if(T) if(T)
if(T.zone) 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" set category = "Debug"
if(!istype(T)) if(!istype(T))
return return

View File

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

View File

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

View File

@@ -198,6 +198,9 @@ turf
else else
zone.RemoveTurf(NT) //Not adjacent to anything, and unsimulated. Goodbye~ 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. if(T.zone && !T.zone.rebuild) //I block air.
var/turf/NT = get_step(src, reverse_direction(direction)) 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))) if(istype(NT,/turf/simulated) && (NT in T.zone.contents || (NT.zone && T in NT.zone.contents)))

View File

@@ -12,6 +12,7 @@ zone
list/connections // /connection objects which refer to connections with other zones, e.g. through a door. list/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 list/connected_zones //Parallels connections, but lists zones to which this one is connected and the number
//of points they're connected at. //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. list/unsimulated_tiles // Any space tiles in this list will cause air to flow out.
last_update = 0 last_update = 0
progress = "nothing" progress = "nothing"
@@ -244,7 +245,9 @@ zone/proc/process()
//Do merging if conditions are met. Specifically, if there's a non-door connection //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 //to somewhere with space, the zones are merged regardless of equilibrium, to speed
//up spacing in areas with double-plated windows. //up spacing in areas with double-plated windows.
if(C && C.indirect == 2 && C.A.zone && C.B.zone) //indirect = 2 is a direct connection. if(C && C.A.zone && C.B.zone)
//indirect = 2 is a direct connection.
if(C.indirect == 2 )
if(C.A.zone.air.compare(C.B.zone.air) || unsimulated_tiles) if(C.A.zone.air.compare(C.B.zone.air) || unsimulated_tiles)
ZMerge(C.A.zone,C.B.zone) ZMerge(C.A.zone,C.B.zone)
@@ -269,13 +272,18 @@ zone/proc/process()
Airflow(src,Z) Airflow(src,Z)
ShareRatio( air , Z.air , connected_zones[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" progress = "all components completed successfully, the problem is not here"
//////////////// ////////////////
//Air Movement// //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) proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
//Shares a specific ratio of gas between mixtures using simple weighted averages. //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()) 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// //Zone Rebuilding//
/////////////////// ///////////////////
@@ -487,6 +518,7 @@ zone/proc/Rebuild()
if(istype(T) && T.zone && S.CanPass(null, T, 0, 0)) if(istype(T) && T.zone && S.CanPass(null, T, 0, 0))
T.zone.AddTurf(S) T.zone.AddTurf(S)
proc/play_wind_sound(var/turf/random_border, var/n) proc/play_wind_sound(var/turf/random_border, var/n)
if(random_border) if(random_border)
var/windsound = 'sound/effects/wind/wind_2_1.ogg' var/windsound = 'sound/effects/wind/wind_2_1.ogg'

View File

@@ -132,6 +132,9 @@ datum/controller/vote
restart = 1 restart = 1
else else
master_mode = . master_mode = .
if(!going)
going = 1
world << "<font color='red'><b>The round will start soon.</b></font>"
if("crew_transfer") if("crew_transfer")
if(. == "Initiate Crew Transfer") if(. == "Initiate Crew Transfer")
init_shift_change(null, 1) init_shift_change(null, 1)
@@ -194,8 +197,14 @@ datum/controller/vote
var/text = "[capitalize(mode)] vote started by [initiator]." var/text = "[capitalize(mode)] vote started by [initiator]."
if(mode == "custom") if(mode == "custom")
text += "\n[question]" text += "\n[question]"
log_vote(text) 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 << "<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) time_remaining = round(config.vote_period/10)
return 1 return 1
return 0 return 0

View File

@@ -2,14 +2,15 @@
var/angle var/angle
var/dx var/dx
var/dy 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/rate
var/list/solars // for debugging purposes, references solars_list at the constructor 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() /datum/sun/New()
solars = solars_list 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)) if(prob(50))
rate = -rate rate = -rate
@@ -17,13 +18,22 @@
/datum/sun/proc/calc_position() /datum/sun/proc/calc_position()
counter++ /* counter++
if(counter<50) // count 50 pticks (50 seconds, roughly - about a 5deg change) if(counter<50) // count 50 pticks (50 seconds, roughly - about a 5deg change)
return 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 // now calculate and cache the (dx,dy) increments for line drawing
var/s = sin(angle) var/s = sin(angle)

View File

@@ -662,6 +662,24 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
access = access_armory access = access_armory
group = "Security" 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 /datum/supply_packs/expenergy
name = "Experimental energy gear crate" name = "Experimental energy gear crate"
contains = list(/obj/item/clothing/suit/armor/laserproof, contains = list(/obj/item/clothing/suit/armor/laserproof,

View File

@@ -63,6 +63,24 @@
plant_type = 0 plant_type = 0
growthstages = 6 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 /obj/item/seeds/replicapod
name = "pack of replica pod seeds" name = "pack of replica pod seeds"
desc = "These seeds grow into replica pods. They say these are used to harvest humans." desc = "These seeds grow into replica pods. They say these are used to harvest humans."
@@ -413,6 +431,24 @@
plant_type = 0 plant_type = 0
growthstages = 6 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 /obj/item/seeds/carrotseed
name = "pack of carrot seeds" name = "pack of carrot seeds"
desc = "These seeds grow into carrots." desc = "These seeds grow into carrots."

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -615,7 +615,6 @@ Auto Patrol: []"},
// given an optional turf to avoid // given an optional turf to avoid
/obj/machinery/bot/ed209/proc/calc_path(var/turf/avoid = null) /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 = 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 // look for a criminal in view of the bot

View File

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

View File

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

View File

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

View File

@@ -706,7 +706,8 @@
// given an optional turf to avoid // given an optional turf to avoid
/obj/machinery/bot/mulebot/proc/calc_path(var/turf/avoid = null) /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 = 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 // sets the current destination

View File

@@ -583,7 +583,6 @@ Auto Patrol: []"},
// given an optional turf to avoid // given an optional turf to avoid
/obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null) /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 = 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 // look for a criminal in view of the bot

View File

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

View File

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

View File

@@ -774,7 +774,7 @@
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3, /obj/item/seeds/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/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/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, 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) /obj/item/seeds/plumpmycelium = 2,/obj/item/seeds/reishimycelium = 2)
premium = list(/obj/item/toy/waterflower = 1) premium = list(/obj/item/toy/waterflower = 1)

View File

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

View File

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

View File

@@ -114,6 +114,33 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
pixel_y = rand(0,4)-4 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 * Gold
*/ */

View File

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

View File

@@ -40,6 +40,12 @@
icon_state = "spoon" icon_state = "spoon"
attack_verb = list("attacked", "poked") 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 * Forks
*/ */
@@ -71,6 +77,34 @@
M = user M = user
return eyestab(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 * Knives
*/ */
@@ -95,6 +129,21 @@
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..() 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 * Kitchen knives
*/ */

View File

@@ -38,7 +38,6 @@
can_hold = list() // any can_hold = list() // any
cant_hold = list("/obj/item/weapon/disk/nuclear") cant_hold = list("/obj/item/weapon/disk/nuclear")
/obj/item/weapon/storage/bag/trash/update_icon() /obj/item/weapon/storage/bag/trash/update_icon()
if(contents.len == 0) if(contents.len == 0)
icon_state = "trashbag0" icon_state = "trashbag0"
@@ -48,6 +47,24 @@
icon_state = "trashbag2" icon_state = "trashbag2"
else icon_state = "trashbag3" 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 // Mining Satchel
// ----------------------------- // -----------------------------

View File

@@ -75,13 +75,13 @@
else else
user.take_organ_damage(2*force) user.take_organ_damage(2*force)
return return
/*this is already called in ..()
src.add_fingerprint(user) 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>") 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>") 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>") 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 (user.a_intent == "hurt")
if(!..()) return if(!..()) return
playsound(src.loc, "swing_hit", 50, 1, -1) playsound(src.loc, "swing_hit", 50, 1, -1)
@@ -90,13 +90,88 @@
M.Stun(8) M.Stun(8)
M.Weaken(8) M.Weaken(8)
for(var/mob/O in viewers(M)) 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 else
playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1, -1) playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1, -1)
M.Stun(5) M.Stun(5)
M.Weaken(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)) 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 *Energy Blade

View File

@@ -12,6 +12,11 @@
new /obj/item/clothing/under/shorts/red(src) new /obj/item/clothing/under/shorts/red(src)
new /obj/item/clothing/under/shorts/blue(src) new /obj/item/clothing/under/shorts/blue(src)
new /obj/item/clothing/under/shorts/green(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 /obj/structure/closet/boxinggloves

View File

@@ -19,10 +19,12 @@
sleep(2) sleep(2)
new /obj/item/clothing/head/that(src) new /obj/item/clothing/head/that(src)
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/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/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/suit/wcoat(src) new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src)

View File

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

View File

@@ -16,6 +16,7 @@
else else
new /obj/item/weapon/storage/backpack/satchel_cap(src) new /obj/item/weapon/storage/backpack/satchel_cap(src)
new /obj/item/clothing/suit/captunic(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/head/helmet/cap(src)
new /obj/item/clothing/under/rank/captain(src) new /obj/item/clothing/under/rank/captain(src)
new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/suit/armor/vest(src)
@@ -26,6 +27,8 @@
new /obj/item/clothing/gloves/captain(src) new /obj/item/clothing/gloves/captain(src)
new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/clothing/suit/armor/captain(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 return
@@ -43,17 +46,41 @@
New() New()
..() ..()
sleep(2) 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/suit/armor/vest(src)
new /obj/item/clothing/head/helmet(src) new /obj/item/clothing/head/helmet(src)
new /obj/item/weapon/cartridge/hop(src) new /obj/item/weapon/cartridge/hop(src)
new /obj/item/device/radio/headset/heads/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/storage/box/ids( src ) new /obj/item/weapon/storage/box/ids( src )
new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/device/flash(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 return
@@ -75,6 +102,7 @@
new /obj/item/weapon/storage/backpack/security(src) new /obj/item/weapon/storage/backpack/security(src)
else else
new /obj/item/weapon/storage/backpack/satchel_sec(src) 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/suit/armor/vest(src)
new /obj/item/clothing/under/rank/head_of_security/jensen(src) new /obj/item/clothing/under/rank/head_of_security/jensen(src)
new /obj/item/clothing/suit/armor/hos/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/melee/baton(src)
new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/clothing/tie/holster/waist(src) new /obj/item/clothing/tie/holster/waist(src)
new /obj/item/weapon/melee/telebaton(src)
return return

View File

@@ -26,6 +26,8 @@
new /obj/item/clothing/under/rank/security2(src) new /obj/item/clothing/under/rank/security2(src)
new /obj/item/clothing/under/rank/security2(src) new /obj/item/clothing/under/rank/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) 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/suit/chaplain_hoodie(src)
new /obj/item/clothing/head/chaplain_hood(src) new /obj/item/clothing/head/chaplain_hood(src)
new /obj/item/clothing/suit/holidaypriest(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/backpack/cultpack (src)
new /obj/item/weapon/storage/fancy/candle_box(src) new /obj/item/weapon/storage/fancy/candle_box(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) new /obj/item/clothing/shoes/black(src)
return 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 /obj/structure/closet/wardrobe/orange
name = "prison wardrobe" name = "prison wardrobe"
@@ -328,13 +344,18 @@
icon_closed = "mixed" icon_closed = "mixed"
/obj/structure/closet/wardrobe/mixed/New() /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/blue(src)
new /obj/item/clothing/under/color/yellow(src) new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/green(src) new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/orange(src) new /obj/item/clothing/under/color/orange(src)
new /obj/item/clothing/under/color/pink(src) new /obj/item/clothing/under/color/pink(src)
new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/under/dress/plaid_blue(src)
new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/under/dress/plaid_red(src)
new /obj/item/clothing/shoes/white(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 return

View File

@@ -14,6 +14,20 @@
// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //??? // mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
var/rigged = 0 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 /obj/structure/closet/crate/internals
desc = "A internals crate." desc = "A internals crate."
name = "Internals crate" name = "Internals crate"

View File

@@ -105,12 +105,12 @@
if(reinf) new /obj/item/stack/rods(loc) if(reinf) new /obj/item/stack/rods(loc)
del(src) del(src)
else if (usr.a_intent == "hurt") 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]!", \ usr.visible_message("\red [usr.name] bangs against the [src.name]!", \
"\red You bang against the [src.name]!", \ "\red You bang against the [src.name]!", \
"You hear a banging sound.") "You hear a banging sound.")
else 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].", \ usr.visible_message("[usr.name] knocks on the [src.name].", \
"You knock on the [src.name].", \ "You knock on the [src.name].", \
"You hear a knocking sound.") "You hear a knocking sound.")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -252,7 +252,7 @@ datum/preferences
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>" dat += "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 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 += "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>" dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust</a><br>"
//display limbs below //display limbs below

View File

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

View File

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

View File

@@ -117,6 +117,13 @@
usr.update_inv_glasses() 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 /obj/item/clothing/glasses/sunglasses/blindfold
name = "blindfold" name = "blindfold"
desc = "Covers the eyes, preventing sight." desc = "Covers the eyes, preventing sight."

View File

@@ -7,6 +7,13 @@
flags = FPRINT|TABLEPASS flags = FPRINT|TABLEPASS
item_state = "centhat" 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 /obj/item/clothing/head/powdered_wig
name = "powdered wig" name = "powdered wig"
desc = "A powdered wig." desc = "A powdered wig."

View File

@@ -68,6 +68,12 @@
permeability_coefficient = 0.01 permeability_coefficient = 0.01
color = "white" 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 /obj/item/clothing/shoes/rainbow
name = "rainbow shoes" name = "rainbow shoes"
desc = "Very gay shoes." desc = "Very gay shoes."

View File

@@ -21,6 +21,14 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT 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 //Chaplain
/obj/item/clothing/suit/chaplain_hoodie /obj/item/clothing/suit/chaplain_hoodie
name = "chaplain hoodie" name = "chaplain hoodie"

View File

@@ -287,6 +287,13 @@
desc = "A rather skimpy green dress." desc = "A rather skimpy green dress."
icon_state = "stripper_g_over" icon_state = "stripper_g_over"
item_state = "stripper_g" 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 /obj/item/clothing/suit/xenos
name = "xenos suit" name = "xenos suit"
desc = "A suit made out of chitinous alien hide." desc = "A suit made out of chitinous alien hide."
@@ -294,3 +301,35 @@
item_state = "xenos_helm" item_state = "xenos_helm"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
//swimsuit
/obj/item/clothing/under/swimsuit/black
name = "black swimsuit"
desc = "An oldfashioned black swimsuit."
icon_state = "swim_black"
color = "swim_black"
/obj/item/clothing/under/swimsuit/blue
name = "blue swimsuit"
desc = "An oldfashioned blue swimsuit."
icon_state = "swim_blue"
color = "swim_blue"
/obj/item/clothing/under/swimsuit/purple
name = "purple swimsuit"
desc = "An oldfashioned purple swimsuit."
icon_state = "swim_purp"
color = "swim_purp"
/obj/item/clothing/under/swimsuit/green
name = "green swimsuit"
desc = "An oldfashioned green swimsuit."
icon_state = "swim_green"
color = "swim_green"
/obj/item/clothing/under/swimsuit/red
name = "red swimsuit"
desc = "An oldfashioned red swimsuit."
icon_state = "swim_red"
color = "swim_red"

View File

@@ -142,6 +142,13 @@
item_state = "lawyer_purp" item_state = "lawyer_purp"
color = "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 /obj/item/clothing/under/librarian
name = "sensible suit" name = "sensible suit"

View File

@@ -70,6 +70,24 @@
permeability_coefficient = 0.50 permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) 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 /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." 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" name = "medical doctor's jumpsuit"

View File

@@ -26,6 +26,15 @@
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS 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 /obj/item/clothing/under/rank/security2
name = "security officer's uniform" name = "security officer's uniform"
desc = "It's made of a slightly sturdier material, to allow for robust protection." desc = "It's made of a slightly sturdier material, to allow for robust protection."

View File

@@ -12,6 +12,13 @@
color = "blue_pyjamas" color = "blue_pyjamas"
item_state = "w_suit" 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 /obj/item/clothing/under/scratch
name = "white suit" name = "white suit"
desc = "A white suit, suitable for an excellent host" desc = "A white suit, suitable for an excellent host"
@@ -232,70 +239,122 @@
color = "gladiator" color = "gladiator"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS 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 //wedding stuff
/obj/item/clothing/under/wedding/bride_orange /obj/item/clothing/under/wedding/bride_orange
name = "orange wedding dress" name = "orange wedding dress"
desc = "A big and puffy orange dress." desc = "A big and puffy orange dress."
icon_state = "bride_orange" icon_state = "bride_orange"
item_state = "creamsuit"
color = "bride_orange" color = "bride_orange"
flags_inv = HIDESHOES flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/suit_white /obj/item/clothing/under/wedding/bride_purple
name = "white suit" name = "purple wedding dress"
desc = "A fabulous white suit with orange shirt." desc = "A big and puffy purple dress."
icon_state = "white_suit" icon_state = "bride_purple"
item_state = "creamsuit" color = "bride_purple"
color = "white_suit" flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bridesmaid /obj/item/clothing/under/wedding/bride_blue
name = "yellow dress" name = "blue wedding dress"
desc = "A big and puffy orange dress." desc = "A big and puffy blue dress."
icon_state = "bridesmaid" icon_state = "bride_blue"
item_state = "creamsuit" color = "bride_blue"
color = "bridesmaid" flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/firedress /obj/item/clothing/under/wedding/bride_red
name = "flaming hot black dress" name = "red wedding dress"
desc = "A small black dress with blue flames print on it." desc = "A big and puffy red dress."
icon_state = "dress_fire" icon_state = "bride_red"
item_state = "creamsuit" color = "bride_red"
color = "dress_fire" flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/dress_orange /obj/item/clothing/under/wedding/bride_white
name = "orange dress" name = "orange wedding dress"
icon_state = "d_orange" desc = "A white wedding gown made from the finest silk."
color = "d_orange" icon_state = "bride_white"
color = "bride_white"
/obj/item/clothing/under/wedding/dress_green flags_inv = HIDESHOES
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/sundress /obj/item/clothing/under/sundress
name = "sundress" name = "sundress"

View File

@@ -135,6 +135,14 @@ hi
icon_on = "bluezippoon" icon_on = "bluezippoon"
icon_off = "bluezippo" 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 /obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1 //rawrtaicho: Riley Rohtin
name = "Riley's black zippo" name = "Riley's black zippo"
desc = "A black zippo lighter, which holds some form of sentimental value." desc = "A black zippo lighter, which holds some form of sentimental value."
@@ -192,6 +200,17 @@ hi
icon = 'custom_items.dmi' 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." 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_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 pictures_left = 30
/obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have /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 = 'custom_items.dmi'
icon_state = "odysseus_spec_id" 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 /obj/item/weapon/clipboard/fluff/mcreary_journal //sirribbot: James McReary
name = "McReary's journal" name = "McReary's journal"
desc = "A journal with a warning sticker on the front cover. The initials \"J.M.\" are written on the back." 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 = 'custom_items.dmi'
icon_state = "royce_kit" 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 //////////// //////////// Clothing ////////////
////////////////////////////////// //////////////////////////////////
@@ -402,12 +422,6 @@ hi
icon = 'custom_items.dmi' icon = 'custom_items.dmi'
icon_state = "uzenwa_sissra_1" 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 ////// Medical eyepatch - Thysse Ezinwa - Jadepython
/obj/item/clothing/glasses/eyepatch/fluff/thysse_1 /obj/item/clothing/glasses/eyepatch/fluff/thysse_1
name = "medical eyepatch" name = "medical eyepatch"
@@ -459,6 +473,17 @@ hi
icon = 'custom_items.dmi' icon = 'custom_items.dmi'
icon_state = "edvin_telephosphor_1" 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 //////////// //////////// Suits ////////////
/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber /obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber
@@ -496,6 +521,14 @@ hi
icon_state = "deus_blueshield" icon_state = "deus_blueshield"
item_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 //////////// //////////// Uniforms ////////////
/obj/item/clothing/under/fluff/jumpsuitdown //searif: Yuki Matsuda /obj/item/clothing/under/fluff/jumpsuitdown //searif: Yuki Matsuda
@@ -537,6 +570,14 @@ hi
item_state = "ara_bar_uniform" item_state = "ara_bar_uniform"
color = "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 /////// NT-SID Suit //Zuhayr: Jane Doe
/obj/item/clothing/under/fluff/jane_sidsuit /obj/item/clothing/under/fluff/jane_sidsuit

View File

@@ -36,7 +36,7 @@
var/sender var/sender
var/message var/message
switch(pick(1,2,3,4,5)) switch(pick(1,2,3,4,5,6))
if(1) if(1)
sender = pick("MaxBet","MaxBet Online Casino","There is no better time to register","I'm excited for you to join us") 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.",\ 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",\ "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.",\ "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") "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) useMS.send_pda_message("[P.owner]", sender, message)

View File

@@ -6,7 +6,7 @@ mob/living/carbon/proc/dream()
"light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun", "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 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", "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) spawn(0)
for(var/i = rand(1,4),i > 0, i--) for(var/i = rand(1,4),i > 0, i--)

View File

@@ -819,6 +819,14 @@ I said no!
) )
result = /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti 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 /datum/recipe/pastatomato
reagents = list("water" = 5) reagents = list("water" = 5)
items = list( items = list(

View File

@@ -152,7 +152,7 @@ emp_act
location.add_blood(src) location.add_blood(src)
if(ishuman(user)) if(ishuman(user))
var/mob/living/carbon/human/H = 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_body(src)
H.bloody_hands(src) H.bloody_hands(src)

View File

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

View File

@@ -559,7 +559,7 @@ datum/preferences
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(disabilities & NEARSIGHTED) 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) preview_icon.Blend(eyes_s, ICON_OVERLAY)
if(clothes_s) if(clothes_s)

View File

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

View File

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

View File

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

View File

@@ -55,7 +55,7 @@
icon_state = "cshotgun" icon_state = "cshotgun"
max_shells = 8 max_shells = 8
origin_tech = "combat=5;materials=2" 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 //this is largely hacky and bad :( -Pete
/obj/item/weapon/gun/projectile/shotgun/doublebarrel /obj/item/weapon/gun/projectile/shotgun/doublebarrel

View File

@@ -781,7 +781,10 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("cornoil" = 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/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/cherries = list("cherryjelly" = 0),
/obj/item/weapon/reagent_containers/food/snacks/grown/plastellium = list("plasticide" = 5),
//archaeology! //archaeology!
/obj/item/weapon/rocksliver = list("ground_rock" = 50), /obj/item/weapon/rocksliver = list("ground_rock" = 50),

View File

@@ -331,6 +331,21 @@ datum
..() ..()
return 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 cyanide
// Fast and lethal // Fast and lethal
name = "Cyanide" name = "Cyanide"
@@ -2277,6 +2292,19 @@ datum
if(!istype(T, /turf/space)) if(!istype(T, /turf/space))
new /obj/effect/decal/cleanable/flour(T) 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 cherryjelly
name = "Cherry Jelly" name = "Cherry Jelly"
id = "cherryjelly" id = "cherryjelly"
@@ -2622,6 +2650,67 @@ datum
color = "#878F00" // rgb: 135, 40, 0 color = "#878F00" // rgb: 135, 40, 0
adj_temp = -8 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 hippies_delight
name = "Hippie's Delight" name = "Hippie's Delight"
id = "hippiesdelight" id = "hippiesdelight"
@@ -2792,6 +2881,12 @@ datum
description = "Number one drink AND fueling choice for Russians worldwide." description = "Number one drink AND fueling choice for Russians worldwide."
color = "#664300" // rgb: 102, 67, 0 color = "#664300" // rgb: 102, 67, 0
sake
name = "Sake"
id = "sake"
description = "Anime's favorite drink."
color = "#664300" // rgb: 102, 67, 0
tequilla tequilla
name = "Tequila" name = "Tequila"
id = "tequilla" id = "tequilla"

View File

@@ -482,6 +482,19 @@ datum
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/mineral/plasma(location) new /obj/item/stack/sheet/mineral/plasma(location)
return 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 virus_food
name = "Virus Food" name = "Virus Food"
id = "virusfood" id = "virusfood"
@@ -1461,6 +1474,13 @@ datum
required_reagents = list("potato" = 10) required_reagents = list("potato" = 10)
required_catalysts = list("enzyme" = 5) required_catalysts = list("enzyme" = 5)
result_amount = 10 result_amount = 10
sake
name = "Sake"
id = "sake"
result = "sake"
required_reagents = list("rice" = 10)
required_catalysts = list("enzyme" = 5)
result_amount = 10
kahlua kahlua
name = "Kahlua" name = "Kahlua"
@@ -1887,3 +1907,40 @@ datum
required_reagents = list("nothing" = 1, "gin" = 1) required_reagents = list("nothing" = 1, "gin" = 1)
result_amount = 2 result_amount = 2
lemonade
name = "Lemonade"
id = "lemonade"
result = "lemonade"
required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
result_amount = 3
kiraspecial
name = "Kira Special"
id = "kiraspecial"
result = "kiraspecial"
required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
result_amount = 2
brownstar
name = "Brown Star"
id = "brownstar"
result = "brownstar"
required_reagents = list("orangejuice" = 2, "cola" = 1)
result_amount = 2
milkshake
name = "Milkshake"
id = "milkshake"
result = "milkshake"
required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
result_amount = 5
rewriter
name = "Rewriter"
id = "rewriter"
result = "rewriter"
required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
result_amount = 2

View File

@@ -384,6 +384,18 @@
icon_state = "flask" icon_state = "flask"
volume = 60 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 /obj/item/weapon/reagent_containers/food/drinks/britcup
name = "cup" name = "cup"
desc = "A cup with the british flag emblazoned on it." desc = "A cup with the british flag emblazoned on it."

View File

@@ -82,6 +82,10 @@
icon_state = "ginvodkaglass" icon_state = "ginvodkaglass"
name = "Glass of vodka" name = "Glass of vodka"
desc = "The glass contain wodka. Xynta." desc = "The glass contain wodka. Xynta."
if("sake")
icon_state = "ginvodkaglass"
name = "Glass of Sake"
desc = "A glass of Sake."
if("goldschlager") if("goldschlager")
icon_state = "ginvodkaglass" icon_state = "ginvodkaglass"
name = "Glass of goldschlager" name = "Glass of goldschlager"
@@ -422,6 +426,30 @@
icon_state = "dr_gibb_glass" icon_state = "dr_gibb_glass"
name = "Glass of welder fuel" name = "Glass of welder fuel"
desc = "Unless you are an industrial tool, this is probably not safe for consumption." 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 else
icon_state ="glass_brown" icon_state ="glass_brown"
name = "Glass of ..what?" name = "Glass of ..what?"

View File

@@ -1566,6 +1566,26 @@
reagents.add_reagent("nutriment", 2) reagents.add_reagent("nutriment", 2)
bitesize = 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 /obj/item/weapon/reagent_containers/food/snacks/pastatomato
name = "Spagetti" name = "Spagetti"
desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"

View File

@@ -232,6 +232,17 @@
reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 2, 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 /obj/item/weapon/reagent_containers/food/snacks/grown/glowberries
seed = "/obj/item/seeds/glowberryseed" seed = "/obj/item/seeds/glowberryseed"
name = "bunch of glow-berries" name = "bunch of glow-berries"
@@ -648,6 +659,18 @@
reagents.add_reagent("nutriment", 1+round((potency / 25), 1)) reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
bitesize = 1+round(reagents.total_volume / 2, 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 /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod
seed = "/obj/item/seeds/kudzuseed" seed = "/obj/item/seeds/kudzuseed"
name = "kudzu pod" name = "kudzu pod"

View File

@@ -534,6 +534,10 @@
proc/move() proc/move()
var/obj/structure/disposalpipe/last var/obj/structure/disposalpipe/last
while(active) 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 if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
active = 0 active = 0
// find the fat guys // find the fat guys

View File

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

View File

@@ -29,6 +29,7 @@ leonheart11: Johann Erzatz: /obj/item/weapon/reagent_containers/food/drinks/fla
lexusjjss: Lexus Langg: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask lexusjjss: 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 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 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 mangled: Li Matsuda: /obj/item/weapon/lighter/zippo/fluff/li_matsuda_1
maximumbob: Maurice Bedford: /obj/item/fluff/maurice_bedford_1 maximumbob: Maurice Bedford: /obj/item/fluff/maurice_bedford_1
mcgulliver: Wox Derax: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/lithiumflask 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 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/weapon/card/id/fluff/ian_colm_1
roaper: Ian Colm: /obj/item/clothing/glasses/welding/fluff/ian_colm_2 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: 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 searif: Ara Al-Jazari: /obj/item/clothing/under/rank/bartender/fluff/classy
serithi: Altair An-Nasaqan: /obj/item/clothing/tie/fluff/altair_locket 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: Cado Keppel: /obj/item/weapon/fluff/cado_keppel_1
sparklysheep: Uzenwa Sissra: /obj/item/clothing/glasses/fluff/uzenwa_sissra_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 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 staghorn: Mara Kilpatrick: /obj/item/clothing/mask/mara_kilpatrick_1
tastyfish: Cindy Robertson: /obj/item/weapon/wrapping_paper tastyfish: Cindy Robertson: /obj/item/weapon/wrapping_paper
thatoneguy: Hugo Cinderbatch: /obj/item/weapon/fluff/hugo_cinderbacth_1 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 whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
whitewolf41: Jeremy Wolf: /obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1 whitewolf41: Jeremy Wolf: /obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1
zuhayr: Jane Doe: /obj/item/clothing/under/fluff/jane_sidsuit zuhayr: Jane Doe: /obj/item/clothing/under/fluff/jane_sidsuit
mordeth221: Sven Fjeltson: /obj/item/weapon/fluff/sven_fjeltson_1

View File

@@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <html>
<head> <head>
<title>Baystation 12 Changelog</title> <title>Baystation 12 Changelog</title>
@@ -39,7 +39,7 @@ Header Section
<table align='center' class="top"> <table align='center' class="top">
<tr> <tr>
<td valign='top'> <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>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>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> <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 (ie. code improvements for expandability, etc.) should not be listed here. They
should be listed in the changelog upon commit though. Thanks. --> 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"> <div class="commit sansserif">
<h2 class="date">May 14th 2013</h2> <h2 class="date">24th April 2013</h2>
<h3 class="author">Cael_Aislinn updated:</h3> <h3 class="author">NerdyBoy1104 updated:</h3>
<ul class="changes bgimages16"> <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="rscadd">New Botany additions: Rice and Plastellium. New sheet material: Plastic.</li>
<li class="tweak">Some useability issues with xenoarchaeology tools have been resolved, and the transit pods cycle automatically now.</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> </ul>
</div> </div>
@@ -76,15 +109,6 @@ should be listed in the changelog upon commit though. Thanks. -->
</ul> </ul>
</div> </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"> <div class="commit sansserif">
<h2 class="date">17 April 2013</h2> <h2 class="date">17 April 2013</h2>
<h3 class="author">SkyMarshal updated:</h3> <h3 class="author">SkyMarshal updated:</h3>
@@ -100,6 +124,47 @@ should be listed in the changelog upon commit though. Thanks. -->
</ul> </ul>
</div> </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"> <div class="commit sansserif">
<h2 class="date">11 April 2013</h2> <h2 class="date">11 April 2013</h2>
<h3 class="author">SkyMarshal updated:</h3> <h3 class="author">SkyMarshal updated:</h3>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

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