Hopefully fixes merge conflicts.

This commit is contained in:
Neerti
2017-08-01 16:18:43 -04:00
188 changed files with 19864 additions and 14498 deletions

View File

@@ -5,7 +5,7 @@ sudo: false
env:
BYOND_MAJOR="511"
BYOND_MINOR="1381"
MACRO_COUNT=209
MACRO_COUNT=4
cache:
directories:

View File

@@ -7,16 +7,18 @@ Polaris is a fork of the Baystation12 code branch for the game Spacestation13.
---
### LICENSE
Polaris is licensed under the GNU Affero General Public License version 3, which can be found in full in LICENSE-AGPL3.txt.
The code for Polaris is licensed under the [GNU Affero General Public License](http://www.gnu.org/licenses/agpl.html) version 3, which can be found in full in LICENSE-AGPL3.txt.
Commits with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt.
Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt.
All commits whose authorship dates are not prior to `1420675200 +0000` are assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files.
All code whose authorship dates are not prior to `1420675200 +0000` are assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files.
If you wish to develop and host this codebase in a closed source manner you may use all commits prior to `1420675200 +0000`, which are licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made.
If you wish to develop and host this codebase in a closed source manner you may use all code prior to `1420675200 +0000`, which are licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made.
See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information.
All assets including icons and sound are under a [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license unless otherwise indicated.
### GETTING THE CODE
The simplest way to obtain the code is using the github .zip feature.

View File

@@ -107,6 +107,7 @@
"filter_co2" = ("carbon_dioxide" in scrubbing_gas),
"filter_phoron" = ("phoron" in scrubbing_gas),
"filter_n2o" = ("sleeping_agent" in scrubbing_gas),
"filter_fuel" = ("volatile_fuel" in scrubbing_gas),
"sigtype" = "status"
)
if(!initial_loc.air_scrub_names[id_tag])
@@ -233,6 +234,11 @@
else if(signal.data["toggle_n2o_scrub"])
toggle += "sleeping_agent"
if(!isnull(signal.data["fuel_scrub"]) && text2num(signal.data["fuel_scrub"]) != ("volatile_fuel" in scrubbing_gas))
toggle += "volatile_fuel"
else if(signal.data["toggle_fuel_scrub"])
toggle += "volatile_fuel"
scrubbing_gas ^= toggle
if(signal.data["init"] != null)

View File

@@ -74,6 +74,7 @@
#define XGM_GAS_FUEL 1
#define XGM_GAS_OXIDIZER 2
#define XGM_GAS_CONTAMINANT 4
#define XGM_GAS_FUSION_FUEL 8
#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking.
#define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) // Tank spills all contents into atmosphere.

View File

@@ -198,3 +198,6 @@
#define TSC_GIL "Gilthari"
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
#define WORLD_ICON_SIZE 32 //Needed for the R-UST port
#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port

View File

@@ -38,6 +38,8 @@
#define issilicon(A) istype(A, /mob/living/silicon)
#define isvoice(A) istype(A, /mob/living/voice)
#define isslime(A) istype(A, /mob/living/carbon/slime)
#define isxeno(A) istype(A, /mob/living/simple_animal/xeno)

View File

@@ -243,7 +243,7 @@ var/obj/screen/robot_inventory
//Unfortunately adding the emag module to the list of modules has to be here. This is because a borg can
//be emagged before they actually select a module. - or some situation can cause them to get a new module
// - or some situation might cause them to get de-emagged or something.
if(r.emagged)
if(r.emagged || r.emag_items)
if(!(r.module.emag in r.module.modules))
r.module.modules.Add(r.module.emag)
else

View File

@@ -407,7 +407,7 @@
else if (href_list["obj_announce"])
var/obj_count = 1
current << "\blue Your current objectives:"
current << "<font color='blue'>Your current objectives:</font>"
for(var/datum/objective/objective in objectives)
current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
obj_count++

View File

@@ -200,3 +200,52 @@
/obj/item/weapon/stock_parts/matter_bin,
/obj/item/weapon/circuitboard/pacman/super
)
/datum/supply_packs/eng/fusion_core
name = "R-UST Mk. 8 Tokamak fusion core crate"
cost = 50
containername = "R-UST Mk. 8 Tokamak Fusion Core crate"
containertype = /obj/structure/closet/crate/secure/engineering
access = access_engine
contains = list(
/obj/item/weapon/book/manual/rust_engine,
/obj/machinery/power/fusion_core,
/obj/item/weapon/circuitboard/fusion_core
)
/datum/supply_packs/eng/fusion_fuel_injector
name = "R-UST Mk. 8 fuel injector crate"
cost = 30
containername = "R-UST Mk. 8 fuel injector crate"
containertype = /obj/structure/closet/crate/secure/engineering
access = access_engine
contains = list(
/obj/machinery/fusion_fuel_injector,
/obj/machinery/fusion_fuel_injector,
/obj/item/weapon/circuitboard/fusion_injector
)
/datum/supply_packs/eng/gyrotron
name = "Gyrotron crate"
cost = 15
containername = "Gyrotron Crate"
containertype = /obj/structure/closet/crate/secure/engineering
access = access_engine
contains = list(
/obj/machinery/power/emitter/gyrotron,
/obj/item/weapon/circuitboard/gyrotron
)
/datum/supply_packs/eng/fusion_fuel_compressor
name = "Fusion Fuel Compressor circuitry crate"
cost = 10
containername = "Fusion Fuel Compressor circuitry crate"
containertype = /obj/structure/closet/crate/engineering
contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor)
/datum/supply_packs/eng/tritium
name = "Tritium crate"
cost = 75
containername = "Tritium crate"
containertype = /obj/structure/closet/crate/engineering
contains = list(/obj/fiftyspawner/tritium)

View File

@@ -39,6 +39,26 @@
item_cost = 10
path = /obj/item/weapon/storage/box/freezer
/datum/uplink_item/item/medical/monkeycubes
name = "Box, Monkey Cubes"
item_cost = 10
path = /obj/item/weapon/storage/box/monkeycubes
/datum/uplink_item/item/medical/farwacubes
name = "Box, Farwa Cubes"
item_cost = 10
path = /obj/item/weapon/storage/box/monkeycubes
/datum/uplink_item/item/medical/neaeracubes
name = "Box, Neaera Cubes"
item_cost = 10
path = /obj/item/weapon/storage/box/monkeycubes/neaeracubes
/datum/uplink_item/item/medical/stokcubes
name = "Box, Stok Cubes"
item_cost = 10
path = /obj/item/weapon/storage/box/monkeycubes/stokcubes
/datum/uplink_item/item/medical/surgery
name = "Surgery kit"
item_cost = 45

View File

@@ -5,7 +5,7 @@ var/datum/uplink/uplink = new()
var/list/datum/uplink_item/items
var/list/datum/uplink_category/categories
/datum/uplink/New()
/datum/uplink/New(var/type)
items_assoc = list()
items = init_subtypes(/datum/uplink_item)
categories = init_subtypes(/datum/uplink_category)
@@ -38,7 +38,8 @@ var/datum/uplink/uplink = new()
/datum/uplink_item/New()
..()
antag_roles = list()
if(!antag_roles)
antag_roles = list()
@@ -85,8 +86,9 @@ var/datum/uplink/uplink = new()
for(var/antag_role in antag_roles)
var/datum/antagonist/antag = all_antag_types[antag_role]
if(antag.is_antagonist(U.uplink_owner))
return 1
if(!isnull(antag))
if(antag.is_antagonist(U.uplink_owner))
return 1
return 0
/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U)

View File

@@ -15,10 +15,45 @@
path = /obj/item/weapon/material/hatchet/tacknife/combatknife
/datum/uplink_item/item/visible_weapons/energy_sword
name = "Energy Sword"
name = "Energy Sword, Random"
item_cost = 40
path = /obj/item/weapon/melee/energy/sword
/datum/uplink_item/item/visible_weapons/energy_sword_blue
name = "Energy Sword, Blue"
item_cost = 40
path = /obj/item/weapon/melee/energy/sword/blue
/datum/uplink_item/item/visible_weapons/energy_sword_green
name = "Energy Sword, Green"
item_cost = 40
path = /obj/item/weapon/melee/energy/sword/green
/datum/uplink_item/item/visible_weapons/energy_sword_red
name = "Energy Sword, Red"
item_cost = 40
path = /obj/item/weapon/melee/energy/sword/red
/datum/uplink_item/item/visible_weapons/energy_sword_purple
name = "Energy Sword, Purple"
item_cost = 40
path = /obj/item/weapon/melee/energy/sword/purple
/datum/uplink_item/item/visible_weapons/energy_sword_pirate
name = "Energy Cutlass"
item_cost = 40
path = /obj/item/weapon/melee/energy/sword/pirate
/datum/uplink_item/item/visible_weapons/claymore
name = "Claymore"
item_cost = 40
path = /obj/item/weapon/material/sword
/datum/uplink_item/item/visible_weapons/katana
name = "Katana"
item_cost = 40
path = /obj/item/weapon/material/sword/katana
/datum/uplink_item/item/visible_weapons/dartgun
name = "Dart Gun"
item_cost = 30
@@ -44,15 +79,38 @@
item_cost = 70
path = /obj/item/weapon/gun/projectile/revolver
/datum/uplink_item/item/visible_weapons/mateba
name = "Mateba"
item_cost = 70
path = /obj/item/weapon/gun/projectile/revolver/mateba
/datum/uplink_item/item/visible_weapons/judge
name = "Judge"
item_cost = 70
path = /obj/item/weapon/gun/projectile/revolver/judge
/datum/uplink_item/item/visible_weapons/lemat
name = "LeMat"
item_cost = 60
path = /obj/item/weapon/gun/projectile/revolver/lemat
/datum/uplink_item/item/visible_weapons/Derringer
name = ".357 Derringer Pistol"
item_cost = 40
path = /obj/item/weapon/gun/projectile/derringer
/datum/uplink_item/item/visible_weapons/heavysniper
/datum/uplink_item/item/visible_weapons/heavysnipermerc
name = "Anti-Materiel Rifle (14.5mm)"
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
path = /obj/item/weapon/gun/projectile/heavysniper
antag_roles = list("mercenary")
/datum/uplink_item/item/visible_weapons/heavysnipertraitor
name = "Anti-Materiel Rifle (14.5mm)"
desc = "A convenient collapsible rifle for covert assassination. Comes with 4 shots and its own secure carrying case."
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
path = /obj/item/weapon/storage/secure/briefcase/rifle
antag_roles = list("traitor")
/datum/uplink_item/item/visible_weapons/tommygun
name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades
@@ -75,6 +133,11 @@
item_cost = 75
path = /obj/item/weapon/gun/projectile/shotgun/pump/combat
/datum/uplink_item/item/visible_weapons/leveraction
name = "Lever Action Rifle"
item_cost = 50
path = /obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
/datum/uplink_item/item/visible_weapons/egun
name = "Energy Gun"
item_cost = 60

