fixes merge conflict in prince.dm

This commit is contained in:
Kyep
2018-03-29 20:06:41 -07:00
506 changed files with 11693 additions and 3578 deletions
+3 -1
View File
@@ -10,7 +10,9 @@ world/IsBanned(key,address,computer_id)
var/admin = 0
var/ckey = ckey(key)
if((ckey in admin_datums) || (ckey in deadmins))
admin = 1
var/datum/admins/A = admin_datums[ckey]
if(A.rights & R_ADMIN)
admin = 1
//Guest Checking
if(!guests_allowed && IsGuestKey(key))
+2 -3
View File
@@ -887,7 +887,8 @@
else if(href_list["boot2"])
var/mob/M = locate(href_list["boot2"])
if(ismob(M))
if(!check_if_greater_rights_than(M.client))
if(M.client && M.client.holder && (M.client.holder.rights & R_BAN))
to_chat(src, "<span class='warning'>[key_name_admin(M)] cannot be kicked from the server.</span>")
return
to_chat(M, "<span class='warning'>You have been kicked from the server</span>")
log_admin("[key_name(usr)] booted [key_name(M)].")
@@ -960,8 +961,6 @@
var/mob/M = locate(href_list["newban"])
if(!ismob(M)) return
if(M.client && M.client.holder) return //admins cannot be banned. Even if they could, the ban doesn't affect them anyway
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
+1 -1
View File
@@ -123,7 +123,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
T.addResponse(usr.client, msg)
else
ticketNum = globAdminTicketHolder.getTicketCounter() // ticketNum is the ticket ready to be assigned.
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] :</span> <span class='adminhelp'>[msg]</span>"
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""](<A HREF='?_src_=holder;take_question=[mob.UID()]'>TAKE</A>) :</span> <span class='adminhelp'>[msg]</span>"
//Open a new adminticket and inform the user.
globAdminTicketHolder.newTicket(src, prunedmsg, msg)
for(var/client/X in modholders + adminholders)
+1 -1
View File
@@ -773,7 +773,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
set desc = "Force the client to redownload NanoUI Resources"
// Close open NanoUIs.
nanomanager.close_user_uis(usr)
SSnanoui.close_user_uis(usr)
// Re-load the assets.
var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui)
+2 -2
View File
@@ -9,8 +9,8 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
smoothTurfs = turfs
log_debug("Setting up atmos")
if(air_master)
air_master.setup_allturfs(turfs)
if(SSair)
SSair.setup_allturfs(turfs)
log_debug("\tTook [stop_watch(subtimer)]s")
subtimer = start_watch()
+3
View File
@@ -478,6 +478,8 @@
if(!tooltips)
tooltips = new /datum/tooltip(src)
Master.UpdateTickRate()
//////////////
//DISCONNECT//
//////////////
@@ -487,6 +489,7 @@
admins -= src
directory -= ckey
clients -= src
Master.UpdateTickRate()
return ..()
@@ -79,3 +79,54 @@
display_name = "Nano-Mob Hunter GO! Cartridge"
path = /obj/item/weapon/cartridge/mob_hunt_game
cost = 2
//////////////////////
// Mugs //
//////////////////////
/datum/gear/mug
display_name = "random coffee mug"
description = "A randomly colored coffee mug. You'll need to supply your own beverage though."
path = /obj/item/weapon/reagent_containers/food/drinks/mug
sort_category = "Mugs"
/datum/gear/novelty_mug
display_name = "novelty coffee mug"
description = "A random novelty coffee mug. You'll need to supply your own beverage though."
path = /obj/item/weapon/reagent_containers/food/drinks/mug/novelty
cost = 2
sort_category = "Mugs"
/datum/gear/mug/department
subtype_path = /datum/gear/mug/department
sort_category = "Mugs"
subtype_cost_overlap = FALSE
/datum/gear/mug/department/eng
display_name = "engineer coffee mug"
description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department."
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
path = /obj/item/weapon/reagent_containers/food/drinks/mug/eng
/datum/gear/mug/department/med
display_name = "doctor coffee mug"
description = "A doctor's coffee mug, emblazoned in the colors of the Medical department."
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner")
path = /obj/item/weapon/reagent_containers/food/drinks/mug/med
/datum/gear/mug/department/sci
display_name = "scientist coffee mug"
description = "A scientist's coffee mug, emblazoned in the colors of the Science department."
allowed_roles = list("Research Director", "Scientist", "Roboticist")
path = /obj/item/weapon/reagent_containers/food/drinks/mug/sci
/datum/gear/mug/department/sec
display_name = "officer coffee mug"
description = "An officer's coffee mug, emblazoned in the colors of the Security department."
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot", "Brig Physician", "Internal Affairs Agent")
path = /obj/item/weapon/reagent_containers/food/drinks/mug/sec
/datum/gear/mug/department/serv
display_name = "crewmember coffee mug"
description = "A crewmember's coffee mug, emblazoned in the colors of the Service department."
path = /obj/item/weapon/reagent_containers/food/drinks/mug/serv
@@ -152,7 +152,3 @@
/datum/gear/hat/flowerpin
display_name = "hair flower"
path = /obj/item/clothing/head/hairflower
/datum/gear/hat/flowerpinpurp
display_name = "hair flower, purple"
path = /obj/item/clothing/head/hairflower/purple
-5
View File
@@ -14,11 +14,6 @@
desc = "Smells nice."
item_state = "hairflower"
/obj/item/clothing/head/hairflower/purple
icon_state = "hairflowerp"
item_state = "hairflowerp"
item_state = "that"
/obj/item/clothing/head/powdered_wig
name = "powdered wig"
desc = "A powdered wig."
+1 -1
View File
@@ -525,7 +525,7 @@
if(!user)
return
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = state)
ui.open()
@@ -99,8 +99,6 @@
/obj/item/rig_module/self_destruct
)
..()
/obj/item/clothing/gloves/rig/light/ninja
name = "insulated gloves"
siemens_coefficient = 0
+4 -4
View File
@@ -228,7 +228,7 @@
qdel(DL)
/datum/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = not_incapacitated_turf_state)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "personal_crafting.tmpl", "Crafting Menu", 700, 800, state = state)
ui.open()
@@ -265,14 +265,14 @@
if(href_list["make"])
var/datum/crafting_recipe/TR = locate(href_list["make"])
busy = 1
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
var/fail_msg = construct_item(usr, TR)
if(!fail_msg)
to_chat(usr, "<span class='notice'>[TR.name] constructed.</span>")
else
to_chat(usr, "<span class ='warning'>Construction failed[fail_msg]</span>")
busy = 0
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
if(href_list["forwardCat"])
viewing_category = next_cat()
to_chat(usr, "<span class='notice'>Category is now [categories[viewing_category]].</span>")
@@ -290,7 +290,7 @@
to_chat(usr, "<span class='notice'>Crafting menu is now [display_compact? "compact" : "full size"].</span>")
. = TRUE
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
//Next works nicely with modular arithmetic
/datum/personal_crafting/proc/next_cat()
+1 -1
View File
@@ -16,7 +16,7 @@
/datum/crafting_recipe/IED
name = "IED"
result = /obj/item/weapon/grenade/iedcasing/filled
result = /obj/item/weapon/grenade/iedcasing
reqs = list(/datum/reagent/fuel = 50,
/obj/item/stack/cable_coil = 1,
/obj/item/device/assembly/igniter = 1,
+55 -3
View File
@@ -276,7 +276,7 @@
to_chat(target, "<span class='notice'>You comb your tail with the [src].</span>")
used = 1
/obj/item/device/fluff/desolate_coat_kit //DesolateG: Michael Smith
/obj/item/device/fluff/desolate_coat_kit //DesolateG: Micheal Smith
name = "armored jacket conversion kit"
desc = "Flaps of dark fabric, probably used to somehow modify some sort of an armored garment. Won't help with protection, though."
icon_state = "modkit"
@@ -335,7 +335,7 @@
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
/obj/item/device/fluff/desolate_baton_kit //DesolateG: Michael Smith
/obj/item/device/fluff/desolate_baton_kit //DesolateG: Micheal Smith
name = "stun baton conversion kit"
desc = "Some sci-fi looking parts for a stun baton."
icon = 'icons/obj/custom_items.dmi'
@@ -588,7 +588,7 @@
/obj/item/clothing/head/fluff/heather_winceworth // Regens: Heather Winceworth
name= "Heather's rose"
desc= "A beautiful purple rose for your hair."
icon= 'icons/obj/clothing/hats.dmi'
icon= 'icons/obj/custom_items.dmi'
icon_state = "hairflowerp"
item_state = "hairflowerp"
@@ -719,15 +719,25 @@
/obj/item/clothing/suit/jacket/miljacket/patch/attack_self(mob/user)
var/list/options = list()
options["purple"] = "shazjacket_purple"
options["purple light"] = "shazjacket_purple_light"
options["yellow"] = "shazjacket_yellow"
options["blue"] = "shazjacket_blue"
options["cyan"] = "shazjacket_cyan"
options["command blue"] = "shazjacket_command"
options["brown"] = "shazjacket_brown"
options["orange"] = "shazjacket_orange"
options["engi orange"] = "shazjacket_engi"
options["grey"] = "shazjacket_grey"
options["black"] ="shazjacket_black"
options["red"] ="shazjacket_red"
options["red light"] ="shazjacket_red_light"
options["pink"] ="shazjacket_pink"
options["magenta"] ="shazjacket_magenta"
options["navy"] ="shazjacket_navy"
options["white"] ="shazjacket_white"
options["green"] ="shazjacket_green"
options["lime"] ="shazjacket_lime"
options["army green"] ="shazjacket_army"
var/choice = input(user, "What color do you wish your jacket to be?", "Change color") as null|anything in options
@@ -930,6 +940,14 @@
flags_inv = HIDEEARS
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/soviet_casual_uniform // Norstead : Natalya Sokolova
icon = 'icons/obj/custom_items.dmi'
name = "Soviet Casual Uniform"
desc = "Female U.S.S.P. casual wear. Dlya Rodiny!"
icon_state = "soviet_casual_uniform"
item_state = "soviet_casual_uniform"
item_color = "soviet_casual_uniform"
/obj/item/clothing/under/fluff/kharshai // Kharshai: Athena Castile
name = "Castile formal outfit"
desc = "A white and gold formal uniform, accompanied by a small pin with the numbers '004' etched upon it."
@@ -1262,3 +1280,37 @@
item_state = "victorianvest"
item_color = "victorianlightfire"
displays_id = FALSE
/obj/item/device/fluff/decemviri_spacepod_kit //Decemviri: Sylus Cain
name = "Spacepod mod kit"
desc = "a kit on tools and a blueprint detailing how to reconfigure a spacepod"
icon_state = "modkit"
/obj/item/device/fluff/decemviri_spacepod_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.incapacitated())
return
if(!istype(target, /obj/spacepod))
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
return
to_chat(user, "<span class='notice'>You modify the appearance of [target] based on the kite blueprints.</span>")
var/obj/spacepod/pod = target
pod.icon = 'icons/48x48/custom_pod.dmi'
pod.icon_state = "pod_dece"
pod.name = "sleek spacepod"
pod.desc = "A modified varient of a space pod."
pod.can_paint = FALSE
used = 1
qdel(src)
/obj/item/weapon/bikehorn/fluff/pinkbikehorn //Xerdies: Squiddle Toodle
name = "Honkinator5000"
desc = "This horn may look ridiculous but is the new hot item for clowns in the Clown Empire. It has a fine print on its side reading: Property of Prince Honktertong the IV"
icon = 'icons/obj/custom_items.dmi'
lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi'
righthand_file = 'icons/mob/inhands/fluff_righthand.dmi'
icon_state = "teri_horn"
item_state = "teri_horn"
honk_sound = 'sound/items/teri_horn.ogg'
+6 -6
View File
@@ -50,7 +50,7 @@ log transactions
linked_db = null
authenticated_account = null
visible_message("[bicon(src)]<span class='warning'>[src] buzzes rudely, \"Connection to remote database lost.\"</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
if(ticks_left_timeout > 0)
ticks_left_timeout--
@@ -90,7 +90,7 @@ log transactions
held_card = I
if(authenticated_account && held_card.associated_account_number != authenticated_account.account_number)
authenticated_account = null
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
else if(authenticated_account)
if(istype(I, /obj/item/stack/spacecash))
//consume the money
@@ -111,7 +111,7 @@ log transactions
authenticated_account.transaction_log.Add(T)
to_chat(user, "<span class='info'>You insert [C] into [src].</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
C.use(C.amount)
else
..()
@@ -129,7 +129,7 @@ log transactions
/obj/machinery/atm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
ui = new(user, src, ui_key, "atm.tmpl", name, 550, 650)
ui.open()
@@ -317,7 +317,7 @@ log transactions
if("logout")
authenticated_account = null
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
//create the most effective combination of notes to make up the requested amount
@@ -349,4 +349,4 @@ log transactions
authenticated_account.transaction_log.Add(T)
view_screen = NO_SCREEN
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
+3 -3
View File
@@ -69,7 +69,7 @@
O.loc = src
held_card = O
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
attack_hand(user)
@@ -78,7 +78,7 @@
/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
ui.open()
@@ -153,7 +153,7 @@
if(!get_access_level(usr))
return 1
var/datum/nanoui/ui = nanomanager.get_open_ui(usr, src, "main")
var/datum/nanoui/ui = SSnanoui.get_open_ui(usr, src, "main")
if(href_list["choice"])
switch(href_list["choice"])
+3 -3
View File
@@ -70,7 +70,7 @@
if(linked_db)
if(linked_account)
scan_card(O, user)
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
else
to_chat(user, "[bicon(src)]<span class='warning'>Unable to connect to linked account.</span>")
else
@@ -79,7 +79,7 @@
..()
/obj/item/device/eftpos/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "eftpos.tmpl", name, 790, 310)
ui.open()
@@ -172,7 +172,7 @@
access_code = 0
to_chat(usr, "[bicon(src)]<span class='info'>Access code reset to 0.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
/obj/item/device/eftpos/proc/scan_card(obj/item/weapon/card/I, mob/user)
+24 -22
View File
@@ -481,37 +481,39 @@
eater.say("Nom")
wither()
/obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params)
if (!W || !user || !W.type)
return
user.changeNext_move(CLICK_CD_MELEE)
var/damage_to_do = W.force
if(istype(W, /obj/item/weapon/scythe))
var/obj/item/weapon/scythe/S = W
/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user)
var/damage_dealt = I.force
if(istype(I, /obj/item/weapon/scythe))
var/obj/item/weapon/scythe/S = I
if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
damage_to_do *= 4
damage_dealt *= 4
for(var/obj/structure/spacevine/B in range(1,src))
if(B.health > damage_to_do) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
B.health -= damage_to_do
if(B.health > damage_dealt) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
B.take_damage(damage_dealt, I.damtype, "melee", 1)
else
B.wither()
return
if(is_sharp(W))
damage_to_do *= 4
if(W && W.damtype == "fire")
damage_to_do *= 4
if(is_sharp(I))
damage_dealt *= 4
if(I.damtype == BURN)
damage_dealt *= 4
for(var/datum/spacevine_mutation/SM in mutations)
damage_to_do = SM.on_hit(src, user, W, damage_to_do) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
damage_dealt = SM.on_hit(src, user, I, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
take_damage(damage_dealt, I.damtype, "melee", 1)
health -= damage_to_do
if(health < 1)
wither()
/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src, 'sound/weapons/slash.ogg', 50, 1)
else
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, 1)
..()
/obj/structure/spacevine/obj_destruction()
wither()
/obj/structure/spacevine/Crossed(mob/crosser)
if(isliving(crosser))
-9
View File
@@ -49,17 +49,8 @@
description_holders["icon"] = "[bicon(A)]"
description_holders["desc"] = A.desc
// Byond seemingly calls stat, each tick.
// Calling things each tick can get expensive real quick.
// So we slow this down a little.
// See: http://www.byond.com/docs/ref/info.html#/client/proc/Stat
/client/Stat()
. = ..()
if(holder)
sleep(1)
else
sleep(5)
stoplag()
if(usr && statpanel("Examine"))
stat(null,"[description_holders["icon"]] <font size='5'>[description_holders["name"]]</font>") //The name, written in big letters.
stat(null,"[description_holders["desc"]]") //the default examine text.
+1 -1
View File
@@ -595,7 +595,7 @@
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
check_health()
/obj/machinery/fishtank/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
/obj/machinery/fishtank/attack_generic(mob/living/user, damage = 0) //used by attack_alien, attack_animal, and attack_slime
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
cur_health -= damage
+52 -30
View File
@@ -1,35 +1,57 @@
mob/living/carbon/proc/dream()
dreaming = 1
var/list/dreams = list(
"an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the captain",
"voices from all around","deep space","a doctor","the engine","a traitor","an ally","darkness",
"light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun",
"a hat","the Cyberiad","a ruined station","a planet","plasma","air","the medical bay","the bridge","blinking lights",
"a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect",
"riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying","the eggs","money",
"the head of personnel","the head of security","a chief engineer","a research director","a chief medical officer",
"the detective","the warden","a member of the internal affairs","a station engineer","the janitor","atmospheric technician",
"the quartermaster","a cargo technician","the botanist","a shaft miner","the psychologist","the chemist","the geneticist",
"the virologist","the roboticist","the chef","the bartender","the chaplain","the librarian", "the brig physician", "the pod pilot",
"the barber", "the mechanic", "the magistrate", "the nanotrasen representative", "the blueshield", "a mouse","an ert member",
"a beach","the holodeck","a smokey room","a voice","the cold","a mouse","an operating table","the bar","the rain","a skrell",
"a unathi","a tajaran", "a vulpkanin", "a slime", "an ipc", "a vox", "a plasmaman", "a grey", "a kidan", "a diona", "the ai core",
"the mining station","the research station", "a beaker of strange liquid"
)
spawn(0)
for(var/i = rand(1,4),i > 0, i--)
var/dream_image = pick(dreams)
dreams -= dream_image
to_chat(src, "<span class='notice'><i>... [dream_image] ...</i></span>")
sleep(rand(40,70))
if(paralysis <= 0)
dreaming = 0
return 0
dreaming = 0
return 1
///DREAMS
/mob/living/carbon/proc/dream()
var/list/dreams = custom_dreams(dream_strings, src)
for(var/obj/item/weapon/bedsheet/sheet in loc)
dreams += sheet.dream_messages
var/list/dream_images = list()
for(var/i in 1 to rand(3, rand(5, 10)))
dream_images += pick_n_take(dreams)
dreaming++
for(var/i in 1 to dream_images.len)
addtimer(src, "experience_dream", ((i - 1) * rand(30,60)), FALSE, dream_images[i], FALSE)
return TRUE
/mob/living/carbon/proc/custom_dreams(list/dreamlist, mob/user)
var/list/newlist = dreamlist.Copy()
for(var/i in 1 to newlist.len)
newlist[i] = replacetext(newlist[i], "\[DREAMER\]", "[user.name]")
return dreamlist
//NIGHTMARES
/mob/living/carbon/proc/nightmare()
var/list/nightmares = nightmare_strings.Copy()
for(var/obj/item/weapon/bedsheet/sheet in loc)
nightmares += sheet.nightmare_messages
var/list/dream_images = list()
for(var/i in 1 to rand(3, rand(5, 10)))
dream_images += pick_n_take(nightmares)
nightmare++
for(var/i in 1 to dream_images.len)
addtimer(src, "experience_dream", ((i - 1) * rand(30,60)), FALSE, nightmares[i], TRUE)
return TRUE
/mob/living/carbon/proc/handle_dreams()
if(client && !dreaming && prob(5))
dream()
else if(client && !nightmare && prob(2))
nightmare()
if(ishuman(src))
if(prob(10))
emote("writhes in their sleep.")
dir = pick(cardinal)
/mob/living/carbon/proc/experience_dream(dream_image, isNightmare)
dreaming--
nightmare--
if(stat != UNCONSCIOUS || InCritical())
return
if(isNightmare)
dream_image = "<span class='cultitalic'>[dream_image]</span>"
to_chat(src, "<span class='notice'><i>... [dream_image] ...</i></span>")
/mob/living/carbon/var/dreaming = 0
@@ -353,3 +353,16 @@
icon = 'icons/obj/lavaland/ash_flora.dmi'
icon_state = "mushroom_bowl"
w_class = WEIGHT_CLASS_SMALL
/obj/item/weapon/reagent_containers/food/drinks/bag
name = "Drink bag"
desc = "Normally put in wine boxes, or down pants at stadium events."
icon_state = "goonbag"
volume = 70
/obj/item/weapon/reagent_containers/food/drinks/bag/goonbag
name = "Goon from a Blue Toolbox special edition"
desc = "Wine from the land down under, where the dingos roam and the roos do wander."
icon_state = "goonbag"
list_reagents = list("wine" = 70)
@@ -0,0 +1,166 @@
/obj/item/weapon/reagent_containers/food/drinks/mug
name = "coffee mug"
desc = "A mug for sipping hot beverages out of."
icon = 'icons/obj/mugs.dmi'
icon_state = "mug"
var/novelty = FALSE
var/preset = FALSE
/obj/item/weapon/reagent_containers/food/drinks/mug/novelty
name = "novelty coffee mug"
desc = "A fun mug for your coffee or other hot beverage!"
novelty = TRUE
/datum/novelty_mug
var/name = "novelty coffee mug"
var/description = "A fun mug for your coffee or other hot beverage!"
var/state = "mug"
/datum/novelty_mug/peace
name = "peaceful mug"
description = "It's like... so peaceful, man."
state = "mug_peace"
/datum/novelty_mug/fire
name = "fire mug"
description = "Caution: contents and design may be incredibly hot."
state = "mug_fire"
/datum/novelty_mug/best
name = "best mug"
description = "By decree of this mug, you are the best!"
state = "mug_best"
/datum/novelty_mug/best/New()
var/locale = pick("Room's", "Department's", "Station's", "World's", "Sector's", "System's", "Galaxy's", "Universe's", "Multi-verse's", "Nanotrasen's", "Syndicate's")
var/what = pick("Crewmember", "Spessman", "Employee", "Coffee", "Coffee-drinker", "Survivor", "Personality", "Lifeform", "Doctor", "Scientist", "Engineer", "Officer", "Civillian", "Captain", "Agent")
name = "\"[locale] Best [what]\" mug"
/datum/novelty_mug/worst
name = "worst mug"
description = "By decree of this mug, you are the worst!"
state = "mug_worst"
/datum/novelty_mug/worst/New()
var/locale = pick("Room's", "Department's", "Station's", "World's", "Sector's", "System's", "Galaxy's", "Universe's", "Multi-verse's", "Nanotrasen's", "Syndicate's")
var/what = pick("Crewmember", "Spessman", "Employee", "Coffee", "Coffee-drinker", "Survivor", "Personality", "Lifeform", "Doctor", "Scientist", "Engineer", "Officer", "Civillian", "Captain", "Agent")
name = "\"[locale] Worst [what]\" mug"
/datum/novelty_mug/insult
name = "insulting coffee mug"
description = "How rude!"
state = "mug_insult"
/datum/novelty_mug/insult/New()
var/insult = pick("There isn't enough coffee to make you tolerable.", "I drink coffee so I can pretend to like people.", "I haven't had my coffee yet... What's your excuse?", "This coffee is more robust than you.", "Decaf is for weaklings like you.")
description = "This one says:\"[insult]\""
/datum/novelty_mug/pda
name = "PDA mug"
description = "Finally, a use for one of these!"
state = "mug_pda"
/datum/novelty_mug/rad
name = "radioactive mug"
description = "Is coffee supposed to be green... and glowing?"
state = "mug_rad"
/datum/novelty_mug/tide
name = "greytide mug"
description = "This coffee packs almost as much of a punch as a toolbox to the face!"
state = "mug_tide"
/datum/novelty_mug/happy
name = "happy mug"
description = "Even when you aren't, this mug helps you look happy around coworkers."
state = "mug_happy"
/datum/novelty_mug/pills
name = "prescription mug"
description = "Prescription: caffeine. Dosage: As much as it takes."
state = "mug_pill"
/datum/novelty_mug/rainbow
name = "rainbow mug"
description = "So mesmerizing!"
state = "mug_rainbow"
/obj/item/weapon/reagent_containers/food/drinks/mug/New()
..()
if(preset)
return
if(novelty)
var/novelty_type = pick(subtypesof(/datum/novelty_mug))
var/datum/novelty_mug/selected = new novelty_type
name = selected.name
desc = selected.description
icon_state = selected.state
else
icon_state = pick("mug_black", "mug_white", "mug_red", "mug_blue", "mug_green", "mug_pink")
/obj/item/weapon/reagent_containers/food/drinks/mug/eng
name = "engineer's mug"
desc = "A mug engineered to hold your beverage... IN SPACE!"
icon_state = "mug_eng"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/med
name = "doctor's mug"
desc = "A mug that can hold the cure for what ails you!"
icon_state = "mug_med"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/sci
name = "scientist's mug"
desc = "Nothing fuels research like a coffee mug... or grant money!"
icon_state = "mug_sci"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/sec
name = "officer's mug"
desc = "The perfect partner for a sprinkled donut or stunbaton!"
icon_state = "mug_sec"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/serv
name = "crewmember's mug"
desc = "Serve your thirst better than you serve the rest of the crew!"
icon_state = "mug_serv"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/ce
name = "chief engineer's mug"
desc = "Broken and welded back together countless times, just like the station! Probably microwave safe."
icon_state = "mug_ce"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/hos
name = "head of security's mug"
desc = "If only your officers were as robust as this coffee's flavor!"
icon_state = "mug_hos"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/rd
name = "research director's mug"
desc = "Energy tech level: 99"
icon_state = "mug_rd"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/cmo
name = "chief medical officer's mug"
desc = "Fill it with something to keep you awake while you try to keep the crew alive."
icon_state = "mug_cmo"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/hop
name = "head of personnel's mug"
desc = "Are the stains on the bottom coffee or ink?"
icon_state = "mug_hop"
preset = TRUE
/obj/item/weapon/reagent_containers/food/drinks/mug/cap
name = "captain's mug"
desc = "An inscription on the side reads \"Best Captain 2559\"... The last time the station had a worthy captain."
icon_state = "mug_cap"
preset = TRUE
+10 -1
View File
@@ -1,3 +1,4 @@
#define MAX_WEIGHT_CLASS WEIGHT_CLASS_SMALL
//Food items that are eaten normally and don't leave anything behind.
/obj/item/weapon/reagent_containers/food/snacks
name = "snack"
@@ -14,6 +15,7 @@
var/dry = 0
var/cooktype[0]
var/cooked_type = null //for microwave cooking. path of the resulting item after microwaving
var/total_w_class = 0 //for the total weight an item of food can carry
//Placeholder for effect that trigger on eating that aren't tied to reagents.
@@ -131,6 +133,11 @@
)
inaccurate = 1
else if(W.w_class <= WEIGHT_CLASS_SMALL && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable))
var/newweight = GetTotalContentsWeight() + W.GetTotalContentsWeight() + W.w_class
if(newweight > MAX_WEIGHT_CLASS)
// Nope, no bluespace slice food
to_chat(user, "<span class='warning'>You cannot fit [W] in [src]!</span>")
return 1
if(!iscarbon(user))
return 1
to_chat(user, "<span class='warning'>You slip [W] inside [src].</span>")
@@ -138,6 +145,7 @@
if((user.client && user.s_active != src))
user.client.screen -= W
W.dropped(user)
total_w_class += W.w_class
add_fingerprint(user)
contents += W
return
@@ -2521,4 +2529,5 @@
icon_state = "onionrings"
list_reagents = list("nutriment" = 3)
filling_color = "#C0C9A0"
gender = PLURAL
gender = PLURAL
#undef MAX_WEIGHT_CLASS
@@ -133,7 +133,7 @@
item_quants[I.name]++
else
item_quants[I.name] = 1
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
amount--
/obj/machinery/smartfridge/chemistry/accept_check(obj/item/O)
@@ -227,7 +227,7 @@
if(load(O, user))
user.visible_message("<span class='notice'>[user] has added \the [O] to \the [src].</span>", "<span class='notice'>You add \the [O] to \the [src].</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
else if(istype(O, /obj/item/weapon/storage/bag))
var/obj/item/weapon/storage/bag/P = O
@@ -240,7 +240,7 @@
if(P.contents.len > 0)
to_chat(user, "<span class='notice'>Some items are refused.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
else
to_chat(user, "<span class='notice'>\The [src] smartly refuses [O].</span>")
@@ -306,7 +306,7 @@
"<span class='notice'>You empty \the [P] into \the [src].</span>")
if(P.contents.len > 0)
to_chat(user, "<span class='notice'>Some items are refused.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
/obj/machinery/smartfridge/secure/emag_act(mob/user)
emagged = 1
@@ -320,7 +320,7 @@
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
user.set_machine(src)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "smartfridge.tmpl", name, 400, 500)
ui.open()
@@ -352,7 +352,7 @@
if(..()) return 0
var/mob/user = usr
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
add_fingerprint(user)
@@ -521,14 +521,14 @@
new dried(loc)
item_quants[S.name]--
qdel(S)
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return TRUE
for(var/obj/item/stack/sheet/wetleather/WL in contents)
var/obj/item/stack/sheet/leather/L = new(loc)
L.amount = WL.amount
item_quants[WL.name]--
qdel(WL)
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return TRUE
return FALSE
@@ -546,6 +546,6 @@
if(usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf)))
if(!allowed(usr) && !emagged && locked != -1 && href_list["vend"])
to_chat(usr, "<span class='warning'>Access denied.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 0
return ..()
@@ -119,6 +119,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
sharp = 1
var/extend = 1
var/swiping = FALSE
/obj/item/weapon/scythe/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
@@ -130,6 +131,21 @@
playsound(loc, pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg'), 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/scythe/pre_attackby(atom/A, mob/living/user, params)
if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user))
return ..()
else
var/turf/user_turf = get_turf(user)
var/dir_to_target = get_dir(user_turf, get_turf(A))
swiping = TRUE
var/static/list/scythe_slash_angles = list(0, 45, 90, -45, -90)
for(var/i in scythe_slash_angles)
var/turf/T = get_step(user_turf, turn(dir_to_target, i))
for(var/obj/structure/spacevine/V in T)
if(user.Adjacent(V))
melee_attack_chain(user, V)
swiping = FALSE
/obj/item/weapon/scythe/tele
icon_state = "tscythe0"
item_state = null //no sprite for folded version, like a tele-baton
+38 -40
View File
@@ -19,7 +19,7 @@
var/ore_pickup_rate = 15
var/sheet_per_ore = 1
var/point_upgrade = 1
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bluespace crystal" = 50), ("bananium" = 60), ("tranquillite" = 60))
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("titanium" = 30), ("uranium" = 30), ("diamond" = 50), ("bluespace crystal" = 50), ("bananium" = 60), ("tranquillite" = 60))
var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("plasma", "uranium", "gold"))
speed_process = 1
@@ -175,17 +175,28 @@
dat += "<br>" //just looks nicer
dat += text("[capitalize(s.name)]: [s.amount] <A href='?src=[UID()];release=[s.type]'>Release</A><br>")
if((/obj/item/stack/sheet/metal in stack_list) && (/obj/item/stack/sheet/mineral/plasma in stack_list))
var/obj/item/stack/sheet/metalstack = stack_list[/obj/item/stack/sheet/metal]
var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma]
if(min(metalstack.amount, plasmastack.amount))
dat += text("Plasteel Alloy (Metal + Plasma): <A href='?src=[UID()];plasteel=1'>Smelt</A><BR>")
if((/obj/item/stack/sheet/glass in stack_list) && (/obj/item/stack/sheet/mineral/plasma in stack_list))
var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass]
var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma]
if(min(glassstack.amount, plasmastack.amount))
dat += "Plasma Glass (Glass + Plasma): <A href='?src=[UID()];plasglass=1'>Smelt</A><BR>"
var/obj/item/stack/sheet/metalstack
if(/obj/item/stack/sheet/metal in stack_list)
metalstack = stack_list[/obj/item/stack/sheet/metal]
var/obj/item/stack/sheet/glass/glassstack
if(/obj/item/stack/sheet/glass in stack_list)
glassstack = stack_list[/obj/item/stack/sheet/glass]
var/obj/item/stack/sheet/plasmastack
if((/obj/item/stack/sheet/mineral/plasma in stack_list))
plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma]
var/obj/item/stack/sheet/mineral/titaniumstack
if((/obj/item/stack/sheet/mineral/titanium in stack_list))
titaniumstack = stack_list[/obj/item/stack/sheet/mineral/titanium]
if(metalstack && plasmastack && min(metalstack.amount, plasmastack.amount))
dat += text("Plasteel Alloy (Metal + Plasma): <A href='?src=[UID()];alloytype1=/obj/item/stack/sheet/metal;alloytype2=/obj/item/stack/sheet/mineral/plasma;alloytypeout=/obj/item/stack/sheet/plasteel'>Smelt</A><BR>")
if(titaniumstack && plasmastack && min(titaniumstack.amount, plasmastack.amount))
dat += text("Plastitanium Alloy (Titanium + Plasma): <A href='?src=[UID()];alloytype1=/obj/item/stack/sheet/mineral/titanium;alloytype2=/obj/item/stack/sheet/mineral/plasma;alloytypeout=/obj/item/stack/sheet/mineral/plastitanium'>Smelt</A><BR>")
if(glassstack && plasmastack && min(glassstack.amount, plasmastack.amount))
dat += text("Plasma Glass (Glass + Plasma): <A href='?src=[UID()];alloytype1=/obj/item/stack/sheet/glass;alloytype2=/obj/item/stack/sheet/mineral/plasma;alloytypeout=/obj/item/stack/sheet/plasmaglass'>Smelt</A><BR>")
dat += text("<br><div class='statusDisplay'><b>Mineral Value List:</b><BR>[get_ore_values()]</div>")
var/datum/browser/popup = new(user, "console_stacking_machine", "Ore Redemption Machine", 400, 500)
@@ -242,37 +253,24 @@
else
to_chat(usr, "<span class='warning'>Required access not found.</span>")
if(href_list["plasteel"])
if(href_list["alloytype1"] && href_list["alloytype2"] && href_list["alloytypeout"])
var/alloytype1 = text2path(href_list["alloytype1"])
var/alloytype2 = text2path(href_list["alloytype2"])
var/alloytypeout = text2path(href_list["alloytypeout"])
if(check_access(inserted_id) || allowed(usr))
if(!(/obj/item/stack/sheet/metal in stack_list)) return
if(!(/obj/item/stack/sheet/mineral/plasma in stack_list)) return
var/obj/item/stack/sheet/metalstack = stack_list[/obj/item/stack/sheet/metal]
var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma]
if(!(alloytype1 in stack_list))
return
if(!(alloytype2 in stack_list))
return
var/obj/item/stack/sheet/stack1 = stack_list[alloytype1]
var/obj/item/stack/sheet/stack2 = stack_list[alloytype2]
var/desired = input("How much?", "How much would you like to smelt?", 1) as num
var/obj/item/stack/sheet/plasteel/plasteelout = new
plasteelout.amount = round(min(desired,50,metalstack.amount,plasmastack.amount))
if(plasteelout.amount >= 1)
metalstack.amount -= plasteelout.amount
plasmastack.amount -= plasteelout.amount
unload_mineral(plasteelout)
else
to_chat(usr, "<span class='warning'>Required access not found.</span>")
if(href_list["plasglass"])
if(check_access(inserted_id) || allowed(usr))
if(!(/obj/item/stack/sheet/glass in stack_list)) return
if(!(/obj/item/stack/sheet/mineral/plasma in stack_list)) return
var/obj/item/stack/sheet/glassstack = stack_list[/obj/item/stack/sheet/glass]
var/obj/item/stack/sheet/plasmastack = stack_list[/obj/item/stack/sheet/mineral/plasma]
var/desired = input("How much?", "How much would you like to smelt?", 1) as num
var/obj/item/stack/sheet/plasmaglass/plasglassout = new
plasglassout.amount = round(min(desired, 50, glassstack.amount, plasmastack.amount))
if(plasglassout.amount >= 1)
glassstack.amount -= plasglassout.amount
plasmastack.amount -= plasglassout.amount
unload_mineral(plasglassout)
var/obj/item/stack/sheet/alloyout = new alloytypeout
alloyout.amount = round(min(desired,50,stack1.amount,stack2.amount))
if(alloyout.amount >= 1)
stack1.amount -= alloyout.amount
stack2.amount -= alloyout.amount
unload_mineral(alloyout)
else
to_chat(usr, "<span class='warning'>Required access not found.</span>")
updateUsrDialog()
@@ -335,6 +335,7 @@
friendly = "mends"
density = 0
flying = 1
obj_damage = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
mob_size = MOB_SIZE_TINY
+92 -54
View File
@@ -25,93 +25,102 @@
if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown || machine.ore_mime || machine.ore_adamantine)
if(machine.ore_iron)
if(machine.selected_iron==1)
dat += text("<A href='?src=[UID()];sel_iron=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_iron=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_iron=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Iron: [machine.ore_iron]<br>")
dat += "<A href='?src=[UID()];sel_iron=yes'><font color='red'>Not smelting</font></A> "
dat += "Iron: [machine.ore_iron]<br>"
else
machine.selected_iron = 0
//sand - glass
if(machine.ore_glass)
if(machine.selected_glass==1)
dat += text("<A href='?src=[UID()];sel_glass=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_glass=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_glass=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Sand: [machine.ore_glass]<br>")
dat += "<A href='?src=[UID()];sel_glass=yes'><font color='red'>Not smelting</font></A> "
dat += "Sand: [machine.ore_glass]<br>"
else
machine.selected_glass = 0
//plasma
if(machine.ore_plasma)
if(machine.selected_plasma==1)
dat += text("<A href='?src=[UID()];sel_plasma=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_plasma=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_plasma=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Plasma: [machine.ore_plasma]<br>")
dat += "<A href='?src=[UID()];sel_plasma=yes'><font color='red'>Not smelting</font></A> "
dat += "Plasma: [machine.ore_plasma]<br>"
else
machine.selected_plasma = 0
//uranium
if(machine.ore_uranium)
if(machine.selected_uranium==1)
dat += text("<A href='?src=[UID()];sel_uranium=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_uranium=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_uranium=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Uranium: [machine.ore_uranium]<br>")
dat += "<A href='?src=[UID()];sel_uranium=yes'><font color='red'>Not smelting</font></A> "
dat += "Uranium: [machine.ore_uranium]<br>"
else
machine.selected_uranium = 0
//gold
if(machine.ore_gold)
if(machine.selected_gold==1)
dat += text("<A href='?src=[UID()];sel_gold=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_gold=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_gold=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Gold: [machine.ore_gold]<br>")
dat += "<A href='?src=[UID()];sel_gold=yes'><font color='red'>Not smelting</font></A> "
dat += "Gold: [machine.ore_gold]<br>"
else
machine.selected_gold = 0
//silver
if(machine.ore_silver)
if(machine.selected_silver==1)
dat += text("<A href='?src=[UID()];sel_silver=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_silver=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_silver=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Silver: [machine.ore_silver]<br>")
dat += "<A href='?src=[UID()];sel_silver=yes'><font color='red'>Not smelting</font></A> "
dat += "Silver: [machine.ore_silver]<br>"
else
machine.selected_silver = 0
//diamond
if(machine.ore_diamond)
if(machine.selected_diamond==1)
dat += text("<A href='?src=[UID()];sel_diamond=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_diamond=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_diamond=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Diamond: [machine.ore_diamond]<br>")
dat += "<A href='?src=[UID()];sel_diamond=yes'><font color='red'>Not smelting</font></A> "
dat += "Diamond: [machine.ore_diamond]<br>"
else
machine.selected_diamond = 0
//bananium
if(machine.ore_clown)
if(machine.selected_clown==1)
dat += text("<A href='?src=[UID()];sel_clown=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_clown=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_clown=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Bananium: [machine.ore_clown]<br>")
dat += "<A href='?src=[UID()];sel_clown=yes'><font color='red'>Not smelting</font></A> "
dat += "Bananium: [machine.ore_clown]<br>"
else
machine.selected_clown = 0
//tranquillite
if(machine.ore_mime)
if(machine.selected_mime==1)
dat += text("<A href='?src=[UID()];sel_mime=no'><font color='green'>Smelting</font></A> ")
dat += "<A href='?src=[UID()];sel_mime=no'><font color='green'>Smelting</font></A> "
else
dat += text("<A href='?src=[UID()];sel_mime=yes'><font color='red'>Not smelting</font></A> ")
dat += text("Tranquillite: [machine.ore_mime]<br>")
dat += "<A href='?src=[UID()];sel_mime=yes'><font color='red'>Not smelting</font></A> "
dat += "Tranquillite: [machine.ore_mime]<br>"
else
machine.selected_mime = 0
//titanium
if(machine.ore_titanium)
if (machine.selected_titanium==1)
dat += "<A href='?src=\ref[src];sel_titanium=no'><font color='green'>Smelting</font></A> "
else
dat += "<A href='?src=\ref[src];sel_titanium=yes'><font color='red'>Not smelting</font></A> "
dat += "Titanium: [machine.ore_titanium]<br>"
else
machine.selected_titanium = 0
//On or off
dat += text("Machine is currently ")
@@ -175,6 +184,11 @@
machine.selected_mime = 1
else
machine.selected_mime = 0
if(href_list["sel_titanium"])
if (href_list["sel_titanium"] == "yes")
machine.selected_titanium = 1
else
machine.selected_titanium = 0
if(href_list["set_on"])
if(href_list["set_on"] == "on")
machine.on = 1
@@ -203,6 +217,7 @@
var/ore_clown = 0
var/ore_mime = 0
var/ore_adamantine = 0
var/ore_titanium = 0
var/selected_gold = 0
var/selected_silver = 0
var/selected_diamond = 0
@@ -212,92 +227,106 @@
var/selected_iron = 0
var/selected_clown = 0
var/selected_mime = 0
var/selected_titanium = 0
var/on = 0 //0 = off, 1 =... oh you know!
/obj/machinery/mineral/processing_unit/process()
var/i
for(i = 0; i < 10; i++)
for(var/i in 1 to 10)
if(on)
if(selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
if(selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
if(ore_glass > 0)
ore_glass--;
ore_glass--
generate_mineral(/obj/item/stack/sheet/glass)
else
on = 0
continue
if(selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0)
if(selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime)
if(ore_glass > 0 && ore_iron > 0)
ore_glass--;
ore_iron--;
ore_glass--
ore_iron--
generate_mineral(/obj/item/stack/sheet/rglass)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
if(ore_gold > 0)
ore_gold--;
ore_gold--
generate_mineral(/obj/item/stack/sheet/mineral/gold)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && !selected_gold && selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
if(ore_silver > 0)
ore_silver--;
ore_silver--
generate_mineral(/obj/item/stack/sheet/mineral/silver)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && !selected_gold && !selected_silver && selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
if(ore_diamond > 0)
ore_diamond--;
ore_diamond--
generate_mineral(/obj/item/stack/sheet/mineral/diamond)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
if(ore_plasma > 0)
ore_plasma--;
ore_plasma--
generate_mineral(/obj/item/stack/sheet/mineral/plasma)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && selected_uranium && !selected_iron && !selected_clown && !selected_mime)
if(ore_uranium > 0)
ore_uranium--;
ore_uranium--
generate_mineral(/obj/item/stack/sheet/mineral/uranium)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime)
if(ore_iron > 0)
ore_iron--;
ore_iron--
generate_mineral(/obj/item/stack/sheet/metal)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0)
if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime)
if(ore_iron > 0 && ore_plasma > 0)
ore_iron--;
ore_plasma--;
ore_iron--
ore_plasma--
generate_mineral(/obj/item/stack/sheet/plasteel)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1 && selected_mime == 0)
if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && selected_clown && !selected_mime)
if(ore_clown > 0)
ore_clown--;
ore_clown--
generate_mineral(/obj/item/stack/sheet/mineral/bananium)
else
on = 0
continue
if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 1)
if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && selected_mime)
if(ore_mime > 0)
ore_mime--;
ore_mime--
generate_mineral(/obj/item/stack/sheet/mineral/tranquillite)
else
on = 0
continue
if (!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime && selected_titanium)
if (ore_titanium > 0)
ore_titanium--
generate_mineral(/obj/item/stack/sheet/mineral/titanium)
else
on = 0
continue
if (!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime && selected_titanium)
if (ore_titanium > 0)
ore_titanium--
ore_plasma--
generate_mineral(/obj/item/stack/sheet/mineral/plastitanium)
else
on = 0
continue
//if a non valid combination is selected
@@ -333,6 +362,9 @@
if(selected_mime == 1)
if(ore_mime <= 0)
b = 0
if(selected_titanium == 1)
if(ore_titanium <= 0)
b = 0
if(b) //if they are, deduct one from each, produce slag and shut the machine off
if(selected_gold == 1)
@@ -351,6 +383,8 @@
ore_clown--
if(selected_mime == 1)
ore_mime--
if(selected_titanium == 1)
ore_titanium--
generate_mineral(/obj/item/weapon/ore/slag)
on = 0
else
@@ -402,6 +436,10 @@
ore_mime++
O.loc = null
continue
if(istype(O,/obj/item/weapon/ore/titanium))
ore_titanium++
O.loc = null
continue
unload_mineral(O)
/obj/machinery/mineral/processing_unit/proc/generate_mineral(var/P)
-9
View File
@@ -362,15 +362,6 @@
icon_regular_floor = "podfloor"
floor_tile = /obj/item/stack/tile/pod
//Walls
/turf/simulated/wall/survival
name = "pod wall"
desc = "An easily-compressable wall used for temporary shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "smooth"
smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
canSmoothWith = list(/turf/simulated/wall/survival, /obj/machinery/door/airlock/survival_pod)
//Door
/obj/machinery/door/airlock/survival_pod
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
+16 -7
View File
@@ -110,8 +110,7 @@ var/global/list/rockTurfEdgeCache = list(
"Uranium" = 5, "Diamond" = 1, "Gold" = 10,
"Silver" = 12, "Plasma" = 20, "Iron" = 40,
"Gibtonite" = 4, "Cave" = 2, "BScrystal" = 1,
/*, "Adamantine" =5*/)
//Currently, Adamantine won't spawn as it has no uses. -Durandan
"Titanium" = 11)
var/mineralChance = 13
/turf/simulated/mineral/random/New()
@@ -142,6 +141,8 @@ var/global/list/rockTurfEdgeCache = list(
M = new/turf/simulated/mineral/clown(src)
if("Tranquillite")
M = new/turf/simulated/mineral/mime(src)
if("Titanium")
M = new/turf/simulated/mineral/titanium(src)
if("BScrystal")
M = new/turf/simulated/mineral/bscrystal(src)
if(M)
@@ -155,9 +156,9 @@ var/global/list/rockTurfEdgeCache = list(
icon_state = "rock_highchance"
mineralChance = 25
mineralSpawnChanceList = list(
"Uranium" = 35, "Diamond" = 30,
"Gold" = 45, "Silver" = 50, "Plasma" = 50,
"BScrystal" = 20)
"Uranium" = 35, "Diamond" = 30, "Gold" = 45,
"Silver" = 50, "Plasma" = 50, "BScrystal" = 20,
"Titanium" = 45)
/turf/simulated/mineral/random/high_chance_clown
@@ -177,7 +178,7 @@ var/global/list/rockTurfEdgeCache = list(
mineralSpawnChanceList = list(
"Uranium" = 2, "Diamond" = 1, "Gold" = 4,
"Silver" = 6, "Plasma" = 15, "Iron" = 40,
"Gibtonite" = 2, "BScrystal" = 1)
"Gibtonite" = 2, "BScrystal" = 1, "Titanium" = 4)
/turf/simulated/mineral/random/low_chance/New()
icon_state = "rock"
@@ -228,6 +229,14 @@ var/global/list/rockTurfEdgeCache = list(
hidden = 1
scan_state = "rock_Silver"
/turf/simulated/mineral/titanium
name = "titanium deposit"
mineralType = /obj/item/weapon/ore/titanium
spreadChance = 5
spread = 1
hidden = 1
scan_state = "rock_Titanium"
/turf/simulated/mineral/plasma
name = "plasma deposit"
icon_state = "rock_Plasma"
@@ -409,7 +418,7 @@ var/global/list/rockTurfEdgeCache = list(
return
/turf/simulated/mineral/attack_animal(mob/living/simple_animal/user as mob)
if(user.environment_smash >= 2)
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
gets_drilled()
..()
+3 -1
View File
@@ -23,6 +23,7 @@
maxHealth = 125
melee_damage_lower = 15
melee_damage_upper = 15
obj_damage = 0
environment_smash = 0
check_friendly_fire = 1
stop_automated_movement_when_pulled = 1
@@ -37,7 +38,8 @@
speak_emote = list("states")
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
/obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron,
/obj/item/weapon/ore/bananium, /obj/item/weapon/ore/tranquillite, /obj/item/weapon/ore/glass)
/obj/item/weapon/ore/bananium, /obj/item/weapon/ore/tranquillite, /obj/item/weapon/ore/glass,
/obj/item/weapon/ore/titanium)
healable = 0
var/mode = MINEDRONE_COLLECT
var/light_on = 0
+7
View File
@@ -142,6 +142,13 @@
refined_type = /obj/item/stack/sheet/mineral/tranquillite
materials = list(MAT_TRANQUILLITE=MINERAL_MATERIAL_AMOUNT)
/obj/item/weapon/ore/titanium
name = "titanium ore"
icon_state = "Titanium ore"
points = 50
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/titanium
/obj/item/weapon/ore/slag
name = "slag"
desc = "Completely useless"
+5
View File
@@ -33,6 +33,7 @@
var/amt_iron = 0
var/amt_plasma = 0
var/amt_uranium = 0
var/amt_titanium = 0
var/amt_clown = 0
var/amt_mime = 0
var/amt_bluespace = 0
@@ -56,6 +57,8 @@
amt_clown++
if(istype(C,/obj/item/weapon/ore/tranquillite))
amt_mime++
if(istype(C, /obj/item/weapon/ore/titanium))
amt_titanium++
if(istype(C,/obj/item/weapon/ore/bluespace_crystal))
amt_bluespace++
@@ -74,6 +77,8 @@
dat += text("Plasma ore: [amt_plasma]<br>")
if(amt_uranium)
dat += text("Uranium ore: [amt_uranium]<br>")
if(amt_titanium)
dat += text("Titanium ore: [amt_titanium]<br>")
if(amt_clown)
dat += text("Bananium ore: [amt_clown]<br>")
if(amt_mime)
+1 -1
View File
@@ -618,7 +618,7 @@
exclaim_verb = "tones"
colour = "say_quote"
key = "z"//Zwarmer...Or Zerg!
flags = RESTRICTED || HIVEMIND
flags = RESTRICTED | HIVEMIND
follow = 1
// Language handling.
@@ -24,7 +24,7 @@
for(var/datum/surgery/S in surgeries)
if(S.next_step(user, src))
return 1
..()
return ..()
/mob/living/carbon/attack_hand(mob/living/carbon/human/user)
if(!iscarbon(user))
@@ -24,5 +24,7 @@
var/failed_last_breath = FALSE //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
var/co2overloadtime = null
var/dreaming = 0 //How many dream images we have left to send
var/nightmare = 0
blood_volume = BLOOD_VOLUME_NORMAL
@@ -1668,6 +1668,41 @@
G.icon_state = "grabbed1"
G.synch()
/mob/living/carbon/human/proc/get_eyecon()
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
if(istype(species) && species.eyes)
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
if(eye_implant) //Eye implants override native DNA eye colo(u)r
eyes_icon = eye_implant.generate_icon()
else if(eyes)
eyes_icon = eyes.generate_icon()
else
eyes_icon.Blend("#800000", ICON_ADD)
return eyes_icon
/mob/living/carbon/human/proc/get_eye_shine() //Referenced cult constructs for shining in the dark. Needs to be above lighting effects such as shading.
var/obj/item/organ/external/head/head_organ = get_organ("head")
var/datum/sprite_accessory/hair/hair_style = hair_styles_full_list[head_organ.h_style]
var/icon/hair = new /icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
return image(get_icon_difference(get_eyecon(), hair), layer = LIGHTING_LAYER + 1) //Cut the hair's pixels from the eyes icon so eyes covered by bangs stay hidden even while on a higher layer.
/*Used to check if eyes should shine in the dark. Returns the image of the eyes on the layer where they will appear to shine.
Eyes need to have significantly high darksight to shine unless the mob has the XRAY vision mutation. Eyes will not shine if they are covered in any way.*/
/mob/living/carbon/human/proc/eyes_shine()
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
if(!(istype(eyes) || istype(eye_implant)))
return FALSE
if(!get_location_accessible(src, "eyes"))
return FALSE
if(!(eyes.shine()) && !istype(eye_implant) && !(XRAY in mutations)) //If their eyes don't shine, they don't have other augs, nor do they have X-RAY vision
return FALSE
return TRUE
/mob/living/carbon/human/proc/gut()
set category = "Abilities"
set name = "Gut"
@@ -228,6 +228,3 @@
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] attempted to disarm [src]!</span>")
return
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
return
@@ -176,21 +176,22 @@ emp_act
return 1
//Returns 1 if the attack hit, 0 if it missed.
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
if(!I || !user) return 0
/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user, def_zone)
if(!I || !user)
return 0
if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && src.stat == DEAD && user.a_intent == INTENT_HARM)
var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(src.loc))
newmeat.name = src.real_name + newmeat.name
newmeat.subjectname = src.real_name
newmeat.subjectjob = src.job
newmeat.reagents.add_reagent ("nutriment", (src.nutrition / 15) / 3)
src.reagents.trans_to (newmeat, round ((src.reagents.total_volume) / 3, 1))
if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && stat == DEAD && user.a_intent == INTENT_HARM)
var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(loc))
newmeat.name = real_name + newmeat.name
newmeat.subjectname = real_name
newmeat.subjectjob = job
newmeat.reagents.add_reagent("nutriment", (nutrition / 15) / 3)
reagents.trans_to(newmeat, round((reagents.total_volume) / 3, 1))
add_mob_blood(src)
--src.meatleft
to_chat(user, "<span class='warning'>You hack off a chunk of meat from [src.name]</span>")
if(!src.meatleft)
src.create_attack_log("Was chopped up into meat by <b>[key_name(user)]</b>")
--meatleft
to_chat(user, "<span class='warning'>You hack off a chunk of meat from [name]</span>")
if(!meatleft)
create_attack_log("Was chopped up into meat by <b>[key_name(user)]</b>")
user.create_attack_log("Chopped up <b>[key_name(src)]</b> into meat</b>")
msg_admin_attack("[key_name_admin(user)] chopped up [key_name_admin(src)] into meat")
if(!iscarbon(user))
@@ -214,19 +215,18 @@ emp_act
if(istype(I,/obj/item/weapon/card/emag))
emag_act(user, affecting)
if(! I.discrete)
if(I.attack_verb.len)
visible_message("<span class='combat danger'>[src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!</span>")
else
visible_message("<span class='combat danger'>[src] has been attacked in the [hit_area] with [I.name] by [user]!</span>")
send_item_attack_message(I, user, hit_area)
var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].", armour_penetration = I.armour_penetration)
if(!I.force)
return 0 //item force is zero
var/armor = run_armor_check(affecting, "melee", "<span class='warning'>Your armour has protected your [hit_area].</span>", "<span class='warning'>Your armour has softened hit to your [hit_area].</span>", armour_penetration = I.armour_penetration)
var/weapon_sharp = is_sharp(I)
if(weapon_sharp && prob(getarmor(user.zone_sel.selecting, "melee")))
weapon_sharp = 0
if(armor >= 100) return 0
if(!I.force) return 0
if(armor >= 100)
return 0
var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
apply_damage(I.force, I.damtype, affecting, armor, sharp = weapon_sharp, used_weapon = I)
@@ -234,8 +234,6 @@ emp_act
var/bloody = 0
if(I.damtype == BRUTE && I.force && prob(25 + I.force * 2))
I.add_mob_blood(src) //Make the weapon bloody, not the person.
// if(user.hand) user.update_inv_l_hand() //updates the attacker's overlay for the (now bloodied) weapon
// else user.update_inv_r_hand() //removed because weapons don't have on-mob blood overlays
if(prob(I.force * 2)) //blood spatter!
bloody = 1
var/turf/location = loc
@@ -170,9 +170,9 @@ I use this to standardize shadowling dethrall code
-- Crazylemon
*/
/mob/living/carbon/human/proc/named_organ_parent(var/organ_name)
if(!get_int_organ(organ_name))
if(!get_int_organ_tag(organ_name))
return null
var/obj/item/organ/internal/O = get_int_organ(organ_name)
var/obj/item/organ/internal/O = get_int_organ_tag(organ_name)
return O.parent_organ
/mob/living/carbon/human/has_organic_damage()
@@ -187,4 +187,4 @@ I use this to standardize shadowling dethrall code
splinted_limbs.Cut()
for(var/obj/item/organ/external/limb in bodyparts)
if(limb.status & ORGAN_SPLINTED)
splinted_limbs += limb
splinted_limbs += limb
@@ -287,6 +287,7 @@
// Do species-specific reagent handling here
// Return 1 if it should do normal processing too
// Return the parent value if processing does not explicitly stop
// Return 0 if it shouldn't deplete and do its normal effect
// Other return values will cause weird badness
/datum/species/proc/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
@@ -58,6 +58,7 @@
default_headacc = "Simple"
default_headacc_colour = "#404040"
butt_sprite = "unathi"
brute_mod = 1.05
has_organ = list(
"heart" = /obj/item/organ/internal/heart,
@@ -78,6 +79,38 @@
"is twisting their own neck!",
"is holding their breath!")
var/datum/action/innate/tail_lash/lash = new()
/datum/species/unathi/handle_post_spawn(var/mob/living/carbon/human/H)
lash.Grant(H)
..()
/datum/action/innate/tail_lash
name = "Tail lash"
icon_icon = 'icons/effects/effects.dmi'
button_icon_state = "tail"
/datum/action/innate/tail_lash/Activate()
var/mob/living/carbon/human/user = owner
if(!user.restrained() || !user.buckled)
to_chat(user, "<span class='warning'>You need freedom of movement to tail lash!</span>")
return
if(user.getStaminaLoss() >= 50)
to_chat(user, "<span class='warning'>Rest before tail lashing again!</span>")
return
for(var/mob/living/carbon/human/C in orange(1))
var/obj/item/organ/external/E = C.get_organ(pick("l_leg", "r_leg", "l_foot", "r_foot", "groin"))
if(E)
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='danger'>[src] smacks [C] in [E] with their tail! </span>", "<span class='danger'>You hit [C] in [E] with your tail!</span>")
user.adjustStaminaLoss(15)
C.apply_damage(5, BRUTE, E)
user.spin(20, 1)
playsound(user.loc, 'sound/weapons/slash.ogg', 50, 0)
/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
H.stop_tail_wagging(1)
@@ -163,6 +196,7 @@
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR
dietflags = DIET_OMNI
hunger_drain = 0.11
taste_sensitivity = TASTE_SENSITIVITY_SHARP
reagent_tag = PROCESS_ORG
flesh_color = "#966464"
@@ -551,11 +585,27 @@
var/list/mob/living/carbon/human/recolor_list = list()
var/datum/action/innate/regrow/grow = new()
species_abilities = list(
/mob/living/carbon/human/verb/toggle_recolor_verb,
/mob/living/carbon/human/proc/regrow_limbs
)
/datum/species/slime/handle_post_spawn(var/mob/living/carbon/human/H)
grow.Grant(H)
..()
/datum/action/innate/regrow
name = "Regrow limbs"
icon_icon = 'icons/effects/effects.dmi'
button_icon_state = "greenglow"
/datum/action/innate/regrow/Activate()
var/mob/living/carbon/human/user = owner
user.regrow_limbs()
/datum/species/slime/handle_life(var/mob/living/carbon/human/H)
//This is allegedly for code "style". Like a plaid sweater?
#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1
@@ -744,6 +794,12 @@
if(speech_pref)
H.mind.speech_span = "wingdings"
/datum/species/grey/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
if(R.id == "sacid")
H.reagents.del_reagent(R.id)
return 0
return ..()
/datum/species/diona
name = "Diona"
name_plural = "Dionaea"
@@ -781,7 +837,8 @@
species_traits = list(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN)
clothing_flags = HAS_SOCKS
dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
default_hair_colour = "#000000"
dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary
taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
oxy_mod = 0
@@ -941,6 +998,8 @@
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
if(!head_organ)
return
head_organ.h_style = "Bald"
head_organ.f_style = "Shaved"
spawn(100)
@@ -963,10 +1022,10 @@
speech_chance = 20
male_scream_sound = 'sound/voice/DraskTalk2.ogg'
female_scream_sound = 'sound/voice/DraskTalk2.ogg'
male_cough_sounds = null //whale cough when
female_cough_sounds = null
male_sneeze_sound = null
female_sneeze_sound = null
male_cough_sounds = 'sound/voice/DraskCough.ogg'
female_cough_sounds = 'sound/voice/DraskCough.ogg'
male_sneeze_sound = 'sound/voice/DraskSneeze.ogg'
female_sneeze_sound = 'sound/voice/DraskSneeze.ogg'
burn_mod = 2
//exotic_blood = "cryoxadone"
@@ -105,6 +105,7 @@ Please contact me on #coderbus IRC. ~Carn x
/mob/living/carbon/human
var/list/overlays_standing[TOTAL_LAYERS]
var/list/misc_effect_overlays = list() //Overlays that are applied at a custom layer (defined in each image's .layer property) outside of standard overlay application. Updated in update_misc_effects()
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
var/icon/skeleton
var/list/cached_standing_overlays = list() // List of everything currently in a human's actual overlays
@@ -154,6 +155,10 @@ Please contact me on #coderbus IRC. ~Carn x
I.layer = (-2 - (TOTAL_LAYERS - i)) // Highest layer gets -2, each prior layer is 1 lower
new_overlays += I
update_misc_effects()
if(misc_effect_overlays)
new_overlays += misc_effect_overlays
if(frozen) // Admin freeze overlay
new_overlays += frozen
@@ -1324,6 +1329,13 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/proc/update_misc_effects()
misc_effect_overlays.Cut()
//Begin appending miscellaneous effects.
if(eyes_shine())
misc_effect_overlays += get_eye_shine() //Image layer is specified in get_eye_shine() proc as LIGHTING_LAYER + 1.
/mob/living/carbon/human/proc/force_update_limbs()
for(var/obj/item/organ/external/O in bodyparts)
O.sync_colour_to_human(src)
+15
View File
@@ -353,6 +353,21 @@
if(..())
handle_dreams()
adjustStaminaLoss(-10)
var/comfort = 1
if(istype(buckled, /obj/structure/stool/bed))
var/obj/structure/stool/bed/bed = buckled
comfort+= bed.comfort
for(var/obj/item/weapon/bedsheet/bedsheet in range(loc,0))
if(bedsheet.loc != loc) //bedsheets in your backpack/neck don't give you comfort
continue
comfort+= bedsheet.comfort
break //Only count the first bedsheet
if(drunk)
comfort += 1 //Aren't naps SO much better when drunk?
AdjustDrunk(1-0.0015*comfort) //reduce drunkenness ~6% per two seconds, when on floor.
if(comfort > 1 && prob(3))//You don't heal if you're just sleeping on the floor without a blanket.
adjustBruteLoss(-1*comfort)
adjustFireLoss(-1*comfort)
if(prob(10) && health && hal_screwyhud != SCREWYHUD_CRIT)
emote("snore")
// Keep SSD people asleep
+26 -36
View File
@@ -193,6 +193,12 @@
updatehealth()
return
/mob/living/carbon/slime/MouseDrop(atom/movable/A)
if(isliving(A) && A != usr)
var/mob/living/Food = A
if(Food.Adjacent(usr) && !stat && Food.stat != DEAD) //messy
Feedon(Food)
..()
/mob/living/carbon/slime/unEquip(obj/item/W as obj)
return
@@ -200,28 +206,25 @@
/mob/living/carbon/slime/attack_ui(slot)
return
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M)
if(!ticker)
to_chat(M, "You cannot attack people before the game has started.")
return
if(Victim) return // can't attack while eating!
if(Victim)
return // can't attack while eating!
M.do_attack_animation(src)
visible_message("<span class='danger'>[M.name] has glomped [src]!</span>", \
"<span class='userdanger'>[M.name] has glomped [src]!</span>")
var/damage = rand(1, 3)
attacked += 5
if(M.is_adult)
damage = rand(1, 6)
else
damage = rand(1, 3)
if(health > -100)
M.do_attack_animation(src)
visible_message("<span class='danger'> The [M.name] has glomped [src]!</span>", \
"<span class='userdanger'> The [M.name] has glomped [src]!</span>")
var/damage = rand(1, 3)
attacked += 5
if(M.is_adult)
damage = rand(1, 6)
else
damage = rand(1, 3)
adjustBruteLoss(damage)
updatehealth()
return
@@ -327,20 +330,6 @@
if(S.next_step(M, src))
return 1
/*
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = M.gloves
if(G.cell)
if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
if(G.cell.charge >= 2500)
G.cell.use(2500)
visible_message("<span class='warning'>[src] has been touched with the stun gloves by [M]!</span>")
return
else
to_chat(M, "<span class='warning'>Not enough charge! </span>")
return
*/
switch(M.a_intent)
if(INTENT_HELP)
@@ -373,9 +362,9 @@
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
"<span class='userdanger'>[M] has punched [src]!</span>")
adjustBruteLoss(damage)
updatehealth()
if(health > -100)
adjustBruteLoss(damage)
updatehealth()
else
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has attempted to punch [src]!</span>")
@@ -404,13 +393,14 @@
var/damage = rand(15, 30)
if(damage >= 25)
damage = rand(20, 40)
visible_message("<span class='danger'>[M] has attacked [name]!</span>", \
"<span class='userdanger'>[M] has attacked [name]!</span>")
visible_message("<span class='danger'>[M] has slashed [name]!</span>", \
"<span class='userdanger'>[M] has slashed [name]!</span>")
else
visible_message("<span class='danger'>[M] has wounded [name]!</span>", \
"<span class='userdanger'>)[M] has wounded [name]!</span>")
adjustBruteLoss(damage)
updatehealth()
if(health > -100)
adjustBruteLoss(damage)
updatehealth()
else
playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has attempted to lunge at [name]!</span>", \
+4 -3
View File
@@ -983,11 +983,12 @@
return 0
/mob/living/proc/attempt_harvest(obj/item/I, mob/user)
if(stat == DEAD && !isnull(butcher_results)) //can we butcher it?
if(istype(I, /obj/item/weapon/kitchen/knife))
if(user.a_intent == INTENT_HARM && stat == DEAD && butcher_results) //can we butcher it?
var/sharpness = is_sharp(I)
if(sharpness)
to_chat(user, "<span class='notice'>You begin to butcher [src]...</span>")
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
if(do_mob(user, src, 80))
if(do_mob(user, src, 80 / sharpness) && Adjacent(I))
harvest(user)
return 1
+21
View File
@@ -226,6 +226,27 @@ var/list/ai_verbs_default = list(
job = "AI"
/mob/living/silicon/ai/Stat()
..()
if(statpanel("Status"))
if(stat)
stat(null, text("Systems nonfunctional"))
return
show_borg_info()
/mob/living/silicon/ai/proc/show_borg_info()
stat(null, text("Connected cyborgs: [connected_robots.len]"))
for(var/mob/living/silicon/robot/R in connected_robots)
var/robot_status = "Nominal"
if(R.stat || !R.client)
robot_status = "OFFLINE"
else if(!R.cell || R.cell.charge <= 0)
robot_status = "DEPOWERED"
// Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies!
var/area/A = get_area(R)
stat(null, text("[R.name] | S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge] / [R.cell.maxcharge]" : "Empty"] | \
Module: [R.designation] | Loc: [sanitize(A.name)] | Status: [robot_status]"))
/mob/living/silicon/ai/rename_character(oldname, newname)
if(!..(oldname, newname))
return FALSE
+1 -1
View File
@@ -295,7 +295,7 @@
medicalActive1 = null
medicalActive2 = null
medical_cannotfind = 0
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
to_chat(usr, "<span class='notice'>You reset your record-viewing software.</span>")
/mob/living/silicon/pai/cancel_camera()
@@ -41,7 +41,7 @@ var/global/list/default_pai_software = list()
if(ui_key != "main")
var/datum/pai_software/S = software[ui_key]
if(S && !S.toggle)
ui = nanomanager.try_update_ui(user, src, S.id, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, S.id, ui, force_open)
if(!ui)
ui = new(user, src, S.id, S.template_file, S.ui_title, S.ui_width, S.ui_height, state = state)
ui.open()
@@ -52,7 +52,7 @@ var/global/list/default_pai_software = list()
ui.set_status(STATUS_CLOSE, 0)
return
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600, state = state)
ui.open()
@@ -132,4 +132,4 @@ var/global/list/default_pai_software = list()
var/img = text2num(href_list["image"])
if(1 <= img && img <= 9)
card.setEmotion(img)
return 1
return 1
@@ -567,10 +567,7 @@ var/list/robot_verbs_default = list(
return 2
/mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/restraints/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do
return
/mob/living/silicon/robot/attackby(obj/item/weapon/W, mob/user, params)
if(opened) // Are they trying to insert something?
for(var/V in components)
var/datum/robot_component/C = components[V]
@@ -610,6 +607,7 @@ var/list/robot_verbs_default = list(
else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == INTENT_HELP && (wiresexposed || istype(src,/mob/living/silicon/robot/drone)))
user.changeNext_move(CLICK_CD_MELEE)
if(!getFireLoss())
to_chat(user, "<span class='notice'>Nothing to fix!</span>")
return
@@ -744,9 +742,13 @@ var/list/robot_verbs_default = list(
to_chat(user, "<span class='danger'>Upgrade error.</span>")
else
spark_system.start()
return ..()
/mob/living/silicon/robot/attacked_by(obj/item/I, mob/living/user, def_zone)
if(I.force && I.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt.
spark_system.start()
..()
/mob/living/silicon/robot/emag_act(user as mob)
if(!ishuman(user) && !issilicon(user))
return
@@ -8,7 +8,7 @@
health = 100
maxHealth = 100
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
obj_damage = 60
environment_smash = 2 //Walls can't stop THE LAW
mob_size = MOB_SIZE_LARGE
@@ -221,8 +221,9 @@
update_controls()
return
/mob/living/simple_animal/bot/medbot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/mob/living/simple_animal/bot/medbot/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/glass))
. = 1 //no afterattack
if(locked)
to_chat(user, "<span class='warning'>You cannot insert a beaker because the panel is locked!</span>")
return
@@ -236,7 +237,6 @@
reagent_glass = W
to_chat(user, "<span class='notice'>You insert [W].</span>")
show_controls(user)
return
else
var/current_health = health
@@ -100,6 +100,7 @@
health = 250
response_harm = "harmlessly punches"
harm_intent_damage = 0
obj_damage = 90
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "smashes their armoured gauntlet into"
@@ -181,7 +182,7 @@
/mob/living/simple_animal/hostile/construct/builder
name = "Artificer"
real_name = "Artificer"
desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies"
desc = "A bulbous construct dedicated to building and maintaining Cult armies."
icon = 'icons/mob/mob.dmi'
icon_state = "artificer"
icon_living = "artificer"
@@ -189,6 +190,7 @@
health = 50
response_harm = "viciously beats"
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "rams"
@@ -302,7 +304,7 @@
melee_damage_lower = 1
melee_damage_upper = 5
attacktext = "prods"
environment_smash = 3
environment_smash = ENVIRONMENT_SMASH_RWALLS
see_in_dark = 8
attack_sound = 'sound/weapons/tap.ogg'
const_type = "harvester"
@@ -9,7 +9,7 @@
health = 5
maxHealth = 5
attacktext = "bites"
attacktext = "bites"
obj_damage = 0
melee_damage_lower = 1
melee_damage_upper = 2
response_help = "pets"
@@ -14,6 +14,7 @@
maxHealth = 100
health = 100
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashes"
@@ -145,6 +146,7 @@
melee_damage_upper = 0
a_intent = INTENT_HELP
friendly = "caresses"
obj_damage = 0
environment_smash = 0
icon_state = "maid"
icon_living = "maid"
@@ -20,6 +20,7 @@
stop_automated_movement_when_pulled = 0
maxHealth = 60
health = 60
obj_damage = 60
melee_damage_lower = 20
melee_damage_upper = 30
attacktext = "mauls"
@@ -29,6 +29,7 @@
health = 10
faction = list("hostile")
move_to_delay = 0
obj_damage = 0
environment_smash = 0
mouse_opacity = 2
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
@@ -18,6 +18,7 @@
health = 25
harm_intent_damage = 8
obj_damage = 50
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "bites"
@@ -70,6 +71,6 @@
health = 65
pixel_x = -16
mob_size = MOB_SIZE_LARGE
obj_damage = 80
melee_damage_lower = 20
melee_damage_upper = 20
@@ -8,6 +8,7 @@
icon_dead = "otherthing-dead"
health = 80
maxHealth = 80
obj_damage = 100
melee_damage_lower = 25
melee_damage_upper = 50
attacktext = "chomps"
@@ -17,7 +17,7 @@
armour_penetration = 25
melee_damage_lower = 10
melee_damage_upper = 100
environment_smash = 3
environment_smash = ENVIRONMENT_SMASH_RWALLS
force_threshold = 15
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
@@ -12,7 +12,7 @@
speed = 0
maxHealth = 80
health = 80
obj_damage = 50
harm_intent_damage = 10
melee_damage_lower = 15
melee_damage_upper = 15
@@ -39,6 +39,7 @@
response_harm = "hits"
maxHealth = 200
health = 200
obj_damage = 60
melee_damage_lower = 15
melee_damage_upper = 20
heat_damage_per_tick = 20 //amount of damage applied if animal's body temperature is higher than maxbodytemp
@@ -16,6 +16,7 @@
faction = list("creature")
robust_searching = 1
stat_attack = 2
obj_damage = 0
environment_smash = 0
speak_emote = list("squeaks")
ventcrawler = 2
@@ -1,6 +1,7 @@
/mob/living/simple_animal/hostile
faction = list("hostile")
stop_automated_movement_when_pulled = 0
obj_damage = 40
environment_smash = 1 //Set to 1 to break closets,tables,racks, etc; 2 for walls; 3 for rwalls
var/atom/target
var/ranged = 0
@@ -241,7 +242,7 @@
if(target.loc != null && get_dist(targets_from, target.loc) <= vision_range) //We can't see our target, but he's in our vision range still
if(ranged_ignores_vision && ranged_cooldown <= world.time) //we can't see our target... but we can fire at them!
OpenFire(target)
if(environment_smash >= 2) //If we're capable of smashing through walls, forget about vision completely after finding our target
if((environment_smash & ENVIRONMENT_SMASH_WALLS) || (environment_smash & ENVIRONMENT_SMASH_RWALLS)) //If we're capable of smashing through walls, forget about vision completely after finding our target
Goto(target,move_to_delay,minimum_distance)
FindHidden()
return 1
@@ -65,6 +65,7 @@
melee_damage_lower = 0
melee_damage_upper = 0
speed = -1
obj_damage = 0
environment_smash = 0
@@ -267,6 +267,7 @@ Difficulty: Medium
maxHealth = 200
health = 200
faction = list("neutral")
obj_damage = 80
melee_damage_upper = 30
melee_damage_lower = 30
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
@@ -490,6 +490,10 @@ Difficulty: Hard
icon_state = "hierophant_telegraph_teleport"
duration = 9
/obj/effect/temp_visual/hierophant/telegraph/edge
icon_state = "hierophant_telegraph_edge"
duration = 40
/obj/effect/temp_visual/hierophant/blast
icon = 'icons/effects/effects.dmi'
icon_state = "hierophant_blast"
@@ -7,7 +7,8 @@
maxHealth = 1000
a_intent = INTENT_HARM
sentience_type = SENTIENCE_BOSS
environment_smash = 3
environment_smash = ENVIRONMENT_SMASH_RWALLS
obj_damage = 400
luminosity = 3
faction = list("mining", "boss")
weather_immunities = list("lava","ash")
@@ -225,6 +225,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(obj/O, mob/living/creator, destroy_original = 0)
if(..())
emote_see = list("aims menacingly")
obj_damage = 0
environment_smash = 0 //needed? seems weird for them to do so
ranged = 1
retreat_distance = 1 //just enough to shoot
@@ -17,6 +17,7 @@
maxHealth = 75
health = 75
harm_intent_damage = 5
obj_damage = 0
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = "lashes out at"
@@ -4,6 +4,7 @@
unsuitable_atmos_damage = 15
faction = list("mining")
weather_immunities = list("lava","ash")
obj_damage = 30
environment_smash = 2
minbodytemp = 0
heat_damage_per_tick = 20
@@ -65,6 +66,7 @@
maxHealth = 200
health = 200
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 12
melee_damage_upper = 12
attacktext = "bites into"
@@ -125,6 +127,7 @@
maxHealth = 300
health = 300
harm_intent_damage = 1 //Only the manliest of men can kill a Goliath with only their fists.
obj_damage = 100
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "pulverizes"
@@ -13,6 +13,7 @@
response_disarm = "gently pushes aside"
response_harm = "whacks"
harm_intent_damage = 5
obj_damage = 0
melee_damage_lower = 1
melee_damage_upper = 1
attack_same = 2
@@ -14,6 +14,7 @@
health = 100
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "slashes"
@@ -22,6 +22,7 @@
melee_damage_upper = 10
attacktext = "attacks"
attack_sound = 'sound/items/bikehorn.ogg'
obj_damage = 0
environment_smash = 0
minbodytemp = 270
maxbodytemp = 370
@@ -19,6 +19,7 @@
healable = 0
harm_intent_damage = 35
obj_damage = 100
melee_damage_lower = 34
melee_damage_upper = 42
attacktext = "claws"
@@ -112,6 +112,7 @@
pass_flags = PASSTABLE
health = 15
maxHealth = 15
obj_damage = 0
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "cuts"
@@ -24,7 +24,7 @@
move_to_delay = 4 // faster than normal
ventcrawler = 0
ai_ventcrawls = 0
environment_smash = 3
environment_smash = ENVIRONMENT_SMASH_RWALLS
idle_ventcrawl_chance = 0
spider_tier = TS_TIER_3
spider_opens_doors = 2
@@ -25,7 +25,7 @@
spider_opens_doors = 2
ventcrawler = 0
ai_ventcrawls = 0
environment_smash = 3
environment_smash = ENVIRONMENT_SMASH_RWALLS
idle_ventcrawl_chance = 0 // stick to the queen!
var/dcheck_counter = 0
var/queen_visible = 1
@@ -217,7 +217,7 @@
hasnested = 1
ventcrawler = 0
ai_ventcrawls = 0
environment_smash = 3
environment_smash = ENVIRONMENT_SMASH_RWALLS
DoQueenScreech(8, 100, 8, 100)
MassFlicker()
to_chat(src, "<span class='notice'>You have matured to your egglaying stage. You can now smash through walls, and lay eggs, but can no longer ventcrawl.</span>")
@@ -54,6 +54,7 @@
maxHealth = 50
ranged = 1
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 25
melee_damage_upper = 25
a_intent = INTENT_HARM
@@ -46,6 +46,7 @@
//LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly
var/melee_damage_lower = 0
var/melee_damage_upper = 0
var/obj_damage = 0 //how much damage this simple animal does to objects, if any
var/armour_penetration = 0 //How much armour they ignore, as a flat reduction from the targets armour value
var/melee_damage_type = BRUTE //Damage type of a simple mob's melee attack, should it do damage.
var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) // 1 for full damage , 0 for none , -1 for 1:1 heal from that source
@@ -276,9 +277,6 @@
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
attack_threshold_check(damage,M.melee_damage_type)
/mob/living/simple_animal/proc/attacked_by(obj/item/I, mob/living/user) // Handled in _onclick/click.dm
return
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
if(!Proj)
return
@@ -385,7 +383,7 @@
return
/mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/living/user as mob) //Marker -Agouri
/mob/living/simple_animal/attackby(obj/item/O, mob/living/user)
if(can_collar && !collar && istype(O, /obj/item/clothing/accessory/petcollar))
var/obj/item/clothing/accessory/petcollar/C = O
user.drop_item()
@@ -399,33 +397,7 @@
real_name = C.tagname
return
else
user.changeNext_move(CLICK_CD_MELEE)
if(attempt_harvest(O, user))
return
user.do_attack_animation(src)
if(istype(O) && istype(user) && !O.attack(src, user))
var/damage = 0
if(O.force)
if(O.force >= force_threshold)
damage = O.force
if(O.damtype == STAMINA)
damage = 0
if(O.damtype == BRUTE)
if(prob(33))
O.add_mob_blood(src)
var/turf/location = get_turf(src)
add_splatter_floor(location)
if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood
user.add_mob_blood(src)
visible_message("<span class='danger'>[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] [src] with [O]!</span>",\
"<span class='userdanger'>[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] you with [O]!</span>")
else
visible_message("<span class='danger'>[O] bounces harmlessly off of [src].</span>",\
"<span class='userdanger'>[O] bounces harmlessly off of [src].</span>")
else
user.visible_message("<span class='warning'>[user] gently taps [src] with [O].</span>",\
"<span class='warning'>This weapon is ineffective, it does no damage.</span>")
adjustBruteLoss(damage)
..()
/mob/living/simple_animal/movement_delay()
. = ..()
+1 -1
View File
@@ -1,5 +1,5 @@
/mob/Logout()
nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
unset_machine()
player_list -= src
log_access("Logout: [key_name(src)]")
+19
View File
@@ -946,6 +946,25 @@ var/list/slot_equipment_priority = list( \
if(processScheduler)
processScheduler.statProcesses()
if(statpanel("MC")) //looking at that panel
var/turf/T = get_turf(client.eye)
stat("Location:", COORD(T))
stat("CPU:", "[world.cpu]")
stat("Instances:", "[num2text(world.contents.len, 10)]")
GLOB.stat_entry()
stat(null)
if(Master)
Master.stat_entry()
else
stat("Master Controller:", "ERROR")
if(Failsafe)
Failsafe.stat_entry()
else
stat("Failsafe Controller:", "ERROR")
if(Master)
stat(null)
for(var/datum/controller/subsystem/SS in Master.subsystems)
SS.stat_entry()
statpanel("Status") // Switch to the Status panel again, for the sake of the lazy Stat procs
@@ -346,12 +346,12 @@
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(current_species.name == "Slime People") // whee I am part of the problem
hair_s.Blend("[s_colour]A0", ICON_ADD)
else
else if(hair_style.do_colouration)
hair_s.Blend(h_colour, ICON_ADD)
if(hair_style.secondary_theme)
var/icon/hair_secondary_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_style.secondary_theme]_s")
if(!hair_style.no_sec_colour)
if(!hair_style.no_sec_colour && hair_style.do_colouration )
hair_secondary_s.Blend(h_sec_colour, ICON_ADD)
hair_s.Blend(hair_secondary_s, ICON_OVERLAY)
@@ -370,12 +370,12 @@
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(current_species.name == "Slime People") // whee I am part of the problem
facial_s.Blend("[s_colour]A0", ICON_ADD)
else
else if(facial_hair_style.do_colouration)
facial_s.Blend(f_colour, ICON_ADD)
if(facial_hair_style.secondary_theme)
var/icon/facial_secondary_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_[facial_hair_style.secondary_theme]_s")
if(!facial_hair_style.no_sec_colour)
if(!facial_hair_style.no_sec_colour && facial_hair_style.do_colouration)
facial_secondary_s.Blend(f_sec_colour, ICON_ADD)
facial_s.Blend(facial_secondary_s, ICON_OVERLAY)
@@ -982,6 +982,14 @@
icon_state = "skrell_hair_f"
gender = FEMALE
/datum/sprite_accessory/hair/skrell/skr_tentacleslong
name = "Long Skrell Tentacles"
icon_state = "skrell_hair_verylong"
/datum/sprite_accessory/hair/skrell/skr_tentaclesshort
name = "Short Skrell Tentacles"
icon_state = "skrell_hair_veryshort"
/datum/sprite_accessory/hair/skrell/skr_gold_m
name = "Gold plated Skrell Male Tentacles"
icon_state = "skrell_hair_m"
@@ -1008,6 +1016,117 @@
gender = FEMALE
secondary_theme = "cloth"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_m
name = "Ombre Dye, Skrell Male Tentacles"
icon_state = "skrell_hair_m"
gender = MALE
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacle_f
name = "Ombre Dye, Skrell Female Tentacles"
icon_state = "skrell_hair_f"
gender = FEMALE
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentacleslong
name = "Ombre Dye, Long Skrell Tentacles"
icon_state = "skrell_hair_verylong"
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_gclothtentaclesshort
name = "Ombre Dye, Short Skrell Tentacles"
icon_state = "skrell_hair_veryshort"
secondary_theme = "gradient"
/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_m
name = "Black headress Skrell Male Tentacles"
icon_state = "skrell_hair_m"
gender = MALE
secondary_theme = "blackdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diablacktentacle_f
name = "Black headress Skrell Female Tentacles"
icon_state = "skrell_hair_f"
gender = FEMALE
secondary_theme = "blackdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diablacktentacleslong
name = "Black headress Long Skrell Tentacles"
icon_state = "skrell_hair_verylong"
secondary_theme = "blackdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_m
name = "Gold headress Skrell Male Tentacles"
icon_state = "skrell_hair_m"
gender = MALE
secondary_theme = "golddia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_f
name = "Gold headress Skrell Female Tentacles"
icon_state = "skrell_hair_f"
gender = FEMALE
secondary_theme = "golddia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diagoldtentacleslong
name = "Gold headress Long Skrell Tentacles"
icon_state = "skrell_hair_verylong"
secondary_theme = "golddia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_m
name = "Silver headress Skrell Male Tentacles"
icon_state = "skrell_hair_m"
gender = MALE
secondary_theme = "silvdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_f
name = "Silver headress Skrell Female Tentacles"
icon_state = "skrell_hair_f"
gender = FEMALE
secondary_theme = "silvdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_diasilvertentacleslong
name = "Silver headress Long Skrell Tentacles"
icon_state = "skrell_hair_verylong"
secondary_theme = "silvdia"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_festivetentacle_m
name = "Festive headress Skrell Male Tentacles"
icon_state = "skrell_hair_m"
gender = MALE
secondary_theme = "fest"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_festivetentacle_f
name = "Festive headress Skrell Female Tentacles"
icon_state = "skrell_hair_f"
gender = FEMALE
secondary_theme = "fest"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_festivetentacleslong
name = "Festive headress Long Skrell Tentacles"
icon_state = "skrell_hair_verylong"
secondary_theme = "fest"
no_sec_colour = 1
/datum/sprite_accessory/hair/skrell/skr_festivetentaclesshort
name = "Festive headress Short Skrell Tentacles"
icon_state = "skrell_hair_veryshort"
secondary_theme = "fest"
no_sec_colour = 1
//Tajaran styles
/datum/sprite_accessory/hair/tajara
species_allowed = list("Tajaran")
glasses_over = 1
@@ -1064,6 +1183,11 @@
icon_state = "hair_curly"
glasses_over = null
/datum/sprite_accessory/hair/tajara/taj_hair_bedhead
name = "Tajara bedhead"
icon_state = "hair_tbedhead"
glasses_over = null
/datum/sprite_accessory/hair/tajara/taj_hair_retro
name = "Tajaran Ladies' Retro"
icon_state = "hair_ladies_retro"
@@ -1228,6 +1352,64 @@
name = "Clipped Vox Razorback"
icon_state = "vox_razor_clipped"
//DIONA: Sprites by skittles below
/datum/sprite_accessory/hair/diona
species_allowed = list("Diona")
glasses_over = 1
do_colouration = 0
/datum/sprite_accessory/hair/diona/diona_bracket
name = "Bracket"
icon_state = "diona_bracket"
/datum/sprite_accessory/hair/diona/diona_brush
name = "Brush"
icon_state = "diona_brush"
/datum/sprite_accessory/hair/diona/diona_cornflow
name = "Corn Flowers"
icon_state = "diona_cornflower"
/datum/sprite_accessory/hair/diona/diona_laur
name = "Laural"
icon_state = "diona_laurel"
/datum/sprite_accessory/hair/diona/diona_leaf
name = "Leafy"
icon_state = "diona_leafy"
/datum/sprite_accessory/hair/diona/diona_mead
name = "Meadow"
icon_state = "diona_meadow"
/datum/sprite_accessory/hair/diona/diona_oak
name = "Oak"
icon_state = "diona_oak"
/datum/sprite_accessory/hair/diona/diona_root
name = "Roots"
icon_state = "diona_root"
/datum/sprite_accessory/hair/diona/diona_rose
name = "Rose"
icon_state = "diona_rosey"
/datum/sprite_accessory/hair/diona/diona_spinner
name = "Spinners"
icon_state = "diona_spinner"
/datum/sprite_accessory/hair/diona/diona_spout
name = "Sprouts"
icon_state = "diona_sprout"
/datum/sprite_accessory/hair/diona/diona_vine
name = "Vines"
icon_state = "diona_vine"
/datum/sprite_accessory/hair/diona/diona_wildflow
name = "Wildflowers"
icon_state = "diona_wildflower"
// Apollo-specific
/datum/sprite_accessory/hair/wryn
@@ -60,7 +60,7 @@
..()
/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "ntnet_relay.tmpl", "NTNet Quantum Relay", 500, 300)
ui.open()
@@ -32,7 +32,7 @@
integrity_failure = 50
max_integrity = 100
armor = list(melee = 0, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 0, acid = 0)
armor = list(melee = 0, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 100, rad = 100)
// Important hardware (must be installed for computer to work)
@@ -1,29 +1,3 @@
/obj/item/device/modular_computer/emp_act(severity)
if(prob(20 / severity))
take_damage(obj_integrity, BURN)
..()
/obj/item/device/modular_computer/ex_act(severity)
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(25))
qdel(src)
else if(prob(50))
obj_integrity = 0
if(3)
if(prob(25))
obj_integrity = 0
/obj/item/device/modular_computer/bullet_act(obj/item/projectile/P)
take_damage(P.damage, P.damage_type)
..()
/obj/item/device/modular_computer/blob_act()
if(prob(75))
take_damage(obj_integrity, BRUTE)
/obj/item/device/modular_computer/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
. = ..()
var/component_probability = min(50, max(damage_amount*0.1, 1 - obj_integrity/max_integrity))
@@ -36,17 +10,21 @@
for(var/I in all_components)
var/obj/item/weapon/computer_hardware/H = all_components[I]
if(prob(component_probability))
H.take_damage(round(damage_amount*0.5))
H.take_damage(round(damage_amount*0.5), damage_type, damage_flag, 0)
/obj/item/device/modular_computer/proc/break_apart(damage = TRUE)
physical.visible_message("\The [src] breaks apart!")
var/turf/newloc = get_turf(src)
new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2))
for(var/C in all_components)
var/obj/item/weapon/computer_hardware/H = all_components[C]
uninstall_component(H)
H.forceMove(newloc)
if(damage && prob(25))
H.take_damage(rand(10, 30))
/obj/item/device/modular_computer/deconstruct(disassembled = TRUE)
break_apart()
/obj/item/device/modular_computer/proc/break_apart()
if(can_deconstruct)
physical.visible_message("\The [src] breaks apart!")
var/turf/newloc = get_turf(src)
new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2))
for(var/C in all_components)
var/obj/item/weapon/computer_hardware/H = all_components[C]
uninstall_component(H)
H.forceMove(newloc)
if(prob(25))
H.take_damage(rand(10,30), BRUTE, 0, 0)
relay_qdel()
qdel(src)
@@ -29,7 +29,7 @@
to_chat(user, "<span class='danger'>\The [src] beeps three times, it's screen displaying a \"DISK ERROR\" warning.</span>")
return // No HDD, No HDD files list or no stored files. Something is very broken.
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -160,7 +160,7 @@
if(..())
return 1
var/datum/nanoui/ui = nanomanager.get_open_ui(usr, src, "main")
var/datum/nanoui/ui = SSnanoui.get_open_ui(usr, src, "main")
if(computer)
switch(href_list["action"])
@@ -36,7 +36,7 @@
..()
/datum/computer_file/program/ntnet_dos/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -61,7 +61,7 @@
return temp
/datum/computer_file/program/revelation/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -137,7 +137,7 @@
/datum/computer_file/program/card_mod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -255,7 +255,7 @@
playsound(computer.loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
spawn(50)
printing = 0
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
var/title
var/content
if(mode == 2)
@@ -326,7 +326,7 @@
if(modify)
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
/datum/computer_file/program/card_mod/ui_data(mob/user)
@@ -94,7 +94,7 @@
return menu_state
/datum/computer_file/program/comm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
ui = nanomanager.try_update_ui(user, src, ui_key, ui)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -191,14 +191,14 @@
if(istype(id))
crew_announcement.announcer = GetNameAndAssignmentFromId(id)
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
if(href_list["PRG_logout"])
authenticated = COMM_AUTHENTICATION_NONE
crew_announcement.announcer = ""
setMenuState(usr, COMM_SCREEN_MAIN)
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
if(is_authenticated(usr))
@@ -239,11 +239,11 @@
if(is_authenticated(usr) == COMM_AUTHENTICATION_MAX)
if(message_cooldown)
to_chat(usr, "<span class='warning'>Please allow at least one minute to pass between announcements.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement")
if(!input || message_cooldown || ..() || !(is_authenticated(usr) == COMM_AUTHENTICATION_MAX))
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
crew_announcement.Announce(input)
message_cooldown = 1
@@ -253,7 +253,7 @@
if("callshuttle")
var/input = input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null
if(!input || ..() || !is_authenticated(usr))
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
call_shuttle_proc(usr, input)
@@ -264,7 +264,7 @@
if("cancelshuttle")
if(isAI(usr) || isrobot(usr))
to_chat(usr, "<span class='warning'>Firewalls prevent you from recalling the shuttle.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
var/response = alert("Are you sure you wish to recall the shuttle?", "Confirm", "Yes", "No")
if(response == "Yes")
@@ -323,11 +323,11 @@
if(is_authenticated(usr) == COMM_AUTHENTICATION_MAX)
if(centcomm_message_cooldown)
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") as text|null
if(!input || ..() || !(is_authenticated(usr) == COMM_AUTHENTICATION_MAX))
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
Nuke_request(input, usr)
to_chat(usr, "<span class='notice'>Request sent.</span>")
@@ -342,11 +342,11 @@
if(is_authenticated(usr) == COMM_AUTHENTICATION_MAX)
if(centcomm_message_cooldown)
to_chat(usr, "<span class='warning'>Arrays recycling. Please stand by.</span>")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") as text|null
if(!input || ..() || !(is_authenticated(usr) == COMM_AUTHENTICATION_MAX))
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
Centcomm_announce(input, usr)
to_chat(usr, "Message transmitted.")
@@ -361,11 +361,11 @@
if((is_authenticated(usr) == COMM_AUTHENTICATION_MAX) && (computer && computer.emagged))
if(centcomm_message_cooldown)
to_chat(usr, "Arrays recycling. Please stand by.")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") as text|null
if(!input || ..() || !(is_authenticated(usr) == COMM_AUTHENTICATION_MAX))
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
Syndicate_announce(input, usr)
to_chat(usr, "Message transmitted.")
@@ -398,5 +398,5 @@
trade_dockrequest_timelimit = 0
event_announcement.Announce("Docking request for trading ship denied.", "Docking request")
nanomanager.update_uis(src)
SSnanoui.update_uis(src)
return 1
@@ -34,7 +34,7 @@
return 0
/datum/computer_file/program/alarm_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -24,7 +24,7 @@
attached = locate() in T
/datum/computer_file/program/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -15,7 +15,7 @@
/datum/computer_file/program/computerconfig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -17,7 +17,7 @@
return t
/datum/computer_file/program/filemanager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)
@@ -104,7 +104,7 @@
return 0
/datum/computer_file/program/ntnetdownload/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers)
assets.send(user)

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