mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Hopefully fixes merge conflicts.
This commit is contained in:
@@ -5,7 +5,7 @@ sudo: false
|
||||
env:
|
||||
BYOND_MAJOR="511"
|
||||
BYOND_MINOR="1381"
|
||||
MACRO_COUNT=209
|
||||
MACRO_COUNT=4
|
||||
|
||||
cache:
|
||||
directories:
|
||||
|
||||
10
README.md
10
README.md
@@ -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.
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ var/global/list/engineering_networks = list(
|
||||
|
||||
/obj/machinery/camera/network/thunder
|
||||
network = list(NETWORK_THUNDER)
|
||||
invuln = 1
|
||||
|
||||
// EMP
|
||||
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -281,4 +281,17 @@
|
||||
/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy/New()
|
||||
..()
|
||||
new /obj/item/weapon/syndie/c4explosive/heavy/super_heavy(src)
|
||||
new /obj/item/weapon/screwdriver(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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
@@ -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)
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -348,4 +348,24 @@
|
||||
for(var/sol_style in typesof(/obj/item/clothing/head/beret/sol))
|
||||
var/obj/item/clothing/head/beret/sol/sol = sol_style
|
||||
sols[initial(sol.name)] = sol
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sols))
|
||||
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
|
||||
@@ -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]"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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")
|
||||
@@ -775,4 +775,4 @@
|
||||
desc = "A flimsy examination gown, the back ties never close."
|
||||
icon_state = "medicalgown"
|
||||
worn_state = "medicalgown"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -94,4 +94,9 @@
|
||||
|
||||
/obj/fiftyspawner/phoronrglass
|
||||
name = "stack of reinforced borosilicate glass"
|
||||
material = "material/glass/phoronrglass"
|
||||
material = "material/glass/phoronrglass"
|
||||
|
||||
//R-UST port
|
||||
/obj/fiftyspawner/deuterium
|
||||
name = "stack of deuterium"
|
||||
material = "material/deuterium"
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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********************************/
|
||||
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)]°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)]°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(!..())
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>")
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
..()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user