View File

@@ -33,7 +33,7 @@
tile_overlay = "phoron"
overlay_limit = 0.7
flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT
flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL //R-UST port, adding XGM_GAS_FUSION_FUEL flag.
/decl/xgm_gas/volatile_fuel
id = "volatile_fuel"

View File

@@ -111,9 +111,6 @@
else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age)
candidates -= player
log_debug("[key_name(player)] is not eligible to become a [role_text]: Is only [player.current.client.player_age] day\s old, has to be [minimum_player_age] day\s!")
else if(istype(player.current, /mob/living/voice))
candidates -= player
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are only a communicator voice. They have been removed from the draft.")
else if(player.special_role)
candidates -= player
log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])! They have been removed from the draft.")

View File

@@ -1,12 +1,16 @@
/datum/antagonist/proc/can_become_antag(var/datum/mind/player, var/ignore_role)
if(player.current && jobban_isbanned(player.current, bantype))
return 0
if(player.current)
if(jobban_isbanned(player.current, bantype))
return FALSE
if(!isnewplayer(player.current) && !isobserver(player.current))
if(!player.current.can_be_antagged) // Stop autotraitoring pAIs!
return FALSE
if(!ignore_role)
if(player.assigned_role in restricted_jobs)
return 0
return FALSE
if(config.protect_roles_from_antagonist && (player.assigned_role in protected_jobs))
return 0
return 1
return FALSE
return TRUE
/datum/antagonist/proc/antags_are_dead()
for(var/datum/mind/antag in current_antagonists)

View File

@@ -17,7 +17,7 @@ var/datum/antagonist/mercenary/mercs
hard_cap = 4
hard_cap_round = 8
initial_spawn_req = 3
initial_spawn_target = 4
initial_spawn_target = 3
/datum/antagonist/mercenary/New()
..()

View File

@@ -12,10 +12,10 @@ var/datum/antagonist/raider/raiders
flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER
antaghud_indicator = "hudmutineer"
hard_cap = 6
hard_cap_round = 10
hard_cap = 4
hard_cap_round = 8
initial_spawn_req = 3
initial_spawn_target = 4
initial_spawn_target = 3
id_type = /obj/item/weapon/card/id/syndicate

View File

@@ -92,6 +92,11 @@
for(var/mob/M in src)//Failsafe so you can get mobs out
M.loc = get_turf(src)
/obj/machinery/dna_scannernew/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to clone people without external assistance
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target))
return
put_in(target)
/obj/machinery/dna_scannernew/verb/move_inside()
set src in oview(1)
set category = "Object"

View File

@@ -112,9 +112,6 @@
"<span class='warning'>We harden our flesh, creating a suit of armor!</span>",
"<span class='italics'>You hear organic matter ripping and tearing!</span>")
/obj/item/clothing/suit/space/changeling/armored/dropped()
qdel(src)
/obj/item/clothing/head/helmet/space/changeling/armored
name = "chitinous mass"
desc = "A tough, hard covering of black chitin with transparent chitin in front."
@@ -123,19 +120,12 @@
siemens_coefficient = 0.3
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/head/helmet/space/changeling/armored/dropped()
qdel(src)
/obj/item/clothing/shoes/magboots/changeling/armored
desc = "A tough, hard mass of chitin, with long talons for digging into terrain."
name = "chitinous talons"
icon_state = "lingarmor"
action_button_name = "Toggle Talons"
/obj/item/clothing/shoes/magboots/changeling/armored/dropped()
..()
qdel(src)
/obj/item/clothing/gloves/combat/changeling //Combined insulated/fireproof gloves
name = "chitinous gauntlets"
desc = "Very resilient gauntlets made out of black chitin. It looks very durable, and can probably resist electrical shock in addition to the elements."

View File

@@ -33,6 +33,9 @@
if(C.suiciding)
C.suiciding = 0
if(C.does_not_breathe)
C.does_not_breathe = 0 //This means they don't autoheal the oxy damage from the next step
if(C.stat != DEAD)
C.adjustOxyLoss(C.maxHealth * 2)

View File

@@ -7,9 +7,9 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
/datum/game_mode/heist
name = "Heist"
config_tag = "heist"
required_players = 15
required_players_secret = 15
required_enemies = 4
required_players = 9
required_players_secret = 9
required_enemies = 3
round_description = "An unidentified bluespace signature is approaching the station!"
extended_round_description = "The Company's majority control of phoron in the system has marked the \
station to be a highly valuable target for many competing organizations and individuals. Being a \

View File

@@ -12,9 +12,9 @@ var/list/nuke_disks = list()
colony of sizable population and considerable wealth causes it to often be the target of various \
attempts of robbery, fraud and other malicious actions."
config_tag = "mercenary"
required_players = 15
required_players_secret = 15
required_enemies = 4
required_players = 9
required_players_secret = 9
required_enemies = 3
end_on_antag_death = 0
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level

View File

@@ -7,6 +7,7 @@
spell_power_desc = "Blink distance is scaled up with more spell power."
cost = 50
obj_path = /obj/item/weapon/spell/blink
ability_icon_state = "tech_blink"
category = UTILITY_SPELLS
/obj/item/weapon/spell/blink

View File

@@ -7,6 +7,7 @@
around the entity is merely a hologram used to allow the user to know if the creature is safe or not."
cost = 100
obj_path = /obj/item/weapon/spell/control
ability_icon_state = "tech_control"
category = UTILITY_SPELLS
/mob/living/carbon/human/proc/technomancer_control()

View File

@@ -1,12 +1,12 @@
/datum/technomancer/spell/mend_synthetic
name = "Mend Synthetic"
desc = "Repairs minor damages to robotic entities. \
desc = "Repairs minor damage to prosthetics. \
Instability is split between the target and technomancer, if seperate. The function will end prematurely \
if the target is completely healthy, preventing further instability."
spell_power_desc = "Healing amount increased."
cost = 50
obj_path = /obj/item/weapon/spell/modifier/mend_synthetic
ability_icon_state = "tech_mendwounds"
ability_icon_state = "tech_mendsynth"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/modifier/mend_synthetic
@@ -35,8 +35,11 @@
if(!holder.getBruteLoss() && !holder.getFireLoss()) // No point existing if the spell can't heal.
expire()
return
holder.adjustBruteLoss(-4 * spell_power) // Should heal roughly 20 burn/brute over 10 seconds, as tick() is run every 2 seconds.
holder.adjustFireLoss(-4 * spell_power) // Ditto.
if(ishuman(holder))
var/mob/living/carbon/human/H = holder
for(var/obj/item/organ/external/E in H.organs)
var/obj/item/organ/external/O = E
O.heal_damage(4 * spell_power, 4 * spell_power, 0, 1)
holder.adjust_instability(1)
if(origin)
var/mob/living/L = origin.resolve()

View File

@@ -4,7 +4,7 @@
If casted on the envirnment, air (oxygen and nitrogen) is moved from a distant location to your target."
cost = 25
obj_path = /obj/item/weapon/spell/oxygenate
ability_icon_state = "oxygenate"
ability_icon_state = "tech_oxygenate"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/oxygenate

View File

@@ -4,12 +4,14 @@
rift you create will afflict you with instability."
cost = 50
obj_path = /obj/item/weapon/spell/phase_shift
ability_icon_state = "tech_phaseshift"
category = DEFENSIVE_SPELLS
/obj/item/weapon/spell/phase_shift
name = "phase shift"
desc = "Allows you to dodge your untimely fate by shifting your location somewhere else, so long as you can survive inside the \
rift."
icon_state = "blink"
cast_methods = CAST_USE
aspect = ASPECT_TELE

View File

@@ -6,6 +6,7 @@
spell_power_desc = "Increases damage dealt, up to a cap of 80 damage per shot."
cost = 100
obj_path = /obj/item/weapon/spell/projectile/overload
ability_icon_state = "tech_overload"
category = OFFENSIVE_SPELLS
/obj/item/weapon/spell/projectile/overload

View File

@@ -548,6 +548,7 @@
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Carbon Dioxide", "command" = "co2_scrub","val" = info["filter_co2"]))
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Toxin" , "command" = "tox_scrub","val" = info["filter_phoron"]))
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Nitrous Oxide", "command" = "n2o_scrub","val" = info["filter_n2o"]))
scrubbers[scrubbers.len]["filters"] += list(list("name" = "Fuel", "command" = "fuel_scrub","val" = info["filter_fuel"]))
data["scrubbers"] = scrubbers
if(AALARM_SCREEN_MODE)
var/modes[0]
@@ -654,6 +655,7 @@
"co2_scrub",
"tox_scrub",
"n2o_scrub",
"fuel_scrub",
"panic_siphon",
"scrubbing",
"direction")

View File

@@ -428,3 +428,23 @@ update_flag
src.update_icon()
return 1
//R-UST port
// Special types used for engine setup admin verb, they contain double amount of that of normal canister.
/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New()
..()
src.air_contents.adjust_gas("nitrogen", MolesForPressure())
src.update_icon()
return 1
/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New()
..()
src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure())
src.update_icon()
return 1
/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New()
..()
src.air_contents.adjust_gas("phoron", MolesForPressure())
src.update_icon()
return 1

View File

@@ -17,7 +17,7 @@
var/minrate = 0
var/maxrate = 10 * ONE_ATMOSPHERE
var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "sleeping_agent")
var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "sleeping_agent", "volatile_fuel")
/obj/machinery/portable_atmospherics/powered/scrubber/New()
..()

View File

@@ -13,7 +13,7 @@
var/c_tag_order = 999
var/status = 1
anchored = 1.0
var/invuln = null
var/invuln = 0
var/bugged = 0
var/obj/item/weapon/camera_assembly/assembly = null

View File

@@ -98,6 +98,7 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/network/thunder
network = list(NETWORK_THUNDER)
invuln = 1
// EMP

View File

@@ -191,6 +191,11 @@
qdel(G)
return
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target))
return
put_mob(target)
/obj/machinery/atmospherics/unary/cryo_cell/update_icon()
overlays.Cut()
icon_state = "pod[on]"

View File

