mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 22:17:32 +01:00
Merge branch 'master' into tcomms-overhaul
This commit is contained in:
@@ -51,7 +51,7 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons
|
||||
|
||||
#ifdef TESTING
|
||||
var/msg = "Permission Sets Built:\n"
|
||||
for(var/rank in admin_ranks)
|
||||
for(var/rank in GLOB.admin_ranks)
|
||||
msg += "\t[rank] - [GLOB.admin_ranks[rank]]\n"
|
||||
testing(msg)
|
||||
#endif
|
||||
@@ -142,12 +142,12 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons
|
||||
|
||||
|
||||
#ifdef TESTING
|
||||
/client/verb/changerank(newrank in admin_ranks)
|
||||
/client/verb/changerank(newrank in GLOB.admin_ranks)
|
||||
if(holder)
|
||||
holder.rank = newrank
|
||||
holder.rights = admin_ranks[newrank]
|
||||
holder.rights = GLOB.admin_ranks[newrank]
|
||||
else
|
||||
holder = new /datum/admins(newrank,admin_ranks[newrank],ckey)
|
||||
holder = new /datum/admins(newrank,GLOB.admin_ranks[newrank],ckey)
|
||||
remove_admin_verbs()
|
||||
holder.associate(src)
|
||||
|
||||
|
||||
@@ -68,7 +68,6 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list(
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/aooc,
|
||||
/client/proc/freeze,
|
||||
/client/proc/freezemecha,
|
||||
/client/proc/alt_check,
|
||||
/client/proc/secrets,
|
||||
/client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */
|
||||
|
||||
@@ -5,121 +5,99 @@
|
||||
//////Allows admin's to right click on any mob/mech and freeze them in place.///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
GLOBAL_LIST_EMPTY(frozen_mob_list)
|
||||
/client/proc/freeze(var/mob/living/M as mob in GLOB.mob_list)
|
||||
|
||||
GLOBAL_LIST_EMPTY(frozen_atom_list) // A list of admin-frozen atoms.
|
||||
|
||||
/client/proc/freeze(atom/movable/M)
|
||||
set name = "Freeze"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(!istype(M))
|
||||
return
|
||||
M.admin_Freeze(src)
|
||||
|
||||
if(M in GLOB.frozen_mob_list)
|
||||
M.admin_unFreeze(src)
|
||||
else
|
||||
M.admin_Freeze(src)
|
||||
/// Created here as a base proc. Override as needed for any type of object or mob you want able to be frozen.
|
||||
/atom/movable/proc/admin_Freeze(client/admin)
|
||||
to_chat(admin, "<span class='warning'>Freeze is not able to be called on this type of object.</span")
|
||||
return
|
||||
|
||||
///mob freeze procs
|
||||
|
||||
/mob/living/var/frozen = null //used for preventing attacks on admin-frozen mobs
|
||||
/mob/living/var/admin_prev_sleeping = 0 //used for keeping track of previous sleeping value with admin freeze
|
||||
/mob/living
|
||||
/// Used for preventing attacks on admin-frozen mobs.
|
||||
var/frozen = null
|
||||
/// Used for keeping track of previous sleeping value with admin freeze.
|
||||
var/admin_prev_sleeping = 0
|
||||
|
||||
/mob/living/proc/admin_Freeze(client/admin, skip_overlays = FALSE)
|
||||
if(istype(admin))
|
||||
to_chat(src, "<b><font color= red>You have been frozen by [admin]</b></font>")
|
||||
message_admins("<span class='notice'>[key_name_admin(admin)]</span> froze [key_name_admin(src)]")
|
||||
log_admin("[key_name(admin)] froze [key_name(src)]")
|
||||
/mob/living/admin_Freeze(client/admin, skip_overlays = FALSE, mech = null)
|
||||
if(!istype(admin))
|
||||
return
|
||||
|
||||
var/obj/effect/overlay/adminoverlay/AO = new
|
||||
if(skip_overlays)
|
||||
overlays += AO
|
||||
if(!(src in GLOB.frozen_atom_list))
|
||||
GLOB.frozen_atom_list += src
|
||||
|
||||
anchored = TRUE
|
||||
canmove = FALSE
|
||||
admin_prev_sleeping = sleeping
|
||||
AdjustSleeping(20000)
|
||||
frozen = AO
|
||||
if(!(src in GLOB.frozen_mob_list))
|
||||
GLOB.frozen_mob_list += src
|
||||
var/obj/effect/overlay/adminoverlay/AO = new
|
||||
if(skip_overlays)
|
||||
overlays += AO
|
||||
|
||||
/mob/living/proc/admin_unFreeze(client/admin, skip_overlays = FALSE)
|
||||
if(istype(admin))
|
||||
to_chat(src, "<b><font color= red>You have been unfrozen by [admin]</b></font>")
|
||||
message_admins("<span class='notice'>[key_name_admin(admin)] unfroze [key_name_admin(src)]</span>")
|
||||
log_admin("[key_name(admin)] unfroze [key_name(src)]")
|
||||
anchored = TRUE
|
||||
canmove = FALSE
|
||||
admin_prev_sleeping = sleeping
|
||||
AdjustSleeping(20000)
|
||||
frozen = AO
|
||||
|
||||
if(skip_overlays)
|
||||
overlays -= frozen
|
||||
else
|
||||
GLOB.frozen_atom_list -= src
|
||||
|
||||
anchored = FALSE
|
||||
canmove = TRUE
|
||||
frozen = null
|
||||
SetSleeping(admin_prev_sleeping)
|
||||
admin_prev_sleeping = null
|
||||
if(src in GLOB.frozen_mob_list)
|
||||
GLOB.frozen_mob_list -= src
|
||||
if(skip_overlays)
|
||||
overlays -= frozen
|
||||
|
||||
anchored = FALSE
|
||||
canmove = TRUE
|
||||
frozen = null
|
||||
SetSleeping(admin_prev_sleeping)
|
||||
admin_prev_sleeping = null
|
||||
|
||||
to_chat(src, "<b><font color= red>You have been [frozen ? "frozen" : "unfrozen"] by [admin]</b></font>")
|
||||
message_admins("<span class='notice'>[key_name_admin(admin)] [frozen ? "froze" : "unfroze"] [key_name_admin(src)] [mech ? "in a [mech]" : ""]</span>")
|
||||
log_admin("[key_name(admin)] [frozen ? "froze" : "unfroze"] [key_name(src)] [mech ? "in a [mech]" : ""]")
|
||||
update_icons()
|
||||
|
||||
return frozen
|
||||
|
||||
|
||||
/mob/living/simple_animal/slime/admin_Freeze(admin)
|
||||
..(admin)
|
||||
adjustHealth(1000) //arbitrary large value
|
||||
|
||||
/mob/living/simple_animal/slime/admin_unFreeze(admin)
|
||||
..(admin)
|
||||
revive()
|
||||
|
||||
if(..()) // The result of the parent call here will be the value of the mob's `frozen` variable after they get (un)frozen.
|
||||
adjustHealth(1000) //arbitrary large value
|
||||
else
|
||||
revive()
|
||||
|
||||
/mob/living/simple_animal/var/admin_prev_health = null
|
||||
|
||||
/mob/living/simple_animal/admin_Freeze(admin)
|
||||
..(admin)
|
||||
admin_prev_health = health
|
||||
health = 0
|
||||
|
||||
/mob/living/simple_animal/admin_unFreeze(admin)
|
||||
..(admin)
|
||||
revive()
|
||||
overlays.Cut()
|
||||
if(..()) // The result of the parent call here will be the value of the mob's `frozen` variable after they get (un)frozen.
|
||||
admin_prev_health = health
|
||||
health = 0
|
||||
else
|
||||
revive()
|
||||
overlays.Cut()
|
||||
|
||||
//////////////////////////Freeze Mech
|
||||
|
||||
/client/proc/freezemecha(var/obj/mecha/O as obj in GLOB.mechas_list)
|
||||
set name = "Freeze Mech"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/obj/mecha/M = O
|
||||
if(!istype(M,/obj/mecha))
|
||||
to_chat(src, "<span class='danger'>This can only be used on mechs!</span>")
|
||||
return
|
||||
/obj/mecha/admin_Freeze(client/admin)
|
||||
var/obj/effect/overlay/adminoverlay/freeze_overlay = new
|
||||
if(!frozen)
|
||||
GLOB.frozen_atom_list += src
|
||||
frozen = TRUE
|
||||
overlays += freeze_overlay
|
||||
else
|
||||
if(usr)
|
||||
if(usr.client)
|
||||
if(usr.client.holder)
|
||||
var/adminomaly = new/obj/effect/overlay/adminoverlay
|
||||
if(M.can_move == 1)
|
||||
M.can_move = 0
|
||||
M.overlays += adminomaly
|
||||
if(M.occupant)
|
||||
to_chat(M.occupant, "<b><font color= red>You have been frozen by <a href='?priv_msg=[usr.client.UID()]'>[key]</a></b></font>")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] froze [key_name(M.occupant)] in a [M.name]</span>")
|
||||
log_admin("[key_name(usr)] froze [key_name(M.occupant)] in a [M.name]")
|
||||
else
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] froze an empty [M.name]</span>")
|
||||
log_admin("[key_name(usr)] froze an empty [M.name]")
|
||||
else if(M.can_move == 0)
|
||||
M.can_move = 1
|
||||
M.overlays -= adminomaly
|
||||
if(M.occupant)
|
||||
to_chat(M.occupant, "<b><font color= red>You have been unfrozen by <a href='?priv_msg=[usr.client.UID()]'>[key]</a></b></font>")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]</span>")
|
||||
log_admin("[key_name(usr)] unfroze [key_name(M.occupant)] in a [M.name]")
|
||||
else
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze an empty [M.name]</span>")
|
||||
log_admin("[key_name(usr)] unfroze an empty [M.name]")
|
||||
GLOB.frozen_atom_list -= src
|
||||
frozen = FALSE
|
||||
overlays -= freeze_overlay
|
||||
|
||||
if(occupant)
|
||||
occupant.admin_Freeze(admin, mech = name) // We also want to freeze the driver of the mech.
|
||||
else
|
||||
message_admins("<span class='notice'>[key_name_admin(admin)] [frozen ? "froze" : "unfroze"] an empty [name]</span>")
|
||||
log_admin("[key_name(admin)] [frozen ? "froze" : "unfroze"] an empty [name]")
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
//local gps units to let the ruins be found easier.
|
||||
|
||||
/obj/item/gps/ruin
|
||||
name = "navigation console"
|
||||
desc = "A console for navigation in local space, gives off a weak signal that can be picked up if sufficiently close."
|
||||
icon = 'icons/obj/terminals.dmi'
|
||||
icon_state = "gps_console"
|
||||
anchored = TRUE
|
||||
local = TRUE
|
||||
gpstag = "Unknown Signal"
|
||||
|
||||
/obj/item/gps/ruin/attack_hand(mob/user)
|
||||
attack_self(user)
|
||||
@@ -28,13 +28,6 @@
|
||||
|
||||
var/adminhelped = 0
|
||||
|
||||
// var/gc_destroyed //Time when this object was destroyed. [Inherits from datum]
|
||||
|
||||
#ifdef TESTING
|
||||
var/running_find_references
|
||||
var/last_find_references = 0
|
||||
#endif
|
||||
|
||||
///////////////
|
||||
//SOUND STUFF//
|
||||
///////////////
|
||||
|
||||
@@ -373,13 +373,11 @@
|
||||
send_resources()
|
||||
|
||||
if(prefs.toggles & UI_DARKMODE) // activates dark mode if its flagged. -AA07
|
||||
if(establish_db_connection())
|
||||
activate_darkmode()
|
||||
activate_darkmode()
|
||||
else
|
||||
// activate_darkmode() calls the CL update button proc, so we dont want it double called
|
||||
SSchangelog.UpdatePlayerChangelogButton(src)
|
||||
|
||||
if(prefs.lastchangelog != GLOB.changelog_hash) //bolds the changelog button on the interface so we know there are updates. -CP
|
||||
if(establish_db_connection())
|
||||
to_chat(src, "<span class='info'>Changelog has changed since your last visit.</span>")
|
||||
update_changelog_button()
|
||||
|
||||
if(prefs.toggles & DISABLE_KARMA) // activates if karma is disabled
|
||||
if(establish_db_connection())
|
||||
@@ -825,7 +823,7 @@
|
||||
// IF YOU CHANGE ANYTHING IN ACTIVATE, MAKE SURE IT HAS A DEACTIVATE METHOD, -AA07
|
||||
/client/proc/activate_darkmode()
|
||||
///// BUTTONS /////
|
||||
update_changelog_button()
|
||||
SSchangelog.UpdatePlayerChangelogButton(src)
|
||||
/* Rpane */
|
||||
winset(src, "rpane.textb", "background-color=#40628a;text-color=#FFFFFF")
|
||||
winset(src, "rpane.infob", "background-color=#40628a;text-color=#FFFFFF")
|
||||
@@ -857,7 +855,7 @@
|
||||
|
||||
/client/proc/deactivate_darkmode()
|
||||
///// BUTTONS /////
|
||||
update_changelog_button()
|
||||
SSchangelog.UpdatePlayerChangelogButton(src)
|
||||
/* Rpane */
|
||||
winset(src, "rpane.textb", "background-color=none;text-color=#000000")
|
||||
winset(src, "rpane.infob", "background-color=none;text-color=#000000")
|
||||
@@ -887,22 +885,6 @@
|
||||
///// NOTIFY USER /////
|
||||
to_chat(src, "<span class='notice'>Darkmode Disabled</span>") // what a sick fuck
|
||||
|
||||
// Better changelog button handling
|
||||
/client/proc/update_changelog_button()
|
||||
if(establish_db_connection())
|
||||
if(prefs.lastchangelog != GLOB.changelog_hash)
|
||||
winset(src, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold")
|
||||
else
|
||||
if(prefs.toggles & UI_DARKMODE)
|
||||
winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
|
||||
else
|
||||
winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
|
||||
else
|
||||
if(prefs.toggles & UI_DARKMODE)
|
||||
winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
|
||||
else
|
||||
winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
|
||||
|
||||
/client/proc/generate_clickcatcher()
|
||||
if(!void)
|
||||
void = new()
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/datum/gear/sechud
|
||||
display_name = "a classic security HUD"
|
||||
path = /obj/item/clothing/glasses/hud/security
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent","Magistrate")
|
||||
|
||||
/datum/gear/matches
|
||||
display_name = "a box of matches"
|
||||
@@ -42,7 +42,7 @@
|
||||
/datum/gear/doublecards
|
||||
display_name = "a double deck of standard cards"
|
||||
path = /obj/item/deck/doublecards
|
||||
|
||||
|
||||
/datum/gear/tarot
|
||||
display_name = "a deck of tarot cards"
|
||||
path = /obj/item/deck/tarot
|
||||
|
||||
@@ -79,7 +79,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
|
||||
var/last_id
|
||||
|
||||
//game-preferences
|
||||
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
|
||||
var/lastchangelog = "1" //Saved changlog timestamp (unix epoch) to detect if there was a change. Dont set this to 0 unless you want the last changelog date to be 4x longer than the expected lifespan of the universe.
|
||||
var/exp
|
||||
var/ooccolor = "#b82e00"
|
||||
var/list/be_special = list() //Special role selection
|
||||
|
||||
@@ -491,18 +491,3 @@
|
||||
load_character(C,pick(saves))
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/SetChangelog(client/C,hash)
|
||||
lastchangelog=hash
|
||||
var/datum/preferences/P = GLOB.preferences_datums[C.ckey]
|
||||
if(P.toggles & UI_DARKMODE)
|
||||
winset(C, "rpane.changelog", "background-color=#40628a;font-color=#ffffff;font-style=none")
|
||||
else
|
||||
winset(C, "rpane.changelog", "background-color=none;font-style=none")
|
||||
var/DBQuery/query = GLOB.dbcon.NewQuery("UPDATE [format_table_name("player")] SET lastchangelog='[lastchangelog]' WHERE ckey='[C.ckey]'")
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during lastchangelog updating. Error : \[[err]\]\n")
|
||||
message_admins("SQL ERROR during lastchangelog updating. Error : \[[err]\]\n")
|
||||
to_chat(C, "Couldn't update your last seen changelog, please try again later.")
|
||||
return
|
||||
return 1
|
||||
|
||||
@@ -152,6 +152,12 @@
|
||||
item_state = "mime"
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/wizard
|
||||
name = "magical mime mask"
|
||||
desc = "A mime mask glowing with power. Its eyes gaze deep into your soul."
|
||||
flags_inv = HIDEEARS | HIDEEYES
|
||||
magical = TRUE
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/nodrop
|
||||
flags = NODROP
|
||||
|
||||
|
||||
@@ -259,3 +259,14 @@
|
||||
desc = "A plasmaman envirohelm designed for the blueshield."
|
||||
icon_state = "bs_envirohelm"
|
||||
item_state = "bs_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/wizard
|
||||
name = "wizard plasma envirosuit helmet"
|
||||
desc = "A magical plasmaman containment helmet designed to spread chaos in safety and comfort."
|
||||
icon_state = "wizard_envirohelm"
|
||||
item_state = "wizard_envirohelm"
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
magical = TRUE
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
return pockets.attackby(W, user, params)
|
||||
|
||||
/obj/item/clothing/suit/storage/emp_act(severity)
|
||||
pockets.emp_act(severity)
|
||||
..()
|
||||
pockets.emp_act(severity)
|
||||
|
||||
/obj/item/clothing/suit/storage/hear_talk(mob/M, list/message_pieces)
|
||||
pockets.hear_talk(M, message_pieces)
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
icon_state = "blackwizard"
|
||||
dog_fashion = null
|
||||
|
||||
|
||||
/obj/item/clothing/head/wizard/clown
|
||||
name = "purple wizard hat"
|
||||
desc = "Strange-looking purple hat-wear that most certainly belongs to a real magic user."
|
||||
@@ -32,6 +31,18 @@
|
||||
item_state = "wizhatclown" // cheating
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/clothing/head/wizard/mime
|
||||
name = "magical beret"
|
||||
desc = "A magical red beret."
|
||||
icon_state = "wizhatmime"
|
||||
item_state = "wizhatmime"
|
||||
dog_fashion = null
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/head.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/wizard/fake
|
||||
name = "wizard hat"
|
||||
desc = "It has WIZZARD written across it in sequins. Comes with a cool beard."
|
||||
@@ -91,11 +102,22 @@
|
||||
item_state = "blackwizrobe"
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/clown
|
||||
name = "Clown Robe"
|
||||
name = "clown robe"
|
||||
desc = "A set of armoured robes that seem to radiate a dark power. That, and bad fashion decisions."
|
||||
icon_state = "wizzclown"
|
||||
item_state = "wizzclown"
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/mime
|
||||
name = "mime robe"
|
||||
desc = "Red, black, and white robes. There is not much else to say about them."
|
||||
icon_state = "wizzmime"
|
||||
item_state = "wizzmime"
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/suit.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/marisa
|
||||
name = "Witch Robe"
|
||||
desc = "Magic is all about the spell power, ZE!"
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
return hold.attackby(W, user, params)
|
||||
|
||||
/obj/item/clothing/accessory/storage/emp_act(severity)
|
||||
hold.emp_act(severity)
|
||||
..()
|
||||
hold.emp_act(severity)
|
||||
|
||||
/obj/item/clothing/accessory/storage/hear_talk(mob/M, list/message_pieces, verb)
|
||||
hold.hear_talk(M, message_pieces, verb)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/obj/item/clothing/under/plasmaman/wizard
|
||||
name = "wizard plasma envirosuit"
|
||||
desc = "An envirosuit for plasmamen designed by the Wizard Federation. Still not spaceworthy..."
|
||||
icon_state = "wizard_envirosuit"
|
||||
item_state = "wizard_envirosuit"
|
||||
item_color = "wizard_envirosuit"
|
||||
@@ -182,3 +182,11 @@
|
||||
user.put_in_hands(T)
|
||||
to_chat(user, "<span class='notice'>You open [src]\'s shell, revealing \a [T].</span>")
|
||||
qdel(src)
|
||||
|
||||
// Diona Nymphs can eat these as well as weeds to gain nutrition.
|
||||
/obj/item/reagent_containers/food/snacks/grown/attack_animal(mob/living/simple_animal/M)
|
||||
if(isnymph(M))
|
||||
var/mob/living/simple_animal/diona/D = M
|
||||
D.consume(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 100 // Always eat the apple in one bite
|
||||
tastes = list("apple" = 1)
|
||||
distill_reagent = "hcider"
|
||||
distill_reagent = "cider"
|
||||
|
||||
// Posioned Apple
|
||||
/obj/item/seeds/apple/poisoned
|
||||
|
||||
@@ -43,12 +43,10 @@
|
||||
light_range = source_atom.light_range
|
||||
light_color = source_atom.light_color
|
||||
|
||||
parse_light_color()
|
||||
PARSE_LIGHT_COLOR(src)
|
||||
|
||||
update()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/light_source/Destroy(force)
|
||||
remove_lum()
|
||||
if(source_atom)
|
||||
@@ -94,17 +92,6 @@
|
||||
/datum/light_source/proc/vis_update()
|
||||
EFFECT_UPDATE(LIGHTING_VIS_UPDATE)
|
||||
|
||||
// Decompile the hexadecimal colour into lumcounts of each perspective.
|
||||
/datum/light_source/proc/parse_light_color()
|
||||
if(light_color)
|
||||
lum_r = GetRedPart (light_color) / 255
|
||||
lum_g = GetGreenPart (light_color) / 255
|
||||
lum_b = GetBluePart (light_color) / 255
|
||||
else
|
||||
lum_r = 1
|
||||
lum_g = 1
|
||||
lum_b = 1
|
||||
|
||||
// Macro that applies light to a new corner.
|
||||
// It is a macro in the interest of speed, yet not having to copy paste it.
|
||||
// If you're wondering what's with the backslashes, the backslashes cause BYOND to not automatically end the line.
|
||||
@@ -212,7 +199,7 @@
|
||||
|
||||
if(source_atom.light_color != light_color)
|
||||
light_color = source_atom.light_color
|
||||
parse_light_color()
|
||||
PARSE_LIGHT_COLOR(src)
|
||||
update = TRUE
|
||||
|
||||
else if(applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b)
|
||||
@@ -233,7 +220,11 @@
|
||||
var/oldlum = source_turf.luminosity
|
||||
source_turf.luminosity = CEILING(light_range, 1)
|
||||
for(T in view(CEILING(light_range, 1), source_turf))
|
||||
for (thing in T.get_corners(source_turf))
|
||||
if((!IS_DYNAMIC_LIGHTING(T) && !T.light_sources) || T.has_opaque_atom)
|
||||
continue
|
||||
if(!T.lighting_corners_initialised)
|
||||
T.generate_missing_corners()
|
||||
for(thing in T.corners)
|
||||
C = thing
|
||||
corners[C] = 0
|
||||
turfs += T
|
||||
|
||||
@@ -110,16 +110,6 @@
|
||||
else
|
||||
lighting_clear_overlay()
|
||||
|
||||
/turf/proc/get_corners()
|
||||
if(!IS_DYNAMIC_LIGHTING(src) && !light_sources)
|
||||
return null
|
||||
if(!lighting_corners_initialised)
|
||||
generate_missing_corners()
|
||||
if(has_opaque_atom)
|
||||
return null // Since this proc gets used in a for loop, null won't be looped though.
|
||||
|
||||
return corners
|
||||
|
||||
/turf/proc/generate_missing_corners()
|
||||
if(!IS_DYNAMIC_LIGHTING(src) && !light_sources)
|
||||
return
|
||||
@@ -132,4 +122,3 @@
|
||||
continue
|
||||
|
||||
corners[i] = new/datum/lighting_corner(src, GLOB.LIGHTING_CORNER_DIAGONAL[i])
|
||||
|
||||
|
||||
@@ -926,9 +926,10 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
|
||||
return initial(pixel_y)
|
||||
|
||||
/mob/living/carbon/emp_act(severity)
|
||||
for(var/obj/item/organ/internal/O in internal_organs)
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
for(var/X in internal_organs)
|
||||
var/obj/item/organ/internal/O = X
|
||||
O.emp_act(severity)
|
||||
|
||||
/mob/living/carbon/Stat()
|
||||
..()
|
||||
|
||||
@@ -206,12 +206,6 @@ emp_act
|
||||
if(martial_art && prob(martial_art.block_chance) && martial_art.can_use(src) && in_throw_mode && !incapacitated(FALSE, TRUE))
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/emp_act(severity)
|
||||
for(var/obj/O in src)
|
||||
if(!O) continue
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) //todo: update this to utilize check_obscured_slots() //and make sure it's check_obscured_slots(TRUE) to stop aciding through visors etc
|
||||
var/list/damaged = list()
|
||||
var/list/inventory_items_to_kill = list()
|
||||
|
||||
@@ -810,7 +810,9 @@
|
||||
|
||||
handle_organs()
|
||||
|
||||
if(getBrainLoss() >= 120 || (health + (getOxyLoss() / 2)) <= -500)
|
||||
var/guaranteed_death_threshold = health + (getOxyLoss() * 0.5) - (getFireLoss() * 0.67) - (getBruteLoss() * 0.67)
|
||||
|
||||
if(getBrainLoss() >= 120 || (guaranteed_death_threshold) <= -500)
|
||||
death()
|
||||
return
|
||||
|
||||
|
||||
@@ -273,8 +273,6 @@
|
||||
|
||||
if(H.status_flags & GOTTAGOFAST)
|
||||
. -= 1
|
||||
if(H.status_flags & GOTTAGOFAST_METH)
|
||||
. -= 1
|
||||
return .
|
||||
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
|
||||
@@ -1290,15 +1290,12 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
|
||||
apply_overlay(MISC_LAYER)
|
||||
|
||||
/mob/living/carbon/human/admin_Freeze(client/admin, skip_overlays = TRUE)
|
||||
. = ..()
|
||||
overlays_standing[FROZEN_LAYER] = mutable_appearance(frozen, layer = -FROZEN_LAYER)
|
||||
apply_overlay(FROZEN_LAYER)
|
||||
|
||||
/mob/living/carbon/human/admin_unFreeze(client/admin, skip_overlays = TRUE)
|
||||
. = ..()
|
||||
remove_overlay(FROZEN_LAYER)
|
||||
|
||||
/mob/living/carbon/human/admin_Freeze(client/admin, skip_overlays = TRUE, mech = null)
|
||||
if(..())
|
||||
overlays_standing[FROZEN_LAYER] = mutable_appearance(frozen, layer = -FROZEN_LAYER)
|
||||
apply_overlay(FROZEN_LAYER)
|
||||
else
|
||||
remove_overlay(FROZEN_LAYER)
|
||||
|
||||
/mob/living/carbon/human/proc/force_update_limbs()
|
||||
for(var/obj/item/organ/external/O in bodyparts)
|
||||
|
||||
@@ -73,10 +73,9 @@
|
||||
return shock_damage
|
||||
|
||||
/mob/living/emp_act(severity)
|
||||
var/list/L = src.get_contents()
|
||||
for(var/obj/O in L)
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
for(var/obj/O in contents)
|
||||
O.emp_act(severity)
|
||||
|
||||
/obj/item/proc/get_volume_by_throwforce_and_or_w_class()
|
||||
if(throwforce && w_class)
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
var/on_fire = 0 //The "Are we on fire?" var
|
||||
var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20
|
||||
|
||||
var/implanting = 0 //Used for the mind-slave implant
|
||||
var/floating = 0
|
||||
var/mob_size = MOB_SIZE_HUMAN
|
||||
var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
|
||||
@@ -61,7 +60,6 @@
|
||||
var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message"
|
||||
var/list/emote_log = list() //like say_log but for emotes
|
||||
|
||||
var/list/recent_tastes = list()
|
||||
var/blood_volume = 0 //how much blood the mob has
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD)
|
||||
|
||||
|
||||
@@ -571,13 +571,13 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/ai/emp_act(severity)
|
||||
..()
|
||||
if(prob(30))
|
||||
switch(pick(1,2))
|
||||
if(1)
|
||||
view_core()
|
||||
if(2)
|
||||
ai_call_shuttle()
|
||||
..()
|
||||
|
||||
/mob/living/silicon/ai/ex_act(severity)
|
||||
..()
|
||||
|
||||
@@ -137,9 +137,9 @@
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/syndicate/saboteur/emp_act()
|
||||
..()
|
||||
if(cham_proj)
|
||||
cham_proj.disrupt(src)
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/syndicate/saboteur/bullet_act()
|
||||
if(cham_proj)
|
||||
|
||||
@@ -76,17 +76,17 @@
|
||||
return FALSE //So borgs they don't die trying to fix wiring
|
||||
|
||||
/mob/living/silicon/emp_act(severity)
|
||||
..()
|
||||
switch(severity)
|
||||
if(1)
|
||||
src.take_organ_damage(20)
|
||||
take_organ_damage(20)
|
||||
Stun(8)
|
||||
if(2)
|
||||
src.take_organ_damage(10)
|
||||
take_organ_damage(10)
|
||||
Stun(3)
|
||||
flash_eyes(affect_silicon = 1)
|
||||
to_chat(src, "<span class='danger'>*BZZZT*</span>")
|
||||
to_chat(src, "<span class='warning'>Warning: Electromagnetic pulse detected.</span>")
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0)
|
||||
|
||||
@@ -202,6 +202,20 @@
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
// Consumes plant matter other than weeds to evolve
|
||||
/mob/living/simple_animal/diona/proc/consume(obj/item/reagent_containers/food/snacks/grown/G)
|
||||
if(nutrition >= nutrition_need) // Prevents griefing by overeating plant items without evolving.
|
||||
to_chat(src, "<span class='warning'>You're too full to consume this! Perhaps it's time to grow bigger...</span>")
|
||||
else
|
||||
if(do_after_once(src, 20, target = G))
|
||||
visible_message("[src] ravenously consumes [G].", "You ravenously devour [G].")
|
||||
playsound(loc, 'sound/items/eatfood.ogg', 30, 0, frequency = 1.5)
|
||||
if(G.reagents.get_reagent_amount("nutriment") + G.reagents.get_reagent_amount("plantmatter") < 1)
|
||||
adjust_nutrition(2)
|
||||
else
|
||||
adjust_nutrition((G.reagents.get_reagent_amount("nutriment") + G.reagents.get_reagent_amount("plantmatter")) * 2)
|
||||
qdel(G)
|
||||
|
||||
/mob/living/simple_animal/diona/proc/steal_blood()
|
||||
if(stat != CONSCIOUS)
|
||||
return FALSE
|
||||
|
||||
@@ -25,23 +25,23 @@
|
||||
var/list/human_overlays = list()
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/Life(seconds, times_fired)
|
||||
if(!is_zombie && isturf(src.loc) && stat != DEAD)
|
||||
for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD))
|
||||
Zombify(H)
|
||||
break
|
||||
var/cycles = 4
|
||||
if(cycles >= 4)
|
||||
for(var/mob/living/simple_animal/K in oview(src, 1)) //Only for corpse right next to/on same tile
|
||||
if(K.stat == DEAD || (!K.check_death_method() && K.health <= HEALTH_THRESHOLD_DEAD))
|
||||
visible_message("<span class='danger'>[src] consumes [target] whole!</span>")
|
||||
if(health < maxHealth)
|
||||
health += 10
|
||||
qdel(K)
|
||||
break
|
||||
cycles = 0
|
||||
cycles++
|
||||
..()
|
||||
if(..())
|
||||
if(!is_zombie && isturf(src.loc))
|
||||
for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD))
|
||||
Zombify(H)
|
||||
break
|
||||
var/cycles = 4
|
||||
if(cycles >= 4)
|
||||
for(var/mob/living/simple_animal/K in oview(src, 1)) //Only for corpse right next to/on same tile
|
||||
if(K.stat == DEAD || (!K.check_death_method() && K.health <= HEALTH_THRESHOLD_DEAD))
|
||||
visible_message("<span class='danger'>[src] consumes [target] whole!</span>")
|
||||
if(health < maxHealth)
|
||||
health += 10
|
||||
qdel(K)
|
||||
break
|
||||
cycles = 0
|
||||
cycles++
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/OpenFire(atom/A)
|
||||
if(check_friendly_fire)
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
var/memory = ""
|
||||
var/next_move = null
|
||||
var/notransform = null //Carbon
|
||||
var/other = 0.0
|
||||
var/hand = null
|
||||
var/real_name = null
|
||||
var/flavor_text = ""
|
||||
@@ -63,12 +62,10 @@
|
||||
var/name_archive //For admin things like possession
|
||||
|
||||
var/timeofdeath = 0.0//Living
|
||||
var/cpr_time = 1.0//Carbon
|
||||
|
||||
|
||||
var/bodytemperature = 310.055 //98.7 F
|
||||
var/flying = 0
|
||||
var/charges = 0.0
|
||||
var/nutrition = NUTRITION_LEVEL_FED + 50 //Carbon
|
||||
var/satiety = 0 //Carbon
|
||||
var/hunger_drain = HUNGER_FACTOR // how quickly the mob gets hungry; largely utilized by species.
|
||||
@@ -91,8 +88,6 @@
|
||||
var/obj/item/storage/s_active = null//Carbon
|
||||
var/obj/item/clothing/mask/wear_mask = null//Carbon
|
||||
|
||||
var/seer = 0 //for cult//Carbon, probably Human
|
||||
|
||||
var/datum/hud/hud_used = null
|
||||
|
||||
hud_possible = list(SPECIALROLE_HUD)
|
||||
@@ -168,7 +163,6 @@
|
||||
var/remote_view = 0 // Set to 1 to prevent view resets on Life
|
||||
|
||||
var/obj/control_object //Used by admins to possess objects. All mobs should have this var
|
||||
var/datum/visibility_interface/visibility_interface = null // used by the visibility system to provide an interface for the visibility networks
|
||||
|
||||
//Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything.
|
||||
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
pressure_resistance = 2
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/folder/emp_act(severity)
|
||||
..()
|
||||
for(var/i in contents)
|
||||
var/atom/A = i
|
||||
A.emp_act(severity)
|
||||
|
||||
/obj/item/folder/blue
|
||||
desc = "A blue folder."
|
||||
icon_state = "folder_blue"
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
popup.set_content(data)
|
||||
if(!stars)
|
||||
popup.add_script("marked.js", 'html/browser/marked.js')
|
||||
popup.add_script("marked-paradise.js", 'html/browser/marked-paradise.js')
|
||||
popup.add_head_content("<title>[name]</title>")
|
||||
popup.open()
|
||||
return data
|
||||
@@ -562,10 +563,6 @@
|
||||
name = "paper- 'Holodeck Disclaimer'"
|
||||
info = "Brusies sustained in the holodeck can be healed simply by sleeping."
|
||||
|
||||
/obj/item/paper/spells
|
||||
name = "paper- 'List of Available Spells (READ)'"
|
||||
info = "<p><b>LIST OF SPELLS AVAILABLE</b></p><p>Magic Missile:<br>This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.</p><p>Fireball:<br>This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.</p><p>Disintegrate:</br>This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.</p><p>Disable Technology:<br>This spell disables all weapons, cameras and most other technology in range.</p><p>Smoke:<br>This spell spawns a cloud of choking smoke at your location and does not require wizard garb.</p><p>Blind:<br>This spell temporarly blinds a single person and does not require wizard garb.<p>Forcewall:<br>This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.</p><p>Blink:<br>This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.</p><p>Teleport:<br>This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.</p><p>Mutate:<br>This spell causes you to turn into a hulk, and gain telekinesis for a short while.</p><p>Ethereal Jaunt:<br>This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.</p><p>Knock:<br>This spell opens nearby doors and does not require wizard garb.</p>"
|
||||
|
||||
/obj/item/paper/syndimemo
|
||||
name = "paper- 'Memo'"
|
||||
info = "GET DAT FUKKEN DISK"
|
||||
@@ -589,17 +586,17 @@
|
||||
/obj/item/paper/crumpled
|
||||
name = "paper scrap"
|
||||
icon_state = "scrap"
|
||||
|
||||
|
||||
/obj/item/paper/syndicate
|
||||
name = "paper"
|
||||
header = "<p><img style='display: block; margin-left: auto; margin-right: auto;' src='syndielogo.png' width='220' height='135' /></p><hr />"
|
||||
info = ""
|
||||
|
||||
|
||||
/obj/item/paper/nanotrasen
|
||||
name = "paper"
|
||||
header = "<p><img style='display: block; margin-left: auto; margin-right: auto;' src='ntlogo.png' width='220' height='135' /></p><hr />"
|
||||
info = ""
|
||||
|
||||
|
||||
/obj/item/paper/central_command
|
||||
name = "paper"
|
||||
header ="<p><img style='display: block; margin-left: auto; margin-right: auto;' src='ntlogo.png' alt='' width='220' height='135' /></p><hr /><h3 style='text-align: center;font-family: Verdana;'><b> Nanotrasen Central Command</h3><p style='text-align: center;font-family:Verdana;'>Official Expedited Memorandum</p></b><hr />"
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
var/flags
|
||||
var/list/reagents_generated_per_cycle = new/list()
|
||||
|
||||
/datum/reagents/New(maximum = 100, temperature_minimum, temperature_maxixmum)
|
||||
/datum/reagents/New(maximum = 100, temperature_minimum, temperature_maximum)
|
||||
maximum_volume = maximum
|
||||
if(temperature_minimum)
|
||||
temperature_min = temperature_minimum
|
||||
if(temperature_maxixmum)
|
||||
temperature_max = temperature_maxixmum
|
||||
if(temperature_maximum)
|
||||
temperature_max = temperature_maximum
|
||||
if(!(flags & REAGENT_NOREACT))
|
||||
START_PROCESSING(SSobj, src)
|
||||
//I dislike having these here but map-objects are initialised before world/New() is called. >_>
|
||||
|
||||
@@ -322,13 +322,13 @@
|
||||
update_flags |= M.AdjustWeakened(-2.5, FALSE)
|
||||
update_flags |= M.adjustStaminaLoss(-2, FALSE)
|
||||
update_flags |= M.SetSleeping(0, FALSE)
|
||||
M.status_flags |= GOTTAGOFAST_METH
|
||||
M.status_flags |= GOTTAGOFAST
|
||||
if(prob(50))
|
||||
update_flags |= M.adjustBrainLoss(1, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
/datum/reagent/methamphetamine/on_mob_delete(mob/living/M)
|
||||
M.status_flags &= ~GOTTAGOFAST_METH
|
||||
M.status_flags &= ~GOTTAGOFAST
|
||||
..()
|
||||
|
||||
/datum/reagent/methamphetamine/overdose_process(mob/living/M, severity)
|
||||
@@ -684,7 +684,7 @@
|
||||
update_flags |= M.AdjustStunned(-2, FALSE)
|
||||
update_flags |= M.AdjustWeakened(-2, FALSE)
|
||||
update_flags |= M.adjustStaminaLoss(-2, FALSE)
|
||||
M.status_flags |= GOTTAGOFAST_METH
|
||||
M.status_flags |= GOTTAGOFAST
|
||||
M.Jitter(3)
|
||||
update_flags |= M.adjustBrainLoss(0.5, FALSE)
|
||||
if(prob(5))
|
||||
@@ -692,7 +692,7 @@
|
||||
return ..() | update_flags
|
||||
|
||||
/datum/reagent/lube/ultra/on_mob_delete(mob/living/M)
|
||||
M.status_flags &= ~GOTTAGOFAST_METH
|
||||
M.status_flags &= ~GOTTAGOFAST
|
||||
..()
|
||||
|
||||
/datum/reagent/lube/ultra/overdose_process(mob/living/M, severity)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define BORGHYPO_REFILL_VALUE 5
|
||||
|
||||
/obj/item/reagent_containers/borghypo
|
||||
name = "Cyborg Hypospray"
|
||||
@@ -46,18 +47,21 @@
|
||||
|
||||
/obj/item/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
|
||||
charge_tick++
|
||||
if(charge_tick < recharge_time) return 0
|
||||
if(charge_tick < recharge_time)
|
||||
return FALSE
|
||||
charge_tick = 0
|
||||
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R && R.cell)
|
||||
var/datum/reagents/RG = reagent_list[mode]
|
||||
if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full.
|
||||
R.cell.use(charge_cost) //Take power from borg...
|
||||
RG.add_reagent(reagent_ids[mode], 5) //And fill hypo with reagent.
|
||||
if(!refill_borghypo(RG, reagent_ids[mode], R)) //If the storage is not full recharge reagents and drain power.
|
||||
for(var/i in 1 to reagent_list.len) //if active mode is full loop through the list and fill the first one that is not full
|
||||
RG = reagent_list[i]
|
||||
if(refill_borghypo(RG, reagent_ids[i], R))
|
||||
break
|
||||
//update_icon()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
// Use this to add more chemicals for the borghypo to produce.
|
||||
/obj/item/reagent_containers/borghypo/proc/add_reagent(reagent)
|
||||
@@ -69,6 +73,13 @@
|
||||
var/datum/reagents/R = reagent_list[reagent_list.len]
|
||||
R.add_reagent(reagent, 30)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/proc/refill_borghypo(datum/reagents/RG, reagent_id, mob/living/silicon/robot/R)
|
||||
if(RG.total_volume < RG.maximum_volume)
|
||||
RG.add_reagent(reagent_id, BORGHYPO_REFILL_VALUE)
|
||||
R.cell.use(charge_cost)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/attack(mob/living/carbon/human/M, mob/user)
|
||||
var/datum/reagents/R = reagent_list[mode]
|
||||
if(!R.total_volume)
|
||||
@@ -114,3 +125,5 @@
|
||||
|
||||
if(empty)
|
||||
. += "<span class='notice'>It is currently empty. Allow some time for the internal syntheszier to produce more.</span>"
|
||||
|
||||
#undef BORGHYPO_REFILL_VALUE
|
||||
|
||||
@@ -95,6 +95,12 @@
|
||||
CHECK_TICK
|
||||
..()
|
||||
|
||||
/obj/item/smallDelivery/emp_act(severity)
|
||||
..()
|
||||
for(var/i in contents)
|
||||
var/atom/A = i
|
||||
A.emp_act(severity)
|
||||
|
||||
/obj/item/smallDelivery/attack_self(mob/user as mob)
|
||||
if(wrapped && wrapped.loc) //sometimes items can disappear. For example, bombs. --rastaf0
|
||||
wrapped.loc = user.loc
|
||||
|
||||
@@ -6,6 +6,14 @@
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
|
||||
/obj/machinery/computer/shuttle/ert/Topic(href, href_list)
|
||||
if(href_list["move"])
|
||||
var/authorized_roles = list(SPECIAL_ROLE_ERT, SPECIAL_ROLE_DEATHSQUAD)
|
||||
if(!((usr.mind.assigned_role in authorized_roles) || is_admin(usr)))
|
||||
message_admins("Potential ERT shuttle hijack, ERT shuttle moved by unauthorized user: [key_name_admin(usr)]")
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/computer/camera_advanced/shuttle_docker/ert
|
||||
name = "specops navigation computer"
|
||||
desc = "Used to designate a precise transit location for the specops shuttle."
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
playsound(src, 'sound/machines/bsa_fire.ogg', 100, 1)
|
||||
|
||||
message_admins("[key_name_admin(user)] has launched an artillery strike.")
|
||||
log_admin("[key_name(user)] has launched an artillery strike.") // Line below handles logging the explosion to disk
|
||||
explosion(bullseye,ex_power,ex_power*2,ex_power*4)
|
||||
|
||||
reload()
|
||||
|
||||
@@ -238,6 +238,8 @@
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/shock_organ(intensity)
|
||||
if(!ishuman(owner))
|
||||
return
|
||||
if(emp_proof)
|
||||
return
|
||||
intensity = min(intensity, 100)
|
||||
var/numHigh = round(intensity / 5)
|
||||
var/numMid = round(intensity / 10)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
GLOBAL_LIST_EMPTY(GPS_list)
|
||||
/obj/item/gps
|
||||
name = "global positioning system"
|
||||
name = "default gps"
|
||||
desc = "Helping lost spacemen find their way through the planets since 2016."
|
||||
icon = 'icons/obj/telescience.dmi'
|
||||
icon_state = "gps-c"
|
||||
@@ -16,7 +16,8 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
/obj/item/gps/New()
|
||||
..()
|
||||
GLOB.GPS_list.Add(src)
|
||||
name = "global positioning system ([gpstag])"
|
||||
if(name == "default gps") //use default naming scheme
|
||||
name = "global positioning system ([gpstag])"
|
||||
overlays += "working"
|
||||
|
||||
/obj/item/gps/Destroy()
|
||||
|
||||
Reference in New Issue
Block a user