diff --git a/LICENSE.txt b/COPYING
similarity index 91%
rename from LICENSE.txt
rename to COPYING
index 419cc18b370..5005fcd90f0 100644
--- a/LICENSE.txt
+++ b/COPYING
@@ -1,5 +1,5 @@
Baystation12
-Copyright (C) 2010-2012 Baystation12 and tgstation13.
+Copyright (C) 2010-2013 Baystation12 and tgstation13.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -12,4 +12,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program. If not, see .
\ No newline at end of file
+along with this program. If not, see .
diff --git a/README.txt b/README.md
similarity index 73%
rename from README.txt
rename to README.md
index 30c2d952667..d016900cc37 100644
--- a/README.txt
+++ b/README.md
@@ -1,12 +1,10 @@
-baystation12
+# baystation12
-Website: http://baystation12.net/
-Code: http://github.com/Baystation12/Baystation12/
-IRC: irc://irc.sorcery.net/bs12
+[Website](http://baystation12.net/) - [Code](http://github.com/Baystation12/Baystation12/) - [IRC](http://baystation12.net/forums/viewtopic.php?f=12&t=5088)
-================================================================================
-INSTALLATION
-================================================================================
+---
+
+### INSTALLATION
First-time installation should be fairly straightforward. First, you'll need
BYOND installed. You can get it from http://www.byond.com/. Once you've done
@@ -16,9 +14,9 @@ Open baystation12.dme by double-clicking it, open the Build menu, and click
compile. This'll take a little while, and if everything's done right you'll get
a message like this:
-saving baystation12.dmb (DEBUG mode)
-
-baystation12.dmb - 0 errors, 0 warnings
+ saving baystation12.dmb (DEBUG mode)
+
+ baystation12.dmb - 0 errors, 0 warnings
If you see any errors or warnings, something has gone wrong - possibly a corrupt
download or the files extracted wrong.
@@ -38,7 +36,7 @@ You'll also want to edit admins.txt to remove the default admins and add your
own. "Game Master" is the highest level of access, and the other recommended
admin level for now is "Game Admin". The format is:
-byondkey - Rank
+ byondkey - Rank
where the BYOND key must be in lowercase and the admin rank must be properly
capitalised. There are a bunch more admin ranks, but these two should be
@@ -46,7 +44,7 @@ enough for most servers, assuming you have trustworthy admins.
Additionally, you can set up moderators in moderators.txt, with this format:
-byondkey
+ byondkey
Moderators have access to player notes and a few other low-level commands.
@@ -55,9 +53,9 @@ compiled baystation12.dmb file. Make sure to set the port to the one you
specified in the config.txt, and set the Security box to 'Trusted'. Then press
GO and the server should start up and be ready to join.
-================================================================================
-UPDATING
-================================================================================
+---
+
+### UPDATING
To update an existing installation, first back up your /config and /data folders
as these store your server configuration, player preferences and banlist.
@@ -68,19 +66,19 @@ install, overwriting when prompted except if we've specified otherwise, and
recompile the game. Once you start the server up again, you should be running
the new version.
-================================================================================
-SQL Setup
-================================================================================
+---
+
+### SQL Setup
The SQL backend for the library and stats tracking requires a
MySQL server. Your server details go in /config/dbconfig.txt, and the SQL
schema is in /SQL/tgstation_schema.sql. More detailed setup instructions are
coming soon, for now ask in our IRC channel.
-================================================================================
-IRC Bot Setup
-================================================================================
+---
-Included in the SVN is an IRC bot capable of relaying adminhelps to a specified
+### IRC Bot Setup
+
+Included in the repo is an IRC bot capable of relaying adminhelps to a specified
IRC channel/server (thanks to Skibiliano). Instructions for bot setup are
-included in the /bot/ folder along with the bot/relay script itself.
\ No newline at end of file
+included in the /bot/ folder along with the bot/relay script itself.
diff --git a/baystation12.dme b/baystation12.dme
index aaa28644336..57a993230e8 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -35,6 +35,7 @@
#define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf"
#define FILE_DIR "icons/vending_icons"
+#define FILE_DIR "icons/xenoarch_icons"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience"
@@ -1291,6 +1292,7 @@
#include "code\WorkInProgress\Mini\ATM.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Ported\policetape.dm"
+#include "code\WorkInProgress\SkyMarshal\officer_stuff.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
#include "code\WorkInProgress\Susan\susan_desert_turfs.dm"
#include "code\WorkInProgress\virus2\analyser.dm"
diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
index 26dc82033ad..1425ed8d776 100644
--- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
@@ -1,6 +1,14 @@
//node1, air1, network1 correspond to input
//node2, air2, network2 correspond to output
+#define CIRCULATOR_MIN_PRESSURE 10 //KPA to move the mechanism
+#define CIRCULATOR_VOLUME 100 //Litres
+#define CIRCULATOR_EFFICIENCY 0.65 //Out of 1.
+
+#define TURBINE_EFFICIENCY 0.1 //Uses more power than is generated.
+#define TURBINE_PRESSURE_DIFFERENCE 20 //Simulates a 20KPa difference
+#define GENRATE 800
+
/obj/machinery/atmospherics/binary/circulator
name = "circulator/heat exchanger"
desc = "A gas circulator pump and heat exchanger."
@@ -11,13 +19,19 @@
//var/side = 1 // 1=left 2=right
var/status = 0
+ var/datum/gas_mixture/gas_contents
var/last_pressure_delta = 0
+ var/turbine_pumping = 0 //For when there is not enough pressure difference and we need to induce one or something.
+ var/last_power_generation = 0
density = 1
/obj/machinery/atmospherics/binary/circulator/New()
..()
- desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
+ desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
+ gas_contents = new
+ gas_contents.volume = CIRCULATOR_VOLUME
+
/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air()
if(!anchored)
@@ -25,40 +39,69 @@
var/output_starting_pressure = air2.return_pressure()
var/input_starting_pressure = air1.return_pressure()
+ var/internal_gas_pressure = gas_contents.return_pressure()
- if(output_starting_pressure >= input_starting_pressure-10)
- //Need at least 10 KPa difference to overcome friction in the mechanism
- last_pressure_delta = 0
- return null
+ var/intake_pressure_delta = input_starting_pressure - internal_gas_pressure
+ var/output_pressure_delta = internal_gas_pressure - output_starting_pressure
+
+ var/pressure_delta = max(intake_pressure_delta, output_pressure_delta, 0)
+
+ last_power_generation = 0
+ //If the turbine is running, we need to consider that.
+ if(turbine_pumping)
+ //Make it use powah
+ if(pressure_delta < TURBINE_PRESSURE_DIFFERENCE)
+ last_power_generation = (pressure_delta - TURBINE_PRESSURE_DIFFERENCE)*(1/TURBINE_EFFICIENCY)
+ pressure_delta = TURBINE_PRESSURE_DIFFERENCE
+
+ //If the force is already above what the turbine can do, shut it off and generate power instead!
+ else
+ turbine_pumping = 0
//Calculate necessary moles to transfer using PV = nRT
- if(air1.temperature>0)
- var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2
+ if(air1.temperature > 0)
- var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
+ var/transfer_moles = pressure_delta*gas_contents.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
last_pressure_delta = pressure_delta
- //world << "pressure_delta = [pressure_delta]; transfer_moles = [transfer_moles];"
-
//Actually transfer the gas
- var/datum/gas_mixture/removed = air1.remove(transfer_moles)
+ //Internal to output.
+ air2.merge(gas_contents.remove(transfer_moles))
+ //Intake to internal.
+ gas_contents.merge(air1.remove(transfer_moles))
+
+ //Update the gas networks.
if(network1)
network1.update = 1
if(network2)
network2.update = 1
- return removed
-
else
last_pressure_delta = 0
+ //Needs at least 10 KPa difference to move the mechanism and make power
+ if(pressure_delta < CIRCULATOR_MIN_PRESSURE)
+ last_pressure_delta = 0
+
+ last_power_generation += pressure_delta*CIRCULATOR_EFFICIENCY
+
+ return gas_contents
+
+
+
+//Used by the TEG to know how much power to use/produce.
+/obj/machinery/atmospherics/binary/circulator/proc/ReturnPowerGeneration()
+ return GENRATE*last_power_generation
+
+
/obj/machinery/atmospherics/binary/circulator/process()
..()
update_icon()
+
/obj/machinery/atmospherics/binary/circulator/update_icon()
if(stat & (BROKEN|NOPOWER) || !anchored)
icon_state = "circ-p"
@@ -105,9 +148,9 @@
else
..()
-/obj/machinery/atmospherics/binary/circulator/verb/rotate()
+/obj/machinery/atmospherics/binary/circulator/verb/rotate_clockwise()
set category = "Object"
- set name = "Rotate Circulator"
+ set name = "Rotate Circulator (Clockwise)"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
@@ -115,3 +158,15 @@
src.dir = turn(src.dir, 90)
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
+
+
+/obj/machinery/atmospherics/binary/circulator/verb/rotate_anticlockwise()
+ set category = "Object"
+ set name = "Rotate Circulator (Counterclockwise)"
+ set src in view(1)
+
+ if (usr.stat || usr.restrained() || anchored)
+ return
+
+ src.dir = turn(src.dir, -90)
+ desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
\ No newline at end of file
diff --git a/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm b/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm
index 590ee66b2f0..4d4c28d17ad 100644
--- a/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Economy/EFTPOS.dm
@@ -101,7 +101,11 @@
if("change_code")
var/attempt_code = input("Re-enter the current EFTPOS access code", "Confirm old EFTPOS code") as num
if(attempt_code == access_code)
- access_code = input("Enter a new access code for this device", "Enter new EFTPOS code") as num
+ var/trycode = input("Enter a new access code for this device (4-6 digits, numbers only)", "Enter new EFTPOS code") as num
+ if(trycode >= 1000 && trycode <= 999999)
+ access_code = trycode
+ else
+ alert("That is not a valid code!")
print_reference()
else
usr << "\icon[src]Incorrect code entered."
@@ -124,7 +128,11 @@
if("trans_purpose")
transaction_purpose = input("Enter reason for EFTPOS transaction", "Transaction purpose")
if("trans_value")
- transaction_amount = input("Enter amount for EFTPOS transaction", "Transaction amount") as num
+ var/try_num = input("Enter amount for EFTPOS transaction", "Transaction amount") as num
+ if(try_num < 0)
+ alert("That is not a valid amount!")
+ else
+ transaction_amount = try_num
if("toggle_lock")
if(transaction_locked)
var/attempt_code = input("Enter EFTPOS access code", "Reset Transaction") as num
diff --git a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm
index d03e8f366fa..8463f45e937 100644
--- a/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm
+++ b/code/WorkInProgress/Cael_Aislinn/ShieldGen/shield_gen.dm
@@ -150,11 +150,10 @@
var/strength_change = target_field_strength - E.strength
if(strength_change > stored_renwicks)
strength_change = stored_renwicks
- if(E.strength >= 1)
- E.Strengthen(strength_change)
- else if(E.strength < 0)
+ if(E.strength < 0)
E.strength = 0
- E.Strengthen(0.1)
+ else
+ E.Strengthen(strength_change)
stored_renwicks -= strength_change
diff --git a/code/WorkInProgress/Mini/ATM.dm b/code/WorkInProgress/Mini/ATM.dm
index 9578c3a2a3d..15aa916efe7 100644
--- a/code/WorkInProgress/Mini/ATM.dm
+++ b/code/WorkInProgress/Mini/ATM.dm
@@ -206,10 +206,12 @@ log transactions
switch(href_list["choice"])
if("transfer")
if(authenticated_account && linked_db)
- var/target_account_number = text2num(href_list["target_acc_number"])
var/transfer_amount = text2num(href_list["funds_amount"])
- var/transfer_purpose = href_list["purpose"]
- if(transfer_amount <= authenticated_account.money)
+ if(transfer_amount <= 0)
+ alert("That is not a valid amount.")
+ else if(transfer_amount <= authenticated_account.money)
+ var/target_account_number = text2num(href_list["target_acc_number"])
+ var/transfer_purpose = href_list["purpose"]
if(linked_db.charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount))
usr << "\icon[src]Funds transfer successful."
authenticated_account.money -= transfer_amount
@@ -284,7 +286,9 @@ log transactions
previous_account_number = tried_account_num
if("withdrawal")
var/amount = max(text2num(href_list["funds_amount"]),0)
- if(authenticated_account && amount > 0)
+ if(amount <= 0)
+ alert("That is not a valid amount.")
+ else if(authenticated_account && amount > 0)
if(amount <= authenticated_account.money)
playsound(src, 'chime.ogg', 50, 1)
diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm
index b7c80761a95..37282a90ecc 100644
--- a/code/WorkInProgress/Mini/atmos_control.dm
+++ b/code/WorkInProgress/Mini/atmos_control.dm
@@ -39,9 +39,9 @@
dat += ""
switch(max(alarm.danger_level, alarm.alarm_area.atmosalm))
if (0)
- dat += ""
+ dat += ""
if (1)
- dat += ""
+ dat += ""
if (2)
dat += ""
dat += "[alarm]
"
@@ -302,8 +302,8 @@ Nitrous Oxide
AALARM_MODE_REPLACEMENT = "REPLACE AIR",
AALARM_MODE_PANIC = "PANIC",
AALARM_MODE_CYCLE = "CYCLE",
- AALARM_MODE_FILL = "FILL",
- )
+ AALARM_MODE_FILL = "FILL",\
+ AALARM_MODE_OFF = "OFFF",)
for (var/m=1,m<=modes.len,m++)
if (current.mode==m)
output += {"
[modes[m]] (selected)"}
diff --git a/code/WorkInProgress/SkyMarshal/officer_stuff.dm b/code/WorkInProgress/SkyMarshal/officer_stuff.dm
new file mode 100644
index 00000000000..7741a9aa36a
--- /dev/null
+++ b/code/WorkInProgress/SkyMarshal/officer_stuff.dm
@@ -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—a silver kite shield with an engraved sword—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—a cobalt kite shield with an engraved sword—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
\ No newline at end of file
diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm
index 3224b501776..0394c6eff79 100644
--- a/code/ZAS/Functions.dm
+++ b/code/ZAS/Functions.dm
@@ -63,6 +63,10 @@ proc/FloodFill(turf/simulated/start)
proc/ZMerge(zone/A,zone/B)
+
+ if(!istype(A) || !istype(B))
+ return
+
//Merges two zones so that they are one.
var
a_size = A.air.group_multiplier
diff --git a/code/ZAS/Plasma.dm b/code/ZAS/Plasma.dm
index efd7e211748..aa444628d9b 100644
--- a/code/ZAS/Plasma.dm
+++ b/code/ZAS/Plasma.dm
@@ -155,6 +155,8 @@ turf/Entered(obj/item/I)
//Items that are in plasma, but not on a mob, can still be contaminated.
if(istype(I) && vsc.plc.CLOTH_CONTAMINATION)
var/datum/gas_mixture/env = return_air(1)
+ if(!env)
+ return
if(env.toxins > MOLES_PLASMA_VISIBLE + 1)
if(I.can_contaminate())
I.contaminate()
\ No newline at end of file
diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm
index 14f35c3e45c..69915279a89 100644
--- a/code/controllers/voting.dm
+++ b/code/controllers/voting.dm
@@ -132,6 +132,9 @@ datum/controller/vote
restart = 1
else
master_mode = .
+ if(!going)
+ going = 1
+ world << "The round will start soon."
if("crew_transfer")
if(. == "Initiate Crew Transfer")
init_shift_change(null, 1)
@@ -194,8 +197,14 @@ datum/controller/vote
var/text = "[capitalize(mode)] vote started by [initiator]."
if(mode == "custom")
text += "\n[question]"
+
log_vote(text)
world << "[text]\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote."
+ world << sound('weapons/smg_empty_alarm.ogg')
+ if(mode == "gamemode" && going)
+ going = 0
+ world << "Round start has been delayed."
+
time_remaining = round(config.vote_period/10)
return 1
return 0
@@ -296,4 +305,4 @@ datum/controller/vote
set name = "Vote"
if(vote)
- src << browse(vote.interface(client),"window=vote;can_close=0")
\ No newline at end of file
+ src << browse(vote.interface(client),"window=vote;can_close=0")
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index a60e2f0e160..6c9e8c6902f 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1139,6 +1139,10 @@ proc/process_ghost_teleport_locs()
name = "\improper Vacant Office"
icon_state = "security"
+/area/security/vacantoffice2
+ name = "\improper Vacant Office"
+ icon_state = "security"
+
/area/quartermaster
name = "\improper Quartermasters"
icon_state = "quart"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index b2972d2ff2a..f8b743eb701 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -107,7 +107,7 @@ var/list/sacrificed = list()
M.visible_message("\red [M] writhes in pain as the markings below him glow a bloody red.", \
"\red AAAAAAHHHH!.", \
"\red You hear an anguished scream.")
- if(is_convertable_to_cult(M.mind))
+ if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, "cultist"))//putting jobban check here because is_convertable uses mind as argument
ticker.mode.add_cultist(M.mind)
M.mind.special_role = "Cultist"
M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
@@ -370,6 +370,8 @@ var/list/sacrificed = list()
break
if(!ghost)
return this_rune.fizzle()
+ if(jobban_isbanned(ghost, "cultist"))
+ return this_rune.fizzle()
usr.say("Gal'h'rfikk harfrandid mud[pick("'","`")]gib!")
var/mob/living/carbon/human/dummy/D = new(this_rune.loc)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 94b9c03811f..10c0c3f6318 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -205,27 +205,31 @@ Implants;
/datum/game_mode/proc/send_intercept()
var/intercepttext = "Cent. Com. Update Requested status information:
"
- intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:"
+ intercepttext += " In case you have misplaced your copy, attached is a list of personnel whom reliable sources™ suspect may be affiliated with the Syndicate:
"
- var/list/possible_modes = list()
- possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
- //possible_modes -= "[ticker.mode]"
- var/number = pick(2, 3)
- var/i = 0
- for(i = 0, i < number, i++)
- possible_modes.Remove(pick(possible_modes))
- if(!intercept_hacked)
- possible_modes.Insert(rand(possible_modes.len), "[ticker.mode]")
-
- shuffle(possible_modes)
-
- var/datum/intercept_text/i_text = new /datum/intercept_text
- for(var/A in possible_modes)
- if(modePlayer.len == 0)
- intercepttext += i_text.build(A)
- else
- intercepttext += i_text.build(A, pick(modePlayer))
+ var/list/suspects = list()
+ for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind)
+ // NT relation option
+ var/special_role = man.mind.special_role
+ if(man.client.prefs.nanotrasen_relation == "Opposed" && prob(50) || \
+ man.client.prefs.nanotrasen_relation == "Skeptical" && prob(20))
+ suspects += man
+ // Antags
+ else if(special_role == "traitor" && prob(20) || \
+ special_role == "Changeling" && prob(40) || \
+ special_role == "Cultist" && prob(10) || \
+ special_role == "Head Revolutionary" && prob(10))
+ suspects += man
+ // Some poor people who were just in the wrong place at the wrong time..
+ else if(prob(5))
+ suspects += man
+ for(var/mob/M in suspects)
+ switch(rand(1, 100))
+ if(1 to 50)
+ intercepttext += "Someone with the job of [M.mind.assigned_role]
"
+ else
+ intercepttext += "[M.name], the [M.mind.assigned_role]
"
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index f705a6cfc6d..38cb9d10be7 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -24,7 +24,6 @@
U.hastie = new /obj/item/clothing/tie/medal/gold/captain(U)
H.equip_to_slot_or_del(U, slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/pda/captain(H), slot_belt)
- //H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/captain(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index ba17a2bb4b9..1dea42fe849 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -389,6 +389,13 @@ var/global/datum/controller/occupations/job_master
spawnId(H, rank, alt_title)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_ears)
+
+ //Gives glasses to the vision impaired
+ if(H.disabilities & NEARSIGHTED)
+ var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses)
+ if(equipped != 1)
+ var/obj/item/clothing/glasses/G = H.glasses
+ G.prescription = 1
// H.update_icons()
return 1
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index ea06ad87299..cdfde8afaf2 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -33,6 +33,7 @@
#define AALARM_MODE_PANIC 3 //constantly sucks all air
#define AALARM_MODE_CYCLE 4 //sucks off all air, then refill and switches to scrubbing
#define AALARM_MODE_FILL 5 //emergency fill
+#define AALARM_MODE_OFF 6 //Shuts it all down.
#define AALARM_SCREEN_MAIN 1
#define AALARM_SCREEN_VENT 2
@@ -131,7 +132,7 @@
return
var/turf/simulated/location = loc
- ASSERT(istype(location))
+ if(!istype(location)) return//returns if loc is not simulated
var/datum/gas_mixture/environment = location.return_air()
var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
@@ -183,7 +184,7 @@
if(environment.temperature > target_temperature)
gas.temperature -= energy_used/heat_capacity
else
- gas.temperature -= energy_used/heat_capacity
+ gas.temperature += energy_used/heat_capacity
environment.merge(gas)
@@ -238,9 +239,9 @@
return 0
proc/get_danger_level(var/current_value, var/list/danger_levels)
- if(current_value >= danger_levels[4] || current_value <= danger_levels[1])
+ if((current_value >= danger_levels[4] && danger_levels[4] > 0) || current_value <= danger_levels[1])
return 2
- if(current_value >= danger_levels[3] || current_value <= danger_levels[2])
+ if((current_value >= danger_levels[3] && danger_levels[3] > 0) || current_value <= danger_levels[2])
return 1
return 0
@@ -339,9 +340,9 @@
switch(mode)
if(AALARM_MODE_SCRUBBING)
for(var/device_id in alarm_area.air_scrub_names)
- send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "setting"= 1, "scrubbing"= 1, "panic_siphon"= 0) )
+ send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "scrubbing"= 1, "panic_siphon"= 0) )
for(var/device_id in alarm_area.air_vent_names)
- send_signal(device_id, list("power"= 1, "checks"= 1, "setting"= 1, "set_external_pressure"= target_pressure) )
+ send_signal(device_id, list("power"= 1, "checks"= 1, "set_external_pressure"= target_pressure) )
if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE)
for(var/device_id in alarm_area.air_scrub_names)
@@ -351,15 +352,21 @@
if(AALARM_MODE_REPLACEMENT)
for(var/device_id in alarm_area.air_scrub_names)
- send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "setting"= 3, "scrubbing"= 1, "panic_siphon"= 0) )
+ send_signal(device_id, list("power"= 1, "panic_siphon"= 1) )
for(var/device_id in alarm_area.air_vent_names)
- send_signal(device_id, list("power"= 1, "checks"= 1, "setting"= 3, "set_external_pressure"= target_pressure) )
+ send_signal(device_id, list("power"= 1, "checks"= 1, "set_external_pressure"= target_pressure) )
if(AALARM_MODE_FILL)
for(var/device_id in alarm_area.air_scrub_names)
send_signal(device_id, list("power"= 0) )
for(var/device_id in alarm_area.air_vent_names)
- send_signal(device_id, list("power"= 1, "checks"= 1, "setting"= 3, "set_external_pressure"= target_pressure) )
+ send_signal(device_id, list("power"= 1, "checks"= 1, "set_external_pressure"= target_pressure) )
+
+ if(AALARM_MODE_OFF)
+ for(var/device_id in alarm_area.air_scrub_names)
+ send_signal(device_id, list("power"= 0) )
+ for(var/device_id in alarm_area.air_vent_names)
+ send_signal(device_id, list("power"= 0) )
proc/apply_danger_level(var/new_danger_level)
alarm_area.atmosalm = new_danger_level
@@ -817,7 +824,8 @@ Toxins: [plasma_percent]%
AALARM_MODE_REPLACEMENT = "REPLACE AIR",\
AALARM_MODE_PANIC = "PANIC",\
AALARM_MODE_CYCLE = "CYCLE",\
- AALARM_MODE_FILL = "FILL",)
+ AALARM_MODE_FILL = "FILL",\
+ AALARM_MODE_OFF = "OFFF",)
for (var/m=1,m<=modes.len,m++)
if (mode==m)
output += "[modes[m]] (selected)"
diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm
index 3e970a580c6..47b27ac54bd 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -225,7 +225,6 @@ text("[src.oddbutton ? "Yes" : "No"
next_dest_loc = closest_loc
if (next_dest_loc)
src.patrol_path = AStar(src.loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=null)
- src.patrol_path = reverselist(src.patrol_path)
else
patrol_move()
@@ -235,7 +234,6 @@ text("[src.oddbutton ? "Yes" : "No"
spawn(0)
if(!src || !target) return
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 0, 30)
- src.path = reverselist(src.path)
if(src.path.len == 0)
src.oldtarget = src.target
src.target = null
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index a833c8f10bd..30aa8a4e64d 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -615,7 +615,6 @@ Auto Patrol: []"},
// given an optional turf to avoid
/obj/machinery/bot/ed209/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
- src.path = reverselist(src.path)
// look for a criminal in view of the bot
diff --git a/code/game/machinery/bots/farmbot.dm b/code/game/machinery/bots/farmbot.dm
index ef582351570..5881f08ce28 100644
--- a/code/game/machinery/bots/farmbot.dm
+++ b/code/game/machinery/bots/farmbot.dm
@@ -357,7 +357,6 @@
var/turf/dest = get_step_towards(target,src) //Can't pathfind to a tray, as it is dense, so pathfind to the spot next to the tray
src.path = AStar(src.loc, dest, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
- src.path = reverselist(src.path)
if(src.path.len == 0)
for ( var/turf/spot in orange(1,target) ) //The closest one is unpathable, try the other spots
if ( spot == dest ) //We already tried this spot
diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm
index 986728f5c66..bb984a1787b 100644
--- a/code/game/machinery/bots/floorbot.dm
+++ b/code/game/machinery/bots/floorbot.dm
@@ -244,7 +244,6 @@
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30)
else
src.path = AStar(src.loc, src.target, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30)
- src.path = reverselist(src.path)
if(src.path.len == 0)
src.oldtarget = src.target
src.target = null
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index df7b8b0ff81..71cccfdc3ee 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -299,7 +299,6 @@
if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
spawn(0)
src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
- src.path = reverselist(src.path)
if(src.path.len == 0)
src.oldpatient = src.patient
src.patient = null
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index c21e2554899..3496b6723a7 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -706,7 +706,8 @@
// given an optional turf to avoid
/obj/machinery/bot/mulebot/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, id=botcard, exclude=avoid)
- src.path = reverselist(src.path)
+ if(!src.path)
+ src.path = list()
// sets the current destination
diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index fb599c35ccb..19a43f41cc7 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -583,7 +583,6 @@ Auto Patrol: []"},
// given an optional turf to avoid
/obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null)
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
- src.path = reverselist(src.path)
// look for a criminal in view of the bot
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 45dc22b7aa3..84bff5cffc4 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -111,13 +111,14 @@
/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))
- 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
+ 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
+ ..()
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 6c3814a8010..dd4d2662a7d 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -556,6 +556,7 @@
name = "toy phazon"
desc = "Mini-Mecha action figure! Collect them all! 11/11."
icon_state = "phazonprize"
+
/obj/item/toy/katana
name = "replica katana"
desc = "Woefully underpowered in D20."
@@ -575,4 +576,4 @@
desc = "This baby looks almost real. Wait, did it just burp?"
force = 5
w_class = 4.0
- slot_flags = SLOT_BACK
+ slot_flags = SLOT_BACK
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index a5874f09855..1369bb15759 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -106,6 +106,7 @@
can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/dice")
allow_quick_gather = 1
use_to_pickup = 1
+ storage_slots = 14
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 3c359125002..4342e231403 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -19,10 +19,12 @@
sleep(2)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/that(src)
+ new /obj/item/clothing/head/hairflower
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender(src)
+ new /obj/item/clothing/under/dress/dress_saloon
new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/shoes/black(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 509d9c88006..f6ad799900d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -16,7 +16,7 @@
else
new /obj/item/weapon/storage/backpack/satchel_cap(src)
new /obj/item/clothing/suit/captunic(src)
- new /obj/item/clothing/suit/captunic/trek(src)
+ new /obj/item/clothing/suit/captunic/capjacket(src)
new /obj/item/clothing/head/helmet/cap(src)
new /obj/item/clothing/under/rank/captain(src)
new /obj/item/clothing/suit/armor/vest(src)
@@ -72,16 +72,15 @@
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/dress/dress_resource(src)
new /obj/item/clothing/under/lawyer/oldman(src)
- new /obj/item/clothing/under/suit_jacket/really_black(src)
new /obj/item/clothing/shoes/brown(src)
- new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/leather(src)
+ new /obj/item/clothing/shoes/white(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 1e77c826b5b..dd3bb5a6b33 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -107,6 +107,19 @@
new /obj/item/clothing/shoes/black(src)
return
+/obj/structure/closet/wardrobe/xenos
+ name = "xenos wardrobe"
+ icon_state = "green"
+ icon_closed = "green"
+
+/obj/structure/closet/wardrobe/xenos/New()
+ new /obj/item/clothing/suit/unathi/mantle(src)
+ new /obj/item/clothing/suit/unathi/robe(src)
+ new /obj/item/clothing/shoes/sandal(src)
+ new /obj/item/clothing/shoes/sandal(src)
+ new /obj/item/clothing/shoes/sandal(src)
+ return
+
/obj/structure/closet/wardrobe/orange
name = "prison wardrobe"
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index eebe9fb343c..83df96a7280 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -89,9 +89,16 @@
/obj/structure/lamarr/proc/Break()
if(occupied)
- var/obj/item/clothing/mask/facehugger/A = new /obj/item/clothing/mask/facehugger( src.loc )
- A.sterile = 1
- A.name = "Lamarr"
+ new /obj/item/clothing/mask/facehugger/lamarr(src.loc)
occupied = 0
update_icon()
+ return
+
+/obj/item/clothing/mask/facehugger/lamarr
+ name = "Lamarr"
+ desc = "The worst she might do is attempt to... couple with your head."//hope we don't get sued over a harmless reference, rite?
+ sterile = 1
+ gender = FEMALE
+
+/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled
return
\ No newline at end of file
diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm
index 5e85802b1fa..54630d3c4a3 100644
--- a/code/game/objects/structures/transit_tubes.dm
+++ b/code/game/objects/structures/transit_tubes.dm
@@ -150,6 +150,17 @@ obj/structure/ex_act(severity)
pod_moving = 1
close_animation()
sleep(CLOSE_DURATION + 2)
+
+ //reverse directions for automated cycling
+ var/turf/next_loc = get_step(loc, pod.dir)
+ var/obj/structure/transit_tube/nexttube
+ for(var/obj/structure/transit_tube/tube in next_loc)
+ if(tube.has_entrance(pod.dir))
+ nexttube = tube
+ break
+ if(!nexttube)
+ pod.dir = turn(pod.dir, 180)
+
if(icon_state == "closed" && pod)
pod.follow_tube()
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 9064b51c930..28791229725 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -105,12 +105,12 @@
if(reinf) new /obj/item/stack/rods(loc)
del(src)
else if (usr.a_intent == "hurt")
- playsound(src.loc, 'Glassknock.ogg', 80, 1)
+ playsound(src.loc, 'glassknock.ogg', 80, 1)
usr.visible_message("\red [usr.name] bangs against the [src.name]!", \
"\red You bang against the [src.name]!", \
"You hear a banging sound.")
else
- playsound(src.loc, 'Glassknock.ogg', 80, 1)
+ playsound(src.loc, 'glassknock.ogg', 80, 1)
usr.visible_message("[usr.name] knocks on the [src.name].", \
"You knock on the [src.name].", \
"You hear a knocking sound.")
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 6f6abd1d977..abcb3d52b7b 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -133,7 +133,8 @@ var/list/admin_verbs_debug = list(
/client/proc/air_report,
/client/proc/reload_admins,
/client/proc/restart_controller,
- /client/proc/enable_debug_verbs
+ /client/proc/enable_debug_verbs,
+ /client/proc/callproc
)
var/list/admin_verbs_possess = list(
/proc/possess,
@@ -720,4 +721,4 @@ var/list/admin_verbs_mod = list(
if (prefs.toggles & CHAT_ATTACKLOGS)
usr << "You now will get attack log messages"
else
- usr << "You now won't get attack log messages"
\ No newline at end of file
+ usr << "You now won't get attack log messages"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 7dd3407ce79..292327ca274 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -10,7 +10,7 @@
switch(href_list["makeAntag"])
if("1")
log_admin("[key_name(usr)] has spawned a traitor.")
- if(!src.makeTratiors())
+ if(!src.makeTraitors())
usr << "\red Unfortunatly there were no candidates available"
if("2")
log_admin("[key_name(usr)] has spawned a changeling.")
diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm
index 6339d3c0113..43f6d0b7931 100644
--- a/code/modules/admin/verbs/BrokenInhands.dm
+++ b/code/modules/admin/verbs/BrokenInhands.dm
@@ -13,24 +13,24 @@
var/list/istates = J.IconStates()
if(!Lstates.Find(O.icon_state) && !Lstates.Find(O.item_state))
if(O.icon_state)
- text += "[O.type] WANTS IN LEFT HAND CALLED\n\"[O.icon_state]\".\n"
+ text += "[O.type] is missing left hand icon called \"[O.icon_state]\".\n"
if(!Rstates.Find(O.icon_state) && !Rstates.Find(O.item_state))
if(O.icon_state)
- text += "[O.type] WANTS IN RIGHT HAND CALLED\n\"[O.icon_state]\".\n"
+ text += "[O.type] is missing right hand icon called \"[O.icon_state]\".\n"
if(O.icon_state)
if(!istates.Find(O.icon_state))
- text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.icon_state]\" IN \"[O.icon]\"\n"
- if(O.item_state)
- if(!istates.Find(O.item_state))
- text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n"
- text+="\n"
+ text += "[O.type] is missing normal icon called \"[O.icon_state]\" in \"[O.icon]\".\n"
+ //if(O.item_state)
+ // if(!istates.Find(O.item_state))
+ // text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n"
+ //text+="\n"
del(O)
if(text)
var/F = file("broken_icons.txt")
fdel(F)
F << text
- world << "Completely successfully and written to [F]"
+ world << "Completeled successfully and written to [F]"
diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm
index a39ce0fd535..1bda56c6e58 100644
--- a/code/modules/admin/verbs/check_customitem_activity.dm
+++ b/code/modules/admin/verbs/check_customitem_activity.dm
@@ -55,7 +55,7 @@ var/inactive_keys = "None
"
//run a query to get all ckeys inactive for over 2 months
var/list/inactive_ckeys = list()
if(ckeys_with_customitems.len)
- var/DBQuery/query_inactive = dbcon.NewQuery("SELECT ckey, lastseen FROM erro_player WHERE datediff(Now(),lastseen) > 2")
+ var/DBQuery/query_inactive = dbcon.NewQuery("SELECT ckey, lastseen FROM erro_player WHERE datediff(Now(), lastseen) > 60")
query_inactive.Execute()
while(query_inactive.NextRow())
var/cur_ckey = query_inactive.item[1]
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index ef5c02be9a0..9e9c8bf5c6a 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -547,13 +547,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
"assassin",
"death commando",
"syndicate commando",
- "centcom official",
- "centcom commander",
"special ops officer",
"blue wizard",
"red wizard",
"marisa wizard",
"emergency rescue team",
+ "nanotrasen representative",
+ "nanotrasen officer",
+ "nanotrasen captain"
)
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
if (isnull(dresscode))
@@ -742,54 +743,79 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("syndicate commando")
M.equip_syndicate_commando()
- if("centcom official")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store)
+ if("nanotrasen representative")
+ M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/representative(M), slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
+ M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
+ M.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(M), slot_ears)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
- pda.ownjob = "CentCom Review Official"
+ pda.ownjob = "NanoTrasen Navy Representative"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
- M.equip_to_slot_or_del(pda, slot_r_store)
-
- M.equip_to_slot_or_del(new /obj/item/weapon/clipboard(M), slot_l_hand)
+ M.equip_if_possible(pda, slot_r_store)
+ M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
+ M.equip_if_possible(new /obj/item/weapon/clipboard(M), slot_belt)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
W.icon_state = "centcom"
+ W.item_state = "id_inv"
W.access = get_all_accesses()
W.access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer")
- W.assignment = "CentCom Review Official"
+ W.assignment = "NanoTrasen Navy Representative"
W.registered_name = M.real_name
- M.equip_to_slot_or_del(W, slot_wear_id)
+ M.equip_if_possible(W, slot_wear_id)
- if("centcom commander")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/centhat(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
+ if("nanotrasen officer")
+ M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
+ M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
+ M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
+ M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head)
- var/obj/item/weapon/card/id/W = new(M)
+ var/obj/item/device/pda/heads/pda = new(M)
+ pda.owner = M.real_name
+ pda.ownjob = "NanoTrasen Navy Officer"
+ pda.name = "PDA-[M.real_name] ([pda.ownjob])"
+
+ M.equip_if_possible(pda, slot_r_store)
+ M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
+ M.equip_if_possible(new /obj/item/weapon/gun/energy(M), slot_belt)
+
+ var/obj/item/weapon/card/id/centcom/W = new(M)
W.name = "[M.real_name]'s ID Card"
- W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_all_centcom_access()
- W.assignment = "CentCom Commanding Officer"
+ W.assignment = "NanoTrasen Navy Officer"
W.registered_name = M.real_name
- M.equip_to_slot_or_del(W, slot_wear_id)
+ M.equip_if_possible(W, slot_wear_id)
+
+
+ if("nanotrasen captain")
+ M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
+ M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
+ M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
+ M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head)
+
+ var/obj/item/device/pda/heads/pda = new(M)
+ pda.owner = M.real_name
+ pda.ownjob = "NanoTrasen Navy Captain"
+ pda.name = "PDA-[M.real_name] ([pda.ownjob])"
+
+ M.equip_if_possible(pda, slot_r_store)
+ M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store)
+ M.equip_if_possible(new /obj/item/weapon/gun/energy(M), slot_belt)
+
+ var/obj/item/weapon/card/id/centcom/W = new(M)
+ W.name = "[M.real_name]'s ID Card"
+ W.access = get_all_accesses()
+ W.access += get_all_centcom_access()
+ W.assignment = "NanoTrasen Navy Captain"
+ W.registered_name = M.real_name
+ M.equip_if_possible(W, slot_wear_id)
if("emergency rescue team")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 809302387a0..8ef53eb0232 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -11,7 +11,7 @@ client/proc/one_click_antag()
/datum/admins/proc/one_click_antag()
var/dat = {"One-click Antagonist
- Make Tratiors
+ Make Traitors
Make Changlings
Make Revs
Make Cult
@@ -53,7 +53,7 @@ client/proc/one_click_antag()
return 0
-/datum/admins/proc/makeTratiors()
+/datum/admins/proc/makeTraitors()
var/datum/game_mode/traitor/temp = new
if(config.protect_roles_from_antagonist)
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 2c69b9957ef..d93dbd6f595 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -30,7 +30,7 @@
////////////
var/next_allowed_topic_time = 10
// comment out the line below when debugging locally to enable the options & messages menu
- control_freak = 1
+ //control_freak = 1
////////////////////////////////////
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 8757ad0d4f9..16b0fbea6cb 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -2,7 +2,7 @@
//SECURITY//
////////////
#define TOPIC_SPAM_DELAY 4 //4 ticks is about 3/10ths of a second
-#define UPLOAD_LIMIT 1048576 //Restricts client uploads to the server to 1MB //Could probably do with being lower.
+#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
//I would just like the code ready should it ever need to be used.
/*
@@ -273,5 +273,9 @@
'icons/spideros_icons/sos_11.png',
'icons/spideros_icons/sos_12.png',
'icons/spideros_icons/sos_13.png',
- 'icons/spideros_icons/sos_14.png'
+ 'icons/spideros_icons/sos_14.png',
+ 'icons/xenoarch_icons/chart1.jpg',
+ 'icons/xenoarch_icons/chart2.jpg',
+ 'icons/xenoarch_icons/chart3.jpg',
+ 'icons/xenoarch_icons/chart4.jpg'
)
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 8a21fc6b6ce..4799dcffbc4 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -252,6 +252,7 @@ datum/preferences
dat += "Blood Type: [b_type]
"
dat += "Skin Tone: [-s_tone + 35]/220
"
//dat += "Skin pattern: Adjust
"
+ dat += "Needs Glasses: [disabilities == 0 ? "No" : "Yes"]
"
dat += "Limbs: Adjust
"
//display limbs below
@@ -1008,6 +1009,9 @@ datum/preferences
else
gender = MALE
+ if("disabilities") //please note: current code only allows nearsightedness as a disability
+ disabilities = !disabilities//if you want to add actual disabilities, code that selects them should be here
+
if("hear_adminhelps")
toggles ^= SOUND_ADMINHELP
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index f60a5409da9..bb6718e3dd5 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 8
-#define SAVEFILE_VERSION_MAX 8
+#define SAVEFILE_VERSION_MAX 9
//handles converting savefiles to new formats
//MAKE SURE YOU KEEP THIS UP TO DATE!
@@ -119,6 +119,7 @@
S["eyes_blue"] >> b_eyes
S["underwear"] >> underwear
S["backbag"] >> backbag
+ S["b_type"] >> b_type
//Jobs
S["userandomjob"] >> userandomjob
@@ -170,6 +171,7 @@
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear))
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
+ b_type = sanitize_text(b_type, initial(b_type))
userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
@@ -218,6 +220,7 @@
S["eyes_blue"] << b_eyes
S["underwear"] << underwear
S["backbag"] << backbag
+ S["b_type"] << b_type
//Jobs
S["userandomjob"] << userandomjob
@@ -237,6 +240,7 @@
S["sec_record"] << sec_record
S["player_alt_titles"] << player_alt_titles
S["be_special"] << be_special
+ S["disabilities"] << disabilities
S["used_skillpoints"] << used_skillpoints
S["skills"] << skills
S["skill_specialization"] << skill_specialization
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 751dde212c9..7d8f1289ce6 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,6 +1,7 @@
/obj/item/clothing
name = "clothing"
+
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
name = "ears"
@@ -155,6 +156,7 @@ BLIND // can't see anything
3 = Report location
*/
var/obj/item/clothing/tie/hastie = null
+ var/displays_id = 1
/obj/item/clothing/under/attackby(obj/item/I, mob/user)
if(!hastie && istype(I, /obj/item/clothing/tie))
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index a662bbdf5cf..5795e8c7141 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -19,6 +19,8 @@
vision_flags = SEE_TURFS
/obj/item/clothing/glasses/meson/prescription
+ name = "prescription mesons"
+ desc = "Optical Meson Scanner with prescription lenses."
prescription = 1
/obj/item/clothing/glasses/science
@@ -61,6 +63,7 @@
desc = "Made by Nerd. Co."
icon_state = "glasses"
item_state = "glasses"
+ prescription = 1
/obj/item/clothing/glasses/regular/hipster
name = "Prescription Glasses"
@@ -129,6 +132,7 @@
vision_flags = BLIND
/obj/item/clothing/glasses/sunglasses/prescription
+ name = "prescription sunglasses"
prescription = 1
/obj/item/clothing/glasses/sunglasses/big
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 93651764173..41ba7dd82a2 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -21,10 +21,13 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
-/obj/item/clothing/suit/captunic/trek
+/obj/item/clothing/suit/captunic/capjacket
name = "captain's uniform jacket"
desc = "A less formal jacket for everyday captain use."
icon_state = "capjacket"
+ item_state = "bio_suit"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ flags_inv = HIDEJUMPSUIT
//Chaplain
/obj/item/clothing/suit/chaplain_hoodie
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index db9533874bc..577ae6bbe35 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -295,9 +295,9 @@
icon_state = "dress_hop"
color = "dress_hop"
-/obj/item/clothing/under/dress/dress_resource
+/obj/item/clothing/under/dress/dress_hr
name = "human resources director uniform"
- desc = "Stylish class for the nosy H.R. director."
+ desc = "Superior class for the nosy H.R. Director."
icon_state = "huresource"
color = "huresource"
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index c953ac56686..ff80b7bd0c0 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -135,6 +135,14 @@ hi
icon_on = "bluezippoon"
icon_off = "bluezippo"
+/obj/item/weapon/lighter/zippo/fluff/michael_guess_1 //Dragor23: Michael Guess
+ name = "engraved lighter"
+ desc = "A golden lighter, engraved with some ornaments and a G."
+ icon = 'custom_items.dmi'
+ icon_state = "guessip"
+ icon_on = "guessipon"
+ icon_off = "guessip"
+
/obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1 //rawrtaicho: Riley Rohtin
name = "Riley's black zippo"
desc = "A black zippo lighter, which holds some form of sentimental value."
@@ -263,14 +271,6 @@ hi
body_parts_covered = null
flags = FPRINT|TABLEPASS
-/obj/item/weapon/lighter/fluff //Dragor23: Michael Guess
- name = "engraved lighter"
- desc = "A golden lighter, engraved with some ornaments and a G.."
- icon_state = "guessip"
- item_state = "guessip"
- icon_on = "guessipon"
- icon_off = "guessip"
-
//Strange penlight, Nerezza: Asher Spock
/obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1
diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm
index 8caf519dffa..e600cbc0370 100644
--- a/code/modules/events/money_spam.dm
+++ b/code/modules/events/money_spam.dm
@@ -36,7 +36,7 @@
var/sender
var/message
- switch(pick(1,2,3,4,5))
+ switch(pick(1,2,3,4,5,6))
if(1)
sender = pick("MaxBet","MaxBet Online Casino","There is no better time to register","I'm excited for you to join us")
message = pick("Triple deposits are waiting for you at MaxBet Online when you register to play with us.",\
@@ -73,6 +73,12 @@
"Dear fund beneficiary, We have please to inform you that overdue funds payment has finally been approved and released for payment",\
"Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\
"Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits")
+ if(6)
+ sender = pick("NanoTrasen Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt")
+ message = pick("The NanoTrasen Morale Division wishes to provide you with quality entertainment sites.",\
+ "WetSkrell.nt is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\
+ "Wetskrell.nt only provides the higest quality of male entertaiment to NanoTrasen Employees.",\
+ "Simply enter your NanoTrasen Bank account system number and pin. With three easy steps this service could be yours!")
useMS.send_pda_message("[P.owner]", sender, message)
diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm
index dd5ade5fe45..627df7c6ddf 100644
--- a/code/modules/flufftext/Dreaming.dm
+++ b/code/modules/flufftext/Dreaming.dm
@@ -6,7 +6,7 @@ mob/living/carbon/proc/dream()
"light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun",
"a hat","the Luna","a ruined station","a planet","plasma","air","the medical bay","the bridge","blinking lights",
"a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect",
- "riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying"
+ "riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying","the eggs"
)
spawn(0)
for(var/i = rand(1,4),i > 0, i--)
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 94c1d350ddc..43dbadb4c21 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -344,14 +344,13 @@ commented out in r5061, I left it because of the shroom thingies
user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]."
- if(fail_message)
- if(prob(50))
- if(prob(25))
- excavate_find(5, src.finds[1])
- else if(prob(50))
- src.finds.Remove(src.finds[1])
- if(prob(50))
- artifact_debris()
+ if(fail_message && prob(90))
+ if(prob(25))
+ excavate_find(5, src.finds[1])
+ else if(prob(50))
+ src.finds.Remove(src.finds[1])
+ if(prob(50))
+ artifact_debris()
if(do_after(user,P.digspeed))
user << "\blue You finish [P.drill_verb] the rock."
@@ -425,8 +424,6 @@ commented out in r5061, I left it because of the shroom thingies
//extract pesky minerals while we're excavating
while(excavation_minerals.len && src.excavation_level > excavation_minerals[excavation_minerals.len])
drop_mineral()
- //have a 50% chance to extract bonus minerals this way
- //if(prob(50))
pop(excavation_minerals)
mineralAmt--
@@ -456,13 +453,6 @@ commented out in r5061, I left it because of the shroom thingies
O = new /obj/item/weapon/ore/plasma(src)
if (src.mineralName == "Diamond")
O = new /obj/item/weapon/ore/diamond(src)
- /*if (src.mineralName == "Archaeo")
- //new /obj/item/weapon/archaeological_find(src)
- //if(prob(10) || delicate)
- if(prob(50)) //Don't have delicate tools (hand pick/excavation tool) yet, temporarily change to 50% instead of 10% -Mij
- O = new /obj/item/weapon/ore/strangerock(src)
- else
- destroyed = 1*/
if (src.mineralName == "Clown")
O = new /obj/item/weapon/ore/clown(src)
if(O)
@@ -496,14 +486,9 @@ commented out in r5061, I left it because of the shroom thingies
M.Stun(5)
M.apply_effect(25, IRRADIATE)
- /*if (prob(src.artifactChance))
- //spawn a rare artifact here
- new /obj/machinery/artifact(src)*/
var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
N.fullUpdateMineralOverlays()
- /*if(destroyed) //Display message about being a terrible miner
- usr << "\red You destroy some of the rocks!"*/
return
/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 3bba11e32d1..731f8ba3bf5 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -50,6 +50,7 @@
src.searching = 0
src.brainmob.mind = candidate.mind
src.brainmob.key = candidate.key
+ src.brainmob.ckey = candidate.ckey
src.name = "positronic brain ([src.brainmob.name])"
src.brainmob << "You are a positronic brain, brought into existence on [station_name()]."
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 7eca9638fc5..a905e5d90aa 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -97,6 +97,7 @@
return
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0)
+ if(status_flags & GODMODE) return 0 //godmode
shock_damage *= siemens_coeff
if (shock_damage<1)
return 0
@@ -384,13 +385,13 @@
item.layer = initial(item.layer)
u_equip(item)
update_icons()
- //if(src.client)
- //src.client.screen -= item
- //item.loc = src.loc
-
- //if(istype(item, /obj/item))
- //item:dropped(src) // let it know it's been dropped
+ if (istype(usr, /mob/living/carbon/monkey)) //Check if a monkey is throwing. Modify/remove this line as required.
+ item.loc = src.loc
+ if(src.client)
+ src.client.screen -= item
+ if(istype(item, /obj/item))
+ item:dropped(src) // let it know it's been dropped
//actually throw it!
if (item)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 249b72a4c4c..214100d2ccb 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -117,7 +117,7 @@ emp_act
if(!target_zone)
visible_message("\red [user] misses [src] with \the [I]!")
return
-
+
var/datum/organ/external/affecting = get_organ(target_zone)
if (!affecting)
return
@@ -152,7 +152,7 @@ emp_act
location.add_blood(src)
if(ishuman(user))
var/mob/living/carbon/human/H = user
- if(get_dist(H, src) > 1) //people with TK won't get smeared with blood
+ if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood
H.bloody_body(src)
H.bloody_hands(src)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index ae58b2fbcf4..5221d779791 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -450,6 +450,7 @@
SA.moles = 0
if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :(
+ if(status_flags & GODMODE) return 1 //godmode
if(breath.temperature < 260.15)
if(prob(20))
src << "\red You feel your face freezing and an icicle forming in your lungs!"
@@ -518,6 +519,7 @@
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
//Body temperature is too hot.
fire_alert = max(fire_alert, 1)
+ if(status_flags & GODMODE) return 1 //godmode
switch(bodytemperature)
if(360 to 400)
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN, used_weapon = "High Body Temperature")
@@ -531,6 +533,7 @@
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT)
fire_alert = max(fire_alert, 1)
+ if(status_flags & GODMODE) return 1 //godmode
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
switch(bodytemperature)
if(200 to 260)
@@ -548,6 +551,7 @@
var/pressure = environment.return_pressure()
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
+ if(status_flags & GODMODE) return 1 //godmode
switch(adjusted_pressure)
if(HAZARD_HIGH_PRESSURE to INFINITY)
adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
@@ -783,8 +787,8 @@
var/total_plasmaloss = 0
for(var/obj/item/I in src)
if(I.contaminated)
- total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
-
+ total_plasmaloss += vsc.plc.CONTAMINATION_LOSS
+ if(status_flags & GODMODE) return 0 //godmode
adjustToxLoss(total_plasmaloss)
// if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
@@ -1223,8 +1227,14 @@
if(blinded) blind.layer = 18
else blind.layer = 0
- if( disabilities & NEARSIGHTED && !istype(glasses, /obj/item/clothing/glasses/regular) )
- client.screen += global_hud.vimpaired
+ if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription
+ if(glasses) //to every /obj/item
+ var/obj/item/clothing/glasses/G = glasses
+ if(!G.prescription)
+ client.screen += global_hud.vimpaired
+ else
+ client.screen += global_hud.vimpaired
+
if(eye_blurry) client.screen += global_hud.blurry
if(druggy) client.screen += global_hud.druggy
@@ -1270,6 +1280,7 @@
playsound_local(src,pick(scarySounds),50, 1, -1)
proc/handle_virus_updates()
+ if(status_flags & GODMODE) return 0 //godmode
if(bodytemperature > 406)
for(var/datum/disease/D in viruses)
D.cure()
@@ -1319,7 +1330,7 @@
handle_shock()
..()
-
+ if(status_flags & GODMODE) return 0 //godmode
if(analgesic) return // analgesic avoids all traumatic shock temporarily
if(health < 0)// health 0 makes you immediately collapse
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index e8d8525e7ac..da0a999fdf5 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -560,9 +560,13 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1)
if(wear_id)
- overlays_lying[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id2")
- overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id")
wear_id.screen_loc = ui_id //TODO
+ if(w_uniform && w_uniform:displays_id)
+ overlays_lying[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id2")
+ overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id")
+ else
+ overlays_lying[ID_LAYER] = null
+ overlays_standing[ID_LAYER] = null
else
overlays_lying[ID_LAYER] = null
overlays_standing[ID_LAYER] = null
@@ -873,4 +877,4 @@ proc/get_damage_icon_part(damage_state, body_part)
#undef R_HAND_LAYER
#undef TAIL_LAYER
#undef TARGETED_LAYER
-#undef TOTAL_LAYERS
+#undef TOTAL_LAYERS
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index c7aab1d9ed9..162a69b49c7 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -228,6 +228,7 @@
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn)
+ if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
@@ -240,6 +241,7 @@
// damage MANY external organs, in random order
/mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
+ if(status_flags & GODMODE) return 0 //godmode
adjustBruteLoss(brute)
adjustFireLoss(burn)
src.updatehealth()
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 94fc27ba8d8..de8f271c6c8 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -234,16 +234,12 @@ var/list/ai_list = list()
/mob/living/silicon/ai/proc/ai_roster()
set category = "AI Commands"
set name = "Show Crew Manifest"
- var/dat = "Crew RosterCrew Roster:
"
-
- var/list/L = list()
- for (var/datum/data/record/t in data_core.general)
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
- for(var/R in sortList(L))
- dat += "[R]
"
- dat += ""
+ var/dat
+ dat += "Crew Manifest
"
+ if(data_core)
+ dat += data_core.get_manifest(0) // make it monochrome
+ dat += "
"
src << browse(dat, "window=airoster")
onclose(src, "airoster")
@@ -743,4 +739,4 @@ var/list/ai_list = list()
anchored = 1
return
else
- return ..()
+ return ..()
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 139d65765b5..27d557c70cc 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -413,14 +413,9 @@
/mob/living/silicon/pai/proc/softwareManifest()
var/dat = ""
dat += "Crew Manifest
"
- var/list/L = list()
- if(!isnull(data_core.general))
- for (var/datum/data/record/t in sortRecord(data_core.general))
- var/R = t.fields["name"] + " - " + t.fields["rank"]
- L += R
- for(var/R in sortList(L))
- dat += "[R]
"
- dat += "