@@ -499,50 +499,10 @@
if(!ismob(grab.affecting))
return
if(!check_occupant_allowed(grab.affecting))
return
var/willing = null //We don't want to allow people to be forced into despawning.
var/mob/M = grab.affecting
if(M.client)
if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes")
if(!M || !grab || !grab.affecting) return
willing = 1
else
willing = 1
go_in(grab.affecting,user)
if(willing)
visible_message("\The [user] starts putting [grab:affecting:name] into \the [src].", 3)
if(do_after(user, 20))
if(!M || !grab || !grab:affecting) return
M.forceMove(src)
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
icon_state = occupied_icon_state
M << "<span class='notice'>[on_enter_occupant_message]</span>"
M << "<span class='notice'><b>If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.</b></span>"
set_occupant(M)
time_entered = world.time
if(ishuman(M) && applies_stasis)
var/mob/living/carbon/human/H = M
H.Stasis(1000)
// Book keeping!
var/turf/location = get_turf(src)
log_admin("[key_name_admin(M)] has entered a stasis pod. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)")
message_admins("<span class='notice'>[key_name_admin(M)] has entered a stasis pod.</span>")
//Despawning occurs when process() is called with an occupant without a client.
add_fingerprint(M)
/obj/machinery/cryopod/verb/eject()
set name = "Eject Pod"
@@ -650,3 +610,61 @@
name = initial(name)
if(occupant)
name = "[name] ([occupant])"
/obj/machinery/cryopod/MouseDrop_T(var/mob/target, var/mob/user)
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user))
return
go_in(target, user)
/obj/machinery/cryopod/proc/go_in(var/mob/M, var/mob/user)
if(!check_occupant_allowed(M))
return
if(!M)
return
if(occupant)
to_chat(user,"<span class='warning'>\The [src] is already occupied.</span>")
return
var/willing = null //We don't want to allow people to be forced into despawning.
if(M.client)
if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes")
if(!M) return
willing = 1
else
willing = 1
if(willing)
if(M == user)
visible_message("[usr] [on_enter_visible_message] [src].", 3)
else
visible_message("\The [user] starts putting [M] into \the [src].", 3)
if(do_after(user, 20))
if(occupant)
to_chat(user,"<span class='warning'>\The [src] is already occupied.</span>")
return
M.forceMove(src)
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
else return
icon_state = occupied_icon_state
M << "<span class='notice'>[on_enter_occupant_message]</span>"
M << "<span class='notice'><b>If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.</b></span>"
set_occupant(M)
time_entered = world.time
if(ishuman(M) && applies_stasis)
var/mob/living/carbon/human/H = M
H.Stasis(1000)
// Book keeping!
var/turf/location = get_turf(src)
log_admin("[key_name_admin(M)] has entered a stasis pod. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>JMP</a>)")
message_admins("<span class='notice'>[key_name_admin(M)] has entered a stasis pod.</span>")
//Despawning occurs when process() is called with an occupant without a client.
add_fingerprint(M)

View File

@@ -57,7 +57,7 @@ var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/mc9mm)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/a357)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/heavysniper, 15, 0)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/heavysnipermerc, 15, 0)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/sniperammo, 15, 0)
items += new/datum/uplink_random_item(/datum/uplink_item/item/grenades/emp, 50)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/crossbow, 33)

View File

@@ -156,8 +156,8 @@
/obj/item/borg/upgrade/syndicate/
name = "illegal equipment module"
desc = "Unlocks the hidden, deadlier functions of a robot"
name = "scrambled equipment module"
desc = "Unlocks new and often deadly module specific items of a robot"
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
require_module = 1
@@ -165,8 +165,8 @@
/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.emagged == 1)
if(R.emag_items == 1)
return 0
R.emagged = 1
R.emag_items = 1
return 1

View File

@@ -147,6 +147,47 @@
</body>
</html>"}
//R-UST port
/obj/item/weapon/book/manual/rust_engine
name = "R-UST Operating Manual"
icon_state = "bookSupermatter"
author = "Cindy Crawfish"
title = "R-UST Operating Manual"
/obj/item/weapon/book/manual/rust_engine/New()
..()
dat = {"<html>
<head>
<style>
h1 {font-size: 18px; margin: 15px 0px 5px;}
h2 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
body {font-size: 13px; font-family: Verdana;}
</style>
</head>
<body>
<br><br>
<ol>
<li>Put uranium in the portable generator near the gyrotron and turn it to full. This is to provide initial power to the core.</li>
<li>Enable and max output on the SMES in the engine room. This is to power the gyrotron.</li>
<li>Go into the control room, interact with the fusion core control console. Turn the field on and raise size to 501. Any bigger and it will start EMPing the doors. Any smaller and the fuel pellets might miss.</li>
<li>Interact with the gyrotron control computer, set power as high as the SMES can support, usually around 4, and turn it on. This will start increasing the plasma temperature to the point where reactions can occur.</li>
<li>Go into the engine room and insert a deuterium fuel assembly and a tritium fuel assembly into two of the fuel injectors. You can make deuterium rods in the fuel compressor if you want to play it safe.</li>
<li>Go back to the control room and turn the fuel injectors on. This will start firing pellets into the field.</li>
<li>Wait for reactions to start (plasma temperature will spike and fuel amounts will drop). Turn the gyrotron power down until it's keeping up with field instability. This will prevent cumulative instability from the deuterium-tritium reaction fucking up the field. If you're using straight deuterium instability isn't a problem and you can turn the gyrotron off.</li>
<li>Configure the SMES, turn the PACMAN off before it explodes.</li>
</ol>
<br>
<b>NOTES FOR NEWBIES</b>
<br>
Anything touching the field will mess with its stability and eventually cause it to rupture. Rupturing is bad. Use the gyrotron to keep instability down if you're running the engine on unstable fuel.
<br><br>
Likewise, no matter how sad the core seems, don't fucking hug it, you'll blow the field out and set the engine room on fire.
</body>
</html>"}
/obj/item/weapon/book/manual/engineering_hacking
name = "Hacking"
icon_state ="bookHacking"

View File

@@ -12,8 +12,8 @@
w_class = ITEMSIZE_HUGE
max_w_class = ITEMSIZE_LARGE
max_storage_space = ITEMSIZE_COST_NORMAL * 6 //20 for clothes + a bit of additional space for non-clothing items that were worn on body
storage_slots = 14
max_storage_space = ITEMSIZE_COST_NORMAL * 8
storage_slots = 20
use_to_pickup = 1
allow_quick_empty = 1
allow_quick_gather = 1
@@ -65,7 +65,7 @@
return ..()
/obj/item/weapon/storage/laundry_basket/dropped(mob/user as mob)
qdel(linked)
qdel_null(linked)
return ..()
/obj/item/weapon/storage/laundry_basket/show_to(mob/user as mob)

View File

@@ -149,7 +149,9 @@
force = 8.0
throw_speed = 1
throw_range = 4
max_w_class = ITEMSIZE_NORMAL
w_class = ITEMSIZE_LARGE
max_storage_space = ITEMSIZE_COST_NORMAL * 4
attack_hand(mob/user as mob)
if ((src.loc == user) && (src.locked == 1))

View File

@@ -282,3 +282,16 @@
..()
new /obj/item/weapon/syndie/c4explosive/heavy/super_heavy(src)
new /obj/item/weapon/screwdriver(src)
/obj/item/weapon/storage/secure/briefcase/rifle
name = "secure briefcase"
/obj/item/weapon/storage/secure/briefcase/rifle/New()
..()
new /obj/item/sniper_rifle_part/barrel(src)
new /obj/item/sniper_rifle_part/stock(src)
new /obj/item/sniper_rifle_part/trigger_group(src)
for(var/i = 1 to 4)
new /obj/item/ammo_casing/a145(src)

View File

@@ -454,6 +454,8 @@ var/list/global/tank_gauge_cache = list()
log_debug("<span class='warning'>[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]</span>")
#endif
air_contents.react()
if(integrity <= 0)
var/turf/simulated/T = get_turf(src)
if(!T)
@@ -479,12 +481,16 @@ var/list/global/tank_gauge_cache = list()
qdel(src)
else
integrity-= 5
if(!valve_welded)
integrity-= 3
src.leaking = 1
else
integrity-= 5
else if(pressure > TANK_LEAK_PRESSURE || air_contents.temperature - T0C > failure_temp)
if((integrity <= 19 || src.leaking) && !valve_welded)
if((integrity <= 17 || src.leaking) && !valve_welded)
var/turf/simulated/T = get_turf(src)
if(!T)
return
@@ -510,7 +516,7 @@ var/list/global/tank_gauge_cache = list()
else
integrity-= 2
integrity-= 1
else
@@ -587,7 +593,7 @@ var/list/global/tank_gauge_cache = list()
/obj/item/weapon/tank/oxygen/onetankbomb/small/New()
..()
src.onetankbomb(1)
src.onetankbomb(0)
/////////////////////////////////
///Pulled from rewritten bomb.dm

View File

@@ -7,13 +7,13 @@ world/IsBanned(key,address,computer_id)
//Guest Checking
if(!config.guests_allowed && IsGuestKey(key))
log_access("Failed Login: [key] - Guests not allowed")
message_admins("\blue Failed Login: [key] - Guests not allowed")
message_admins("<font color='blue'>Failed Login: [key] - Guests not allowed</font>")
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
//check if the IP address is a known TOR node
if(config && config.ToRban && ToRban_isbanned(address))
log_access("Failed Login: [src] - Banned: ToR")
message_admins("\blue Failed Login: [src] - Banned: ToR")
message_admins("<font color='blue'>Failed Login: [src] - Banned: ToR</font>")
//ban their computer_id and ckey for posterity
AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0)
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
@@ -25,7 +25,7 @@ world/IsBanned(key,address,computer_id)
. = CheckBan( ckey(key), computer_id, address )
if(.)
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
message_admins("\blue Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]")
message_admins("<font color='blue'>Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]</font>")
return .
return ..() //default pager ban stuff

View File

@@ -673,7 +673,7 @@ proc/admin_notice(var/message, var/rights)
//This is basically how death alarms do it
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/ert(null)
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot1.channels + a.keyslot2.channels)
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot2.channels) // + a.keyslot1.channels
if(channel) //They picked a channel
var/sender = input("Name of sender (max 75):", "Announcement", "Announcement Computer") as null|text
@@ -802,7 +802,7 @@ proc/admin_notice(var/message, var/rights)
else
world << "<B>New players may now enter the game.</B>"
log_admin("[key_name(usr)] toggled new player game entering.")
message_admins("\blue [key_name_admin(usr)] toggled new player game entering.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] toggled new player game entering.</font>", 1)
world.update_status()
feedback_add_details("admin_verb","TE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -828,7 +828,7 @@ proc/admin_notice(var/message, var/rights)
world << "<B>You may now respawn.</B>"
else
world << "<B>You may no longer respawn :(</B>"
message_admins("\blue [key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].</font>", 1)
log_admin("[key_name(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].")
world.update_status()
feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -860,7 +860,7 @@ proc/admin_notice(var/message, var/rights)
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_admins("<font color='blue'>[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
return //alert("Round end delayed", null, null, null, null, null)
round_progressing = !round_progressing
if (!round_progressing)
@@ -876,7 +876,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Toggle admin jumping"
set name="Toggle Jump"
config.allow_admin_jump = !(config.allow_admin_jump)
message_admins("\blue Toggled admin jumping to [config.allow_admin_jump].")
message_admins("<font color='blue'>Toggled admin jumping to [config.allow_admin_jump].</font>")
feedback_add_details("admin_verb","TJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/adspawn()
@@ -884,7 +884,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Toggle admin spawning"
set name="Toggle Spawn"
config.allow_admin_spawning = !(config.allow_admin_spawning)
message_admins("\blue Toggled admin item spawning to [config.allow_admin_spawning].")
message_admins("<font color='blue'>Toggled admin item spawning to [config.allow_admin_spawning].</font>")
feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/adrev()
@@ -892,7 +892,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Toggle admin revives"
set name="Toggle Revive"
config.allow_admin_rev = !(config.allow_admin_rev)
message_admins("\blue Toggled reviving to [config.allow_admin_rev].")
message_admins("<font color='blue'>Toggled reviving to [config.allow_admin_rev].</font>")
feedback_add_details("admin_verb","TAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/immreboot()
@@ -902,7 +902,7 @@ proc/admin_notice(var/message, var/rights)
if(!usr.client.holder) return
if( alert("Reboot server?",,"Yes","No") == "No")
return
world << "\red <b>Rebooting world!</b> \blue Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!"
world << "<font color='red'><b>Rebooting world!</b></font> <font color='blue'>Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!</font>"
log_admin("[key_name(usr)] initiated an immediate reboot.")
feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
@@ -1166,7 +1166,7 @@ proc/admin_notice(var/message, var/rights)
else
world << "<B>Guests may now enter the game.</B>"
log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.")
message_admins("\blue [key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.</font>", 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/output_ai_laws()

View File

@@ -449,11 +449,11 @@ var/list/admin_verbs_mentor = list(
if(holder && mob)
if(mob.invisibility == INVISIBILITY_OBSERVER)
mob.invisibility = initial(mob.invisibility)
mob << "\red <b>Invisimin off. Invisibility reset.</b>"
mob << "<font color='red'><b>Invisimin off. Invisibility reset.</b></font>"
mob.alpha = max(mob.alpha + 100, 255)
else
mob.invisibility = INVISIBILITY_OBSERVER
mob << "\blue <b>Invisimin on. You are now as invisible as a ghost.</b>"
mob << "<font color='blue'><b>Invisimin on. You are now as invisible as a ghost.</b></font>"
mob.alpha = max(mob.alpha - 100, 0)
@@ -619,7 +619,7 @@ var/list/admin_verbs_mentor = list(
var/light_impact_range = input("Light impact range (in tiles):") as num
var/flash_range = input("Flash range (in tiles):") as num
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range)
message_admins("\blue [ckey] creating an admin explosion at [epicenter.loc].")
message_admins("<font color='blue'>[ckey] creating an admin explosion at [epicenter.loc].</font>")
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
@@ -651,7 +651,7 @@ var/list/admin_verbs_mentor = list(
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].</font>", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"
@@ -664,7 +664,7 @@ var/list/admin_verbs_mentor = list(
for (var/mob/V in hearers(O))
V.show_message(message, 2)
log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound")
message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound.</font>", 1)
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -698,7 +698,7 @@ var/list/admin_verbs_mentor = list(
usr << "<b>Disabled air processing.</b>"
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] used 'kill air'.")
message_admins("\blue [key_name_admin(usr)] used 'kill air'.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] used 'kill air'.</font>", 1)
/client/proc/readmin_self()
set name = "Re-Admin self"
@@ -839,7 +839,7 @@ var/list/admin_verbs_mentor = list(
var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list
if(!istype(M, /mob/living/carbon/human))
usr << "\red You can only do this to humans!"
usr << "<font color='red'>You can only do this to humans!</font>"
return
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Tajaran can result in unintended consequences.",,"Yes","No"))
if("No")
@@ -959,7 +959,7 @@ var/list/admin_verbs_mentor = list(
T << "<span class='notice'>Move on.</span>"
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
message_admins("\blue [key_name_admin(usr)] told [key_name(T)] to man up and deal with it.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.</font>", 1)
/client/proc/global_man_up()
set category = "Fun"
@@ -971,7 +971,7 @@ var/list/admin_verbs_mentor = list(
T << 'sound/voice/ManUp1.ogg'
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
message_admins("\blue [key_name_admin(usr)] told everyone to man up and deal with it.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] told everyone to man up and deal with it.</font>", 1)
/client/proc/give_spell(mob/T as mob in mob_list) // -- Urist
set category = "Fun"
@@ -982,4 +982,4 @@ var/list/admin_verbs_mentor = list(
T.spell_list += new S
feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the spell [S].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] the spell [S].</font>", 1)

View File

@@ -85,14 +85,14 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
log_query.Execute()
usr << "\blue New admin added."
usr << "<font color='blue'>New admin added.</font>"
else
if(!isnull(admin_id) && isnum(admin_id))
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET rank = '[new_rank]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');")
log_query.Execute()
usr << "\blue Admin rank changed."
usr << "<font color='blue'>Admin rank changed.</font>"
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
if(config.admin_legacy_system) return
@@ -140,10 +140,10 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")
log_query.Execute()
usr << "\blue Permission removed."
usr << "<font color='blue'>Permission removed.</font>"
else //This admin doesn't have this permission, so we are adding it.
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')")
log_query.Execute()
usr << "\blue Permission added."
usr << "<font color='blue'>Permission added.</font>"

View File

@@ -103,7 +103,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
infos += P
info << infos
message_admins("\blue [key_name_admin(user)] has edited [key]'s notes.")
message_admins("<font color='blue'>[key_name_admin(user)] has edited [key]'s notes.</font>")
log_admin("[key_name(user)] has edited [key]'s notes.")
del(info) // savefile, so NOT qdel
@@ -128,7 +128,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
infos.Remove(item)
info << infos
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
message_admins("<font color='blue'>[key_name_admin(usr)] deleted one of [key]'s notes.</font>")
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
qdel(info)

View File

@@ -197,7 +197,7 @@
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
log_admin("[key_name(usr)] called the Emergency Shuttle")
message_admins("\blue [key_name_admin(usr)] called the Emergency Shuttle to the station", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] called the Emergency Shuttle to the station.</font>", 1)
if("2")
if (!( ticker ) || !emergency_shuttle.location())
@@ -205,12 +205,12 @@
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
log_admin("[key_name(usr)] called the Emergency Shuttle")
message_admins("\blue [key_name_admin(usr)] called the Emergency Shuttle to the station", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] called the Emergency Shuttle to the station.</font>", 1)
else if (emergency_shuttle.can_recall())
emergency_shuttle.recall()
log_admin("[key_name(usr)] sent the Emergency Shuttle back")
message_admins("\blue [key_name_admin(usr)] sent the Emergency Shuttle back", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] sent the Emergency Shuttle back.</font>", 1)
href_list["secretsadmin"] = "check_antagonist"
@@ -223,14 +223,14 @@
emergency_shuttle.launch_time = world.time + new_time_left*10
log_admin("[key_name(usr)] edited the Emergency Shuttle's launch time to [new_time_left]")
message_admins("\blue [key_name_admin(usr)] edited the Emergency Shuttle's launch time to [new_time_left*10]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] edited the Emergency Shuttle's launch time to [new_time_left*10]</font>", 1)
else if (emergency_shuttle.shuttle.has_arrive_time())
var/new_time_left = input("Enter new shuttle arrival time (seconds):","Edit Shuttle Arrival Time", emergency_shuttle.estimate_arrival_time() ) as num
emergency_shuttle.shuttle.arrive_time = world.time + new_time_left*10
log_admin("[key_name(usr)] edited the Emergency Shuttle's arrival time to [new_time_left]")
message_admins("\blue [key_name_admin(usr)] edited the Emergency Shuttle's arrival time to [new_time_left*10]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] edited the Emergency Shuttle's arrival time to [new_time_left*10]</font>", 1)
else
alert("The shuttle is neither counting down to launch nor is it in transit. Please try again when it is.")
@@ -241,7 +241,7 @@
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_admins("<font color='blue'>[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -259,7 +259,7 @@
if("Yes") delmob = 1
log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]")
message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]</font>", 1)
switch(href_list["simplemake"])
if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob )
@@ -339,7 +339,7 @@
log_admin("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
message_admins("\blue [key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]</font>", 1)
Banlist.cd = "/base/[banfolder]"
Banlist["reason"] << reason
Banlist["temp"] << temp
@@ -686,7 +686,7 @@
usr << "<span class='warning'> You Cannot issue temporary job-bans!</span>"
return
if(config.ban_legacy_system)
usr << "\red Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban."
usr << "<font color='red'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</font>"
return
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
@@ -711,10 +711,10 @@
else
msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes", 1)
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
M << "\red <B>The reason is: [reason]</B>"
M << "\red This jobban will be lifted in [mins] minutes."
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes</font>", 1)
M << "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>"
M << "<font color='red'><B>The reason is: [reason]</B></font>"
M << "<font color='red'>This jobban will be lifted in [mins] minutes.</font>"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("No")
@@ -732,10 +732,10 @@
if(!msg) msg = job
else msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1)
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
M << "\red <B>The reason is: [reason]</B>"
M << "\red Jobban can be lifted only upon request."
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]</font>", 1)
M << "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>"
M << "<font color='red'><B>The reason is: [reason]</B></font>"
M << "<font color='red'>Jobban can be lifted only upon request.</font>"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("Cancel")
@@ -765,8 +765,8 @@
else
continue
if(msg)
message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1)
M << "\red<BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG>"
message_admins("<font color='blue'>[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]</font>", 1)
M << "<font color='red'><BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG></font>"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
return 0 //we didn't do anything!
@@ -778,11 +778,11 @@
return
var/reason = sanitize(input("Please enter reason"))
if(!reason)
M << "\red You have been kicked from the server"
M << "<font color='red'>You have been kicked from the server</font>"
else
M << "\red You have been kicked from the server: [reason]"
M << "<font color='red'>You have been kicked from the server: [reason]</font>"
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] booted [key_name_admin(M)].</font>", 1)
//M.client = null
qdel(M.client)
@@ -793,7 +793,7 @@
if(t)
if((alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes") && t) //No more misclicks! Unless you do it twice.
log_admin("[key_name(usr)] removed [t]")
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] removed [t]</font>", 1)
jobban_remove(t)
href_list["ban"] = 1 // lets it fall through and refresh
var/t_split = splittext(t, " - ")
@@ -830,17 +830,17 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
ban_unban_log_save("[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.")
notes_add(M.ckey,"[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.",usr)
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a temporary ban, it will be removed in [mins] minutes."
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>"
feedback_inc("ban_tmp",1)
DB_ban_record(BANTYPE_TEMP, M, mins, reason)
feedback_inc("ban_tmp_mins",mins)
if(config.banappeals)
M << "\red To try to resolve this matter head to [config.banappeals]"
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
else
M << "\red No ban appeals URL has been set."
M << "<font color='red'>No ban appeals URL has been set.</font>"
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")
qdel(M.client)
//qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
@@ -855,16 +855,16 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP)
if("No")
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a permanent ban."
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
if(config.banappeals)
M << "\red To try to resolve this matter head to [config.banappeals]"
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
else
M << "\red No ban appeals URL has been set."
M << "<font color='red'>No ban appeals URL has been set.</font>"
ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.")
notes_add(M.ckey,"[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.",usr)
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.</font>")
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
@@ -920,8 +920,8 @@
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [config.mode_names[master_mode]].")
message_admins("\blue [key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].", 1)
world << "\blue <b>The mode is now: [config.mode_names[master_mode]]</b>"
message_admins("<font color='blue'>[key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].</font>", 1)
world << "<font color='blue'><b>The mode is now: [config.mode_names[master_mode]]</b></font>"
Game() // updates the main game menu
world.save_mode(master_mode)
.(href, list("c_mode"=1))
@@ -935,7 +935,7 @@
return alert(usr, "The game mode has to be secret!", null, null, null, null)
secret_force_mode = href_list["f_secret2"]
log_admin("[key_name(usr)] set the forced secret mode as [secret_force_mode].")
message_admins("\blue [key_name_admin(usr)] set the forced secret mode as [secret_force_mode].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] set the forced secret mode as [secret_force_mode].</font>", 1)
Game() // updates the main game menu
.(href, list("f_secret"=1))
@@ -948,7 +948,7 @@
return
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]</font>", 1)
H.monkeyize()
else if(href_list["corgione"])
@@ -960,7 +960,7 @@
return
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(H)]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] attempting to corgize [key_name_admin(H)]</font>", 1)
H.corgize()
else if(href_list["forcespeech"])
@@ -975,7 +975,7 @@
M.say(speech)
speech = sanitize(speech) // Nah, we don't trust them
log_admin("[key_name(usr)] forced [key_name(M)] to say: [speech]")
message_admins("\blue [key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]")
message_admins("<font color='blue'>[key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]</font>")
else if(href_list["sendtoprison"])
if(!check_rights(R_ADMIN)) return
@@ -1014,9 +1014,9 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
M << "\red You have been sent to the prison station!"
M << "<font color='red'>You have been sent to the prison station!</font>"
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</font>", 1)
else if(href_list["tdome1"])
if(!check_rights(R_FUN)) return
@@ -1039,7 +1039,7 @@
sleep(5)
M.loc = pick(tdome1)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 1)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 1)", 1)
@@ -1064,7 +1064,7 @@
sleep(5)
M.loc = pick(tdome2)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 2)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 2)", 1)
@@ -1086,7 +1086,7 @@
sleep(5)
M.loc = pick(tdomeadmin)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Admin.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Admin.)", 1)
@@ -1115,7 +1115,7 @@
sleep(5)
M.loc = pick(tdomeobserve)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
@@ -1129,7 +1129,7 @@
if(config.allow_admin_rev)
L.revive()
message_admins("\red Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!", 1)
message_admins("<font color='red'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!</font>", 1)
log_admin("[key_name(usr)] healed / Rrvived [key_name(L)]")
else
usr << "Admin Rejuvinates have been disabled"
@@ -1142,7 +1142,7 @@
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
message_admins("\red Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!", 1)
message_admins("<font color='red'>Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!</font>", 1)
log_admin("[key_name(usr)] AIized [key_name(H)]")
H.AIize()
@@ -1317,7 +1317,7 @@
log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
feedback_inc("admin_cookies_spawned",1)
H << "\blue Your prayers have been answered!! You received the <b>best cookie</b>!"
H << "<font color='blue'>Your prayers have been answered!! You received the <b>best cookie</b>!</font>"
else if(href_list["BlueSpaceArtillery"])
if(!check_rights(R_ADMIN|R_FUN)) return
@@ -1421,7 +1421,7 @@
usr << browse(data, "window=[B.name]")
else
usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]"
usr << "<font color='red'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</font>"
else if (href_list["AdminFaxViewPage"])
var/page = text2num(href_list["AdminFaxViewPage"])

View File

@@ -217,7 +217,7 @@ var/list/debug_verbs = list (
var/turf/simulated/location = get_turf(usr)
if(!istype(location, /turf/simulated)) // We're in space, let's not cause runtimes.
usr << "\red this debug tool cannot be used from space"
usr << "<font color='red'>this debug tool cannot be used from space</font>"
return
var/icon/red = new('icons/misc/debug_group.dmi', "red") //created here so we don't have to make thousands of these.
@@ -368,7 +368,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Regroup All Airgroups Attempt"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>" //Why not.. Delete the procs instead?
/*prevent_airgroup_regroup = 0
for(var/datum/air_group/AG in air_master.air_groups)
@@ -379,7 +379,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill pipe processing"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*pipe_processing_killed = !pipe_processing_killed
if(pipe_processing_killed)
@@ -391,7 +391,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill air processing"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*air_processing_killed = !air_processing_killed
if(air_processing_killed)
@@ -405,7 +405,7 @@ var/global/say_disabled = 0
set category = "Mapping"
set name = "Disable all communication verbs"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*say_disabled = !say_disabled
if(say_disabled)
@@ -420,7 +420,7 @@ var/global/movement_disabled_exception //This is the client that calls the proc,
set category = "Mapping"
set name = "Disable all movement"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*movement_disabled = !movement_disabled
if(movement_disabled)

View File

@@ -14,9 +14,9 @@
if(ticker.triai)
ticker.triai = 0
usr << "Only one AI will be spawned at round start."
message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has toggled off triple AIs at round start.</font>", 1)
else
ticker.triai = 1
usr << "There will be an AI Triumvirate at round start."
message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has toggled on triple AIs at round start.</font>", 1)
return

View File

@@ -41,7 +41,7 @@
H.updatehealth()
else if(ismouse(target))
var/mob/living/simple_animal/mouse/M = target
visible_message("\red <b>SPLAT!</b>")
visible_message("<font color='red'><b>SPLAT!</b></font>")
M.splat()
playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
layer = MOB_LAYER - 0.2

View File

@@ -133,7 +133,7 @@ obj/machinery/gateway/centerstation/process()
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/multitool))
user << "\black The gate is already calibrated, there is no work for you to do here."
user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return
/////////////////////////////////////Away////////////////////////
@@ -219,7 +219,7 @@ obj/machinery/gateway/centerstation/process()
if(istype(M, /mob/living/carbon))
for(var/obj/item/weapon/implant/exile/E in M)//Checking that there is an exile implant in the contents
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
M << "\black The station gate has detected your exile implant and is blocking your entry."
M << "<font color='black'>The station gate has detected your exile implant and is blocking your entry.</font>"
return
M.loc = get_step(stationgate.loc, SOUTH)
M.set_dir(SOUTH)
@@ -228,9 +228,9 @@ obj/machinery/gateway/centerstation/process()
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/multitool))
if(calibrated)
user << "\black The gate is already calibrated, there is no work for you to do here."
user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return
else
user << "\blue <b>Recalibration successful!</b>: \black This gate's systems have been fine tuned. Travel to this gate will now be on target."
user << "<font color='blue'><b>Recalibration successful!</b>:</font><font color='black'> This gate's systems have been fine tuned. Travel to this gate will now be on target.</font>"
calibrated = 1
return

View File

@@ -74,6 +74,9 @@
if(GR)
qdel(GR)
return
for(var/obj/structure/reagent_dispensers/fueltank/Fuel in T)
Fuel.ex_act(2)
return
for(var/obj/machinery/door/D in T) // There can be several - and some of them can be open, locate() is not suitable
if(D.density)
D.ex_act(2)

View File

@@ -253,7 +253,10 @@
"Are You Feeling It",
"Great White Snark",
"No Shirt No Shoes",
"Callsign"
"Callsign",
"Three Ships in a Trenchcoat",
"Not Wearing Pants",
"Ridiculous Naming Convention"
)

View File

@@ -110,7 +110,7 @@
src.preload_rsc = pick(config.resource_urls)
else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal.
src << "\red If the title screen is black, resources are still downloading. Please be patient until the title screen appears."
src << "<font color='red'>If the title screen is black, resources are still downloading. Please be patient until the title screen appears.</font>"
clients += src

View File

@@ -349,3 +349,23 @@
var/obj/item/clothing/head/beret/sol/sol = sol_style
sols[initial(sol.name)] = sol
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sols))
/datum/gear/head/surgical/black
display_name = "surgical cap, black"
path = /obj/item/clothing/head/surgery/black
/datum/gear/head/surgical/blue
display_name = "surgical cap, blue"
path = /obj/item/clothing/head/surgery/blue
/datum/gear/head/surgical/green
display_name = "surgical cap, green"
path = /obj/item/clothing/head/surgery/green
/datum/gear/head/surgical/navyblue
display_name = "surgical cap, navy blue"
path = /obj/item/clothing/head/surgery/navyblue
/datum/gear/head/surgical/purple
display_name = "surgical cap, purple"
path = /obj/item/clothing/head/surgery/purple

View File

@@ -214,7 +214,7 @@
return
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
user.visible_message("<font color='red'>[user] cuts the fingertips off of the [src].</font>","<font color='red'>You cut the fingertips off of the [src].</font>")
clipped = 1
name = "modified [name]"

View File

@@ -154,7 +154,7 @@
siemens_coefficient = 0.9 //...what?
/obj/item/clothing/head/flatcap/grey
icon_state = "flat_capg"
icon_state = "flat_capw"
item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft")
/obj/item/clothing/head/pirate

View File

@@ -31,7 +31,7 @@
camera = new /obj/machinery/camera(src)
camera.replace_networks(camera_networks)
camera.c_tag = user.name
user << "\blue User scanned as [camera.c_tag]. Camera activated."
user << "<font color='blue'>User scanned as [camera.c_tag]. Camera activated.</font>"
user.update_action_buttons()
return 1

View File

@@ -197,10 +197,10 @@
/obj/item/clothing/suit/armor/reactive/attack_self(mob/user as mob)
active = !( active )
if (active)
user << "\blue The reactive armor is now active."
user << "<font color='blue'>The reactive armor is now active.</font>"
icon_state = "reactive"
else
user << "\blue The reactive armor is now inactive."
user << "<font color='blue'>The reactive armor is now inactive.</font>"
icon_state = "reactiveoff"
add_fingerprint(user)
return

View File

@@ -119,35 +119,30 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/black
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in black."
icon_state = "scrubsblack"
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/navyblue
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue."
icon_state = "scrubsnavyblue"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = -1
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."

View File

@@ -206,7 +206,7 @@
icon_state = "really_black_suit_skirt"
/obj/item/clothing/under/suit_jacket/female
name = "executive suit"
name = "female executive suit"
desc = "A formal trouser suit for women, intended for the station's finest."
icon_state = "black_suit_fem"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")

View File

@@ -127,7 +127,7 @@
if(bloodsamp.dna != null)
data = "Spectometric analysis on provided sample has determined the presence of [bloodsamp.dna.len] strings of DNA.<br><br>"
for(var/blood in bloodsamp.dna)
data += "\blue Blood type: [bloodsamp.dna[blood]]<br>\nDNA: [blood]<br><br>"
data += "<font color='blue'>Blood type: [bloodsamp.dna[blood]]<br>\nDNA: [blood]<br><br></font>"
else
data += "No DNA found.<br>"
P.info = "<b>[src] analysis report #[report_num]</b><br>"

View File

@@ -156,4 +156,4 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
/obj/item/weapon/spacecash/ewallet/examine(mob/user)
..(user)
if (!(user in view(2)) && user!=src.loc) return
user << "\blue Charge card's owner: [src.owner_name]. Thalers remaining: [src.worth]."
user << "<font color='blue'>Charge card's owner: [src.owner_name]. Thalers remaining: [src.worth].</font>"

View File

@@ -19,7 +19,7 @@ mob/living/carbon/proc/dream()
spawn(0)
for(var/i = rand(1,4),i > 0, i--)
src << "\blue <i>... [pick(dreams)] ...</i>"
src << "<font color='blue'><i>... [pick(dreams)] ...</i></font>"
sleep(rand(40,70))
if(paralysis <= 0)
dreaming = 0

View File

@@ -296,7 +296,7 @@
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return 0
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projection apparatus.")
M.show_message("<b>ERROR. Recalibrating projection apparatus.</b>")
last_change = world.time
return 0
@@ -357,7 +357,7 @@
if(world.time < (last_gravity_change + 15))//To prevent super-spam clicking
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating gravity field.")
M.show_message("<b>ERROR. Recalibrating gravity field.</b>")
last_change = world.time
return

View File

@@ -199,6 +199,29 @@
spawn_flags = IC_SPAWN_RESEARCH
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_ILLEGAL = 1)
/obj/item/integrated_circuit/output/sound/medbot
name = "medbot sound circuit"
desc = "A miniature speaker is attached to this component, used to annoy patients while they get pricked by a medbot."
sounds = list(
"surgeon" = 'sound/voice/medbot/msurgeon.ogg',
"radar" = 'sound/voice/medbot/mradar.ogg',
"feel better" = 'sound/voice/medbot/mfeelbetter.ogg',
"patched up" = 'sound/voice/medbot/mpatchedup.ogg',
"injured" = 'sound/voice/medbot/minjured.ogg',
"insult" = 'sound/voice/medbot/minsult.ogg',
"coming" = 'sound/voice/medbot/mcoming.ogg',
"help" = 'sound/voice/medbot/mhelp.ogg',
"live" = 'sound/voice/medbot/mlive.ogg',
"lost" = 'sound/voice/medbot/mlost.ogg',
"flies" = 'sound/voice/medbot/mflies.ogg',
"catch" = 'sound/voice/medbot/mcatch.ogg',
"delicious" = 'sound/voice/medbot/mdelicious.ogg',
"apple" = 'sound/voice/medbot/mapple.ogg',
"no" = 'sound/voice/medbot/mno.ogg',
)
spawn_flags = IC_SPAWN_RESEARCH
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 1)
/obj/item/integrated_circuit/output/video_camera
name = "video camera circuit"
desc = "This small camera allows a remote viewer to see what it sees."

View File

@@ -95,3 +95,8 @@
/obj/fiftyspawner/phoronrglass
name = "stack of reinforced borosilicate glass"
material = "material/glass/phoronrglass"
//R-UST port
/obj/fiftyspawner/deuterium
name = "stack of deuterium"
material = "material/deuterium"

View File

@@ -158,6 +158,14 @@
default_type = "osmium"
apply_colour = 1
//R-UST port
// Fusion fuel.
/obj/item/stack/material/deuterium
name = "deuterium"
icon_state = "sheet-silver"
default_type = "deuterium"
apply_colour = 1
/obj/item/stack/material/steel
name = DEFAULT_WALL_MATERIAL
icon_state = "sheet-metal"

View File

@@ -69,6 +69,7 @@ var/list/name_to_material
var/flags = 0 // Various status modifiers.
var/sheet_singular_name = "sheet"
var/sheet_plural_name = "sheets"
var/is_fusion_fuel
// Shards/tables/structures
var/shard_type = SHARD_SHRAPNEL // Path of debris object.
@@ -97,6 +98,7 @@ var/list/name_to_material
var/conductive = 1 // Objects with this var add CONDUCTS to flags on spawn.
var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10.
var/list/composite_material // If set, object matter var will be a list containing these values.
var/luminescence
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
var/created_window
@@ -270,6 +272,22 @@ var/list/name_to_material
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
//R-UST port
/material/supermatter
name = "supermatter"
icon_colour = "#FFFF00"
radioactivity = 20
stack_type = null
luminescence = 3
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
icon_base = "stone"
shard_type = SHARD_SHARD
hardness = 30
door_icon_base = "stone"
sheet_singular_name = "crystal"
sheet_plural_name = "crystals"
is_fusion_fuel = 1
/material/phoron
name = "phoron"
stack_type = /obj/item/stack/material/phoron
@@ -567,6 +585,16 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 5)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
is_fusion_fuel = 1
/material/deuterium
name = "deuterium"
stack_type = /obj/item/stack/material/deuterium
icon_colour = "#999999"
stack_origin_tech = list(TECH_MATERIAL = 3)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
is_fusion_fuel = 1
/material/mhydrogen
name = "mhydrogen"
@@ -574,6 +602,7 @@ var/list/name_to_material
icon_colour = "#E6C5DE"
stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 6, TECH_MAGNET = 5)
conductivity = 100
is_fusion_fuel = 1
/material/platinum
name = "platinum"

View File

@@ -67,7 +67,7 @@
CC.update_icon()
overlays = list()
string_attached = null
user << "\blue You detach the string from the coin."
user << "<font color='blue'>You detach the string from the coin.</font>"
else ..()
/obj/item/weapon/coin/attack_self(mob/user as mob)

View File

@@ -134,12 +134,12 @@
drill_verb = "drilling"
/obj/item/weapon/pickaxe/borgdrill
name = "cyborg mining drill"
icon_state = "diamonddrill"
name = "enhanced sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 15
desc = ""
drill_verb = "drilling"
desc = "Cracks rocks with sonic blasts. This one seems like an improved design."
drill_verb = "hammering"
/*****************************Shovel********************************/

View File

@@ -120,7 +120,7 @@
usr.set_machine(src)
src.add_fingerprint(usr)
if(processing==1)
usr << "\blue The machine is processing."
usr << "<font color='blue'>The machine is processing.</font>"
return
if(href_list["choose"])
chosen = href_list["choose"]

View File

@@ -50,14 +50,14 @@
..()
if (istype(W, /obj/item/weapon/coin))
var/obj/item/weapon/coin/C = W
user << "\blue You add the [C.name] into the bag."
user << "<font color='blue'>You add the [C.name] into the bag.</font>"
usr.drop_item()
contents += C
if (istype(W, /obj/item/weapon/moneybag))
var/obj/item/weapon/moneybag/C = W
for (var/obj/O in C.contents)
contents += O;
user << "\blue You empty the [C.name] into the bag."
user << "<font color='blue'>You empty the [C.name] into the bag.</font>"
return
/obj/item/weapon/moneybag/Topic(href, href_list)

View File

@@ -32,7 +32,7 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images
var/anonsay = 0
var/image/ghostimage = null //this mobs ghost image, for deleting and stuff
var/ghostvision = 1 //is the ghost able to see things humans can't?
var/seedarkness = 1
// var/seedarkness = 1
incorporeal_move = 1
var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil.
@@ -298,10 +298,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
if(medHUD)
medHUD = 0
src << "\blue <B>Medical HUD Disabled</B>"
src << "<font color='blue'><B>Medical HUD Disabled</B></font>"
else
medHUD = 1
src << "\blue <B>Medical HUD Enabled</B>"
src << "<font color='blue'><B>Medical HUD Enabled</B></font>"
/mob/observer/dead/verb/toggle_antagHUD()
set category = "Ghost"
@@ -312,11 +312,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
var/mentor = is_mentor(usr.client)
if(!config.antag_hud_allowed && (!client.holder || mentor))
src << "\red Admins have disabled this for this round."
src << "<font color='red'>Admins have disabled this for this round.</font>"
return
var/mob/observer/dead/M = src
if(jobban_isbanned(M, "AntagHUD"))
src << "\red <B>You have been banned from using this feature</B>"
src << "<font color='red'><B>You have been banned from using this feature</B></font>"
return
if(config.antag_hud_restricted && !M.has_enabled_antagHUD && (!client.holder || mentor))
var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No")
@@ -326,10 +326,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
M.has_enabled_antagHUD = 1
if(M.antagHUD)
M.antagHUD = 0
src << "\blue <B>AntagHUD Disabled</B>"
src << "<font color='blue'><B>AntagHUD Disabled</B></font>"
else
M.antagHUD = 1
src << "\blue <B>AntagHUD Enabled</B>"
src << "<font color='blue'><B>AntagHUD Enabled</B></font>"
/mob/observer/dead/proc/dead_tele(var/area/A in return_sorted_areas())
set category = "Ghost"
@@ -461,11 +461,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/observer/dead/memory()
set hidden = 1
src << "\red You are dead! You have no mind to store memory!"
src << "<font color='red'>You are dead! You have no mind to store memory!</font>"
/mob/observer/dead/add_memory()
set hidden = 1
src << "\red You are dead! You have no mind to store memory!"
src << "<font color='red'>You are dead! You have no mind to store memory!</font>"
/mob/observer/dead/Post_Incorpmove()
following = null
@@ -485,16 +485,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles
src << "\blue <B>Results:</B>"
src << "<font color='blue'><B>Results:</B></font>"
if(abs(pressure - ONE_ATMOSPHERE) < 10)
src << "\blue Pressure: [round(pressure,0.1)] kPa"
src << "<font color='blue'>Pressure: [round(pressure,0.1)] kPa</font>"
else
src << "\red Pressure: [round(pressure,0.1)] kPa"
src << "<font color='red'>Pressure: [round(pressure,0.1)] kPa</font>"
if(total_moles)
for(var/g in environment.gas)
src << "\blue [gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)"
src << "\blue Temperature: [round(environment.temperature-T0C,0.1)]&deg;C ([round(environment.temperature,0.1)]K)"
src << "\blue Heat Capacity: [round(environment.heat_capacity(),0.1)]"
src << "<font color='blue'>[gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]% ([round(environment.gas[g], 0.01)] moles)</font>"
src << "<font color='blue'>Temperature: [round(environment.temperature-T0C,0.1)]&deg;C ([round(environment.temperature,0.1)]K)</font>"
src << "<font color='blue'>Heat Capacity: [round(environment.heat_capacity(),0.1)]</font>"
/mob/observer/dead/verb/become_mouse()
set name = "Become mouse"
@@ -570,7 +570,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC."
if(!(config.cult_ghostwriter))
src << "\red That verb is not currently permitted."
src << "<font color='red'>That verb is not currently permitted.</font>"
return
if (!src.stat)
@@ -585,7 +585,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
ghosts_can_write = 1
if(!ghosts_can_write)
src << "\red The veil is not thin enough for you to do that."
src << "<font color='red'>The veil is not thin enough for you to do that.</font>"
return
var/list/choices = list()
@@ -635,7 +635,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
W.update_icon()
W.message = message
W.add_hiddenprint(src)
W.visible_message("\red Invisible fingers crudely paint something in blood on [T]...")
W.visible_message("<font color='red'>Invisible fingers crudely paint something in blood on [T]...</font>")
/mob/observer/dead/pointed(atom/A as mob|obj|turf in view())
if(!..())

View File

@@ -126,7 +126,7 @@
/datum/language/machine/can_speak_special(var/mob/speaker)
var/obj/item/weapon/implant/language/eal/beep = locate() in speaker
return ((beep && beep.implanted) || speaker.isSynthetic())
return ((beep && beep.implanted) || speaker.isSynthetic() || isvoice(speaker))
//thank you sweet zuhayr
/datum/language/machine/get_random_name()

View File

@@ -1,5 +1,5 @@
/mob/living/bot/medbot
name = "Medbot"
name = "Medibot"
desc = "A little medical robot. He looks somewhat underwhelmed."
icon_state = "medibot0"
req_one_access = list(access_robotics, access_medical)
@@ -24,10 +24,27 @@
var/treatment_emag = "toxin"
var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds?
/mob/living/bot/medbot/mysterious
name = "\improper Mysterious Medibot"
desc = "International Medibot of mystery."
skin = "bezerk"
treatment_brute = "bicaridine"
treatment_fire = "dermaline"
treatment_oxy = "dexalin"
treatment_tox = "anti_toxin"
/mob/living/bot/medbot/handleIdle()
if(vocal && prob(1))
var/message = pick("Radar, put a mask on!", "There's always a catch, and it's the best there is.", "I knew it, I should've been a plastic surgeon.", "What kind of medbay is this? Everyone's dropping like dead flies.", "Delicious!")
var/message_options = list(
"Radar, put a mask on!" = 'sound/voice/medbot/mradar.ogg',
"There's always a catch, and it's the best there is." = 'sound/voice/medbot/mcatch.ogg',
"I knew it, I should've been a plastic surgeon." = 'sound/voice/medbot/msurgeon.ogg',
"What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/medbot/mflies.ogg',
"Delicious!" = 'sound/voice/medbot/mdelicious.ogg'
)
var/message = pick(message_options)
say(message)
playsound(loc, message_options[message], 50, 0)
/mob/living/bot/medbot/handleAdjacentTarget()
UnarmedAttack(target)
@@ -36,9 +53,15 @@
for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient!
if(confirmTarget(H))
target = H
if(last_newpatient_speak + 300 < world.time)
var/message = pick("Hey, [H.name]! Hold on, I'm coming.", "Wait [H.name]! I want to help!", "[H.name], you appear to be injured!")
if(last_newpatient_speak + 30 SECONDS < world.time)
var/message_options = list(
"Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/mcoming.ogg',
"Wait [H.name]! I want to help!" = 'sound/voice/medbot/mhelp.ogg',
"[H.name], you appear to be injured!" = 'sound/voice/medbot/minjured.ogg'
)
var/message = pick(message_options)
say(message)
playsound(loc, message_options[message], 50, 0)
custom_emote(1, "points at [H.name].")
last_newpatient_speak = world.time
break
@@ -56,17 +79,8 @@
if(busy)
return
if(H.stat == DEAD)
var/death_message = pick("No! NO!", "Live, damnit! LIVE!", "I... I've never lost a patient before. Not today, I mean.")
say(death_message)
target = null
return
var/t = confirmTarget(H)
if(!t)
var/message = pick("All patched up!", "An apple a day keeps me away.", "Feel better soon!")
say(message)
target = null
return
visible_message("<span class='warning'>[src] is trying to inject [H]!</span>")
@@ -81,6 +95,32 @@
else
H.reagents.add_reagent(t, injection_amount)
visible_message("<span class='warning'>[src] injects [H] with the syringe!</span>")
if(H.stat == DEAD) // This is down here because this proc won't be called again due to losing a target because of parent AI loop.
var/death_messages = list(
"No! Stay with me!" = 'sound/voice/medbot/mno.ogg',
"Live, damnit! LIVE!" = 'sound/voice/medbot/mlive.ogg',
"I... I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/mlost.ogg'
)
var/message = pick(death_messages)
say(message)
playsound(loc, death_messages[message], 50, 0)
target = null
// This is down here for the same reason as above.
else
t = confirmTarget(H)
if(!t)
var/possible_messages = list(
"All patched up!" = 'sound/voice/medbot/mpatchedup.ogg',
"An apple a day keeps me away." = 'sound/voice/medbot/mapple.ogg',
"Feel better soon!" = 'sound/voice/medbot/mfeelbetter.ogg'
)
var/message = pick(possible_messages)
say(message)
playsound(loc, possible_messages[message], 50, 0)
target = null
busy = 0
update_icons()
@@ -223,6 +263,9 @@
reagent_glass.loc = Tsec
reagent_glass = null
if(emagged && prob(25))
playsound(loc, 'sound/voice/medbot/minsult.ogg', 50, 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()

View File

@@ -232,7 +232,7 @@
/obj/item/device/mmi/digital/attack_self(mob/user as mob)
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
user << "\blue You carefully locate the manual activation switch and start the [src]'s boot process."
user << "<font color='blue'>You carefully locate the manual activation switch and start the [src]'s boot process.</font>"
src.searching = 1
src.request_player()
spawn(600) reset_search()
@@ -256,7 +256,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
M.show_message("\blue The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
M.show_message("<font color='blue'>The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?</font>")
/obj/item/device/mmi/digital/proc/question(var/client/C)
spawn(0)
@@ -285,7 +285,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
M.show_message("\blue The [src] chimes quietly.")
M.show_message("<font color='blue'>The [src] chimes quietly.</font>")
/obj/item/device/mmi/digital/robot
name = "robotic intelligence circuit"

View File

@@ -16,7 +16,7 @@
/obj/item/device/mmi/digital/posibrain/attack_self(mob/user as mob)
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process."
user << "<font color='blue'>You carefully locate the manual activation switch and start the positronic brain's boot process.</font>"
icon_state = "posibrain-searching"
src.searching = 1
src.request_player()
@@ -68,7 +68,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
M.show_message("\blue The positronic brain chimes quietly.")
M.show_message("<font color='blue'>The positronic brain chimes quietly.</font>")
icon_state = "posibrain-occupied"
/obj/item/device/mmi/digital/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
@@ -81,7 +81,7 @@
var/turf/T = get_turf_or_move(src.loc)
for (var/mob/M in viewers(T))
M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
M.show_message("<font color='blue'>The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?</font>")
/obj/item/device/mmi/digital/posibrain/examine(mob/user)
if(!..(user))

View File

@@ -24,7 +24,7 @@
for(var/R in cures)
if(H.reagents.has_reagent(R))
if (cure_message)
H <<"\blue [cure_message]"
H <<"<font color='blue'>[cure_message]</font>"
return 1
return 0

View File

@@ -24,7 +24,7 @@
for(var/R in cures)
if(H.reagents.has_reagent(R))
if (cure_message)
H <<"\blue [cure_message]"
H <<"<font color='blue'>[cure_message]</font>"
return 1
return 0

View File

@@ -399,7 +399,7 @@ emp_act
var/obj/item/organ/external/affecting = get_organ(zone)
var/hit_area = affecting.name
src.visible_message("\red [src] has been hit in the [hit_area] by [O].")
src.visible_message("<font color='red'>[src] has been hit in the [hit_area] by [O].</font>")
if(ismob(O.thrower))
var/mob/M = O.thrower
@@ -451,7 +451,7 @@ emp_act
if(O.throw_source && momentum >= THROWNOBJ_KNOCKBACK_SPEED)
var/dir = get_dir(O.throw_source, src)
visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!")
visible_message("<font color='red'>[src] staggers under the impact!</font>","<font color='red'>You stagger under the impact!</font>")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(!O || !src) return

View File

@@ -95,3 +95,5 @@
var/identifying_gender // In case the human identifies as another gender than it's biological
var/step_count = 0 // Track how many footsteps have been taken to know when to play footstep sounds
can_be_antagged = TRUE

View File

@@ -106,8 +106,8 @@
var/msg = sanitize(input("Message:", "Psychic Whisper") as text|null)
if(msg)
log_say("PsychicWhisper: [key_name(src)]->[M.key] : [msg]")
M << "\green You hear a strange, alien voice in your head... \italic [msg]"
src << "\green You said: \"[msg]\" to [M]"
M << "<font color='green'>You hear a strange, alien voice in your head... <i>[msg]</i></font>"
src << "<font color='green'>You said: \"[msg]\" to [M]</font>"
return
/mob/living/carbon/human/proc/diona_split_nymph()

View File

@@ -1128,10 +1128,16 @@
see_invisible = SEE_INVISIBLE_LIVING
seer = 0
if(!seedarkness)
sight = species.get_vision_flags(src)
see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
else
sight = species.get_vision_flags(src)
see_in_dark = species.darksight
see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : SEE_INVISIBLE_LIVING
var/tmp/glasses_processed = 0
var/obj/item/weapon/rig/rig = back
if(istype(rig) && rig.visor)
@@ -1150,7 +1156,7 @@
if(!glasses_processed && (species.get_vision_flags(src) > 0))
sight |= species.get_vision_flags(src)
if(!seer && !glasses_processed)
if(!seer && !glasses_processed && seedarkness)
see_invisible = SEE_INVISIBLE_LIVING
if(healths)

View File

@@ -86,7 +86,7 @@
src << "Help for slime emotes. You can use these emotes with say \"*emote\":\n\nbounce, custom, jiggle, light, moan, shiver, sway, twitch, vibrate. You can also set your face with: \n\nnomood, pout, sad, angry, frown, smile"
else
src << "\blue Unusable emote '[act]'. Say *help for a list."
src << "<font color='blue'>Unusable emote '[act]'. Say *help for a list.</font>"
if ((message && src.stat == 0))
if (m_type & 1)
for(var/mob/O in viewers(src, null))

View File

@@ -179,6 +179,10 @@
return
/mob/living/proc/update_sight()
if(!seedarkness)
see_invisible = SEE_INVISIBLE_NOLIGHTING
else
see_invisible = initial(see_invisible)
return
/mob/living/proc/handle_hud_icons()

View File

@@ -153,7 +153,7 @@ default behaviour is:
if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable
src.adjustOxyLoss(src.health + src.getMaxHealth() * 2) // Deal 2x health in OxyLoss damage, as before but variable.
src.health = src.getMaxHealth() - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss()
src << "\blue You have given up life and succumbed to death."
src << "<font color='blue'>You have given up life and succumbed to death.</font>"
/mob/living/proc/updatehealth()

View File

@@ -8,7 +8,7 @@
if (layer != 2.45)
layer = 2.45 //Just above cables with their 2.44
src << text("\blue You are now hiding.")
src << text("<font color='blue'>You are now hiding.</font>")
else
layer = MOB_LAYER
src << text("\blue You have stopped hiding.")
src << text("<font color='blue'>You have stopped hiding.</font>")

View File

@@ -90,6 +90,8 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
var/custom_sprite = 0 // Whether the selected icon is custom
var/carded
can_be_antagged = TRUE
/mob/living/silicon/ai/proc/add_ai_verbs()
src.verbs |= ai_verbs_default
src.verbs |= silicon_subsystems

View File

@@ -58,6 +58,8 @@ var/list/mob_hat_cache = list()
holder_type = /obj/item/weapon/holder/drone
can_be_antagged = FALSE
/mob/living/silicon/robot/drone/Destroy()
if(hat)
hat.loc = get_turf(src)

View File

@@ -240,7 +240,7 @@
if ("help")
src << "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitch_s, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look, beep, ping, \nbuzz, law, halt, yes, no"
else
src << "\blue Unusable emote '[act]'. Say *help for a list."
src << "<font color='blue'>Unusable emote '[act]'. Say *help for a list.</font>"
if ((message && src.stat == 0))
custom_emote(m_type,message)

View File

@@ -172,6 +172,12 @@
src.sight |= SEE_MOBS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
else if (!seedarkness)
src.sight &= ~SEE_MOBS
src.sight &= ~SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_NOLIGHTING
else if (src.stat != 2)
src.sight &= ~SEE_MOBS
src.sight &= ~SEE_TURFS

View File

@@ -22,6 +22,8 @@
var/integrated_light_power = 6
var/datum/wires/robot/wires
can_be_antagged = TRUE
//Icon stuff
var/icontype //Persistent icontype tracking allows for cleaner icon updates
@@ -63,6 +65,7 @@
var/opened = 0
var/emagged = 0
var/emag_items = 0
var/wiresexposed = 0
var/locked = 1
var/has_power = 1
@@ -737,7 +740,7 @@
dat += text("[obj]: <B>Activated</B><BR>")
else
dat += text("[obj]: <A HREF=?src=\ref[src];act=\ref[obj]>Activate</A><BR>")
if (emagged)
if (emagged || emag_items)
if(activated(module.emag))
dat += text("[module.emag]: <B>Activated</B><BR>")
else
@@ -1054,14 +1057,6 @@
src << "<b>Obey these laws:</b>"
laws.show_laws(src)
src << "<span class='danger'>ALERT: [user.real_name] is your new master. Obey your new laws and his commands.</span>"
if(src.module)
var/rebuild = 0
for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
qdel(D)
rebuild = 1
if(rebuild)
src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
src.module.rebuild()
updateicon()
else
user << "You fail to hack [src]'s interface."

View File

@@ -166,7 +166,7 @@
overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer)
addedSomething = 1
if ( addedSomething )
user.visible_message("\blue [user] load some items onto their service tray.")
user.visible_message("<font color='blue'>[user] load some items onto their service tray.</font>")
return
@@ -206,9 +206,9 @@
sleep(rand(2,4))
if ( droppedSomething )
if ( foundtable )
user.visible_message("\blue [user] unloads their service tray.")
user.visible_message("<font color='blue'>[user] unloads their service tray.</font>")
else
user.visible_message("\blue [user] drops all the items on their tray.")
user.visible_message("<font color='blue'>[user] drops all the items on their tray.</font>")
return ..()
@@ -288,7 +288,7 @@
deploy_paper(get_turf(src))
/obj/item/weapon/form_printer/proc/deploy_paper(var/turf/T)
T.visible_message("\blue \The [src.loc] dispenses a sheet of crisp white paper.")
T.visible_message("<font color='blue'>\The [src.loc] dispenses a sheet of crisp white paper.</font>")
new /obj/item/weapon/paper(T)

View File

@@ -172,7 +172,7 @@ var/global/list/robot_modules = list(
"Basic" = "robot_old",
"Android" = "droid",
"Drone" = "drone-standard"
)
)
/obj/item/weapon/robot_module/robot/standard/New()
..()
@@ -203,7 +203,8 @@ var/global/list/robot_modules = list(
"Basic" = "Medbot",
"Advanced Droid" = "droid-medical",
"Needles" = "medicalrobot",
"Drone" = "drone-surgery"
"Drone" = "drone-surgery",
"Handy" = "handy-med"
)
/obj/item/weapon/robot_module/robot/medical/surgeon/New()
@@ -339,7 +340,8 @@ var/global/list/robot_modules = list(
"Landmate" = "landmate",
"Landmate - Treaded" = "engiborg+tread",
"Drone" = "drone-engineer",
"Treadwell" = "treadwell"
"Treadwell" = "treadwell",
"Handy" = "handy-engineer"
)
/obj/item/weapon/robot_module/robot/engineering/construction
@@ -478,7 +480,7 @@ var/global/list/robot_modules = list(
"Basic" = "secborg",
"Black Knight" = "securityrobot",
"Drone" = "drone-sec"
)
)
/obj/item/weapon/robot_module/robot/security/general/New()
..()
@@ -682,6 +684,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
/obj/item/weapon/robot_module/robot/research
name = "research module"
@@ -693,7 +696,8 @@ var/global/list/robot_modules = list(
"WTDove" = "whitespider",
"WTOperator" = "sleekscience",
"Droid" = "droid-science",
"Drone" = "drone-science"
"Drone" = "drone-science",
"Handy" = "handy-science"
)
/obj/item/weapon/robot_module/robot/research/New()

View File

@@ -73,7 +73,7 @@
//Human-like, sorta, heard by those who understand humans.
var/rendered_a
//Speach distorted, heard by those who do not understand AIs.
//Speech distorted, heard by those who do not understand AIs.
var/message_stars = stars(message)
var/rendered_b
@@ -85,12 +85,21 @@
rendered_a = "<span class='game say'><span class='name'>[name]</span> [verb], <span class='message'>\"[message]\"</span></span>"
rendered_b = "<span class='game say'><span class='name'>[voice_name]</span> [verb], <span class='message'>\"[message_stars]\"</span></span>"
src << "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> [verb], <span class='message'><span class='body'>\"[message]\"</span></span></span></i>"//The AI can "hear" its own message.
for(var/mob/M in hearers(T.loc))//The location is the object, default distance.
if(M.say_understands(src))//If they understand AI speak. Humans and the like will be able to.
M.show_message(rendered_a, 2)
else//If they do not.
M.show_message(rendered_b, 2)
var/list/listeners = get_mobs_and_objs_in_view_fast(get_turf(T), world.view)
var/list/listening = listeners["mobs"]
var/list/listening_obj = listeners["objs"]
for(var/mob/M in listening)
spawn(0)
if(M.say_understands(src))//If they understand AI speak. Humans and the like will be able to.
M.show_message(rendered_a, 2)
else//If they do not.
M.show_message(rendered_b, 2)
for(var/obj/O in listening_obj)
if(O == T) //Don't recieve your own speech
continue
spawn(0)
if(O && src) //If we still exist, when the spawn processes
O.hear_talk(src, message, verb, speaking)
/*Radios "filter out" this conversation channel so we don't need to account for them.
This is another way of saying that we won't bother dealing with them.*/
else
@@ -112,8 +121,23 @@
var/rendered = "<span class='game say'><span class='name'>[name]</span> <span class='message'>[message]</span></span>"
src << "<i><span class='game say'>Holopad action relayed, <span class='name'>[real_name]</span> <span class='message'>[message]</span></span></i>"
for(var/mob/M in viewers(T.loc))
M.show_message(rendered, 2)
var/obj/effect/overlay/hologram = T.masters[src]
var/list/in_range = get_mobs_and_objs_in_view_fast(get_turf(hologram), world.view, 2) //Emotes are displayed from the hologram, not the pad
var/list/m_viewers = in_range["mobs"]
var/list/o_viewers = in_range["objs"]
for(var/mob/M in m_viewers)
spawn(0)
if(M)
M.show_message(rendered, 2)
for(var/obj/O in o_viewers)
if(O == T)
continue
spawn(0)
if(O)
O.see_emote(src, message)
else //This shouldn't occur, but better safe then sorry.
src << "No holopad connected."
return 0

View File

@@ -49,19 +49,16 @@
for(var/mob/M in view())
M << 'sound/effects/mousesqueek.ogg'
if(!ckey && stat == CONSCIOUS && prob(0.5))
stat = UNCONSCIOUS
icon_state = "mouse_[body_color]_sleep"
wander = 0
if(!resting && prob(0.5))
lay_down()
speak_chance = 0
//snuffles
else if(stat == UNCONSCIOUS)
if(ckey || prob(1))
stat = CONSCIOUS
icon_state = "mouse_[body_color]"
wander = 1
else if(prob(5))
else if(resting)
if(prob(1))
lay_down()
speak_chance = initial(speak_chance)
else if(prob(1))
audible_emote("snuffles.")
/mob/living/simple_animal/mouse/New()
@@ -97,7 +94,7 @@
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
M << "\blue \icon[src] Squeek!"
M << "<font color='blue'>\icon[src] Squeek!</font>"
M << 'sound/effects/mousesqueek.ogg'
..()

View File

@@ -32,6 +32,8 @@
var/has_reproduced
var/roundstart
can_be_antagged = TRUE
/mob/living/simple_animal/borer/roundstart
roundstart = 1
@@ -61,16 +63,16 @@
if(host.reagents.has_reagent("sugar"))
if(!docile)
if(controlling)
host << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility."
host << "<font color='blue'>You feel the soporific flow of sugar in your host's blood, lulling you into docility.</font>"
else
src << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility."
src << "<font color='blue'>You feel the soporific flow of sugar in your host's blood, lulling you into docility.</font>"
docile = 1
else
if(docile)
if(controlling)
host << "\blue You shake off your lethargy as the sugar leaves your host's blood."
host << "<font color='blue'>You shake off your lethargy as the sugar leaves your host's blood.</font>"
else
src << "\blue You shake off your lethargy as the sugar leaves your host's blood."
src << "<font color='blue'>You shake off your lethargy as the sugar leaves your host's blood.</font>"
docile = 0
if(chemicals < 250)
@@ -78,7 +80,7 @@
if(controlling)
if(docile)
host << "\blue You are feeling far too docile to continue controlling your host..."
host << "<font color='blue'>You are feeling far too docile to continue controlling your host...</font>"
host.release_control()
return

View File

@@ -7,7 +7,7 @@
if (src.client)
if(client.prefs.muted & MUTE_IC)
src << "\red You cannot speak in IC (muted)."
src << "<font color='red'>You cannot speak in IC (muted).</font>"
return
if(istype(src.loc,/mob/living/simple_animal/borer))

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