Merge branch 'master' of https://github.com/tgstation/-tg-station into begone_ye_jellies

Conflicts:
	code/game/machinery/teleporter.dm
This commit is contained in:
Incoming
2015-04-29 13:37:01 -04:00
526 changed files with 5924 additions and 4334 deletions
+4 -9
View File
@@ -305,8 +305,6 @@
usr << browse(dat, "window=players;size=600x480")
/datum/admins/proc/check_antagonists()
var/list/supported_continuous_modes = list("revolution", "gang", "wizard", "malfunction", "blob")
var/list/supported_midround_antag_modes = list("wizard", "malfunction", "blob")
if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
var/dat = "<html><head><title>Round Status</title></head><body><h1><B>Round Status</B></h1>"
dat += "Current Game Mode: <B>[ticker.mode.name]</B><BR>"
@@ -324,11 +322,8 @@
else
dat += "ETA: <a href='?_src_=holder;edit_shuttle_time=1'>[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]</a><BR>"
dat += "<B>Continuous Round Status</B><BR>"
if(!ticker.mode.config_tag in supported_continuous_modes)
dat += "Continue if antagonists die"
else
dat += "<a href='?_src_=holder;toggle_continuous=1'>[config.continuous[ticker.mode.config_tag] ? "Continue if antagonists die" : "End on antagonist death"]</a>"
if(config.continuous[ticker.mode.config_tag] && ticker.mode.config_tag in supported_midround_antag_modes)
dat += "<a href='?_src_=holder;toggle_continuous=1'>[config.continuous[ticker.mode.config_tag] ? "Continue if antagonists die" : "End on antagonist death"]</a>"
if(config.continuous[ticker.mode.config_tag])
dat += ", <a href='?_src_=holder;toggle_midround_antag=1'>[config.midround_antag[ticker.mode.config_tag] ? "creating replacement antagonists" : "not creating new antagonists"]</a><BR>"
else
dat += "<BR>"
@@ -386,7 +381,7 @@
dat += "</table>"
if(ticker.mode.A_bosses.len || ticker.mode.A_gang.len)
dat += "<br><table cellspacing=5><tr><td><B>[gang_name("A")] Gang: [round((ticker.mode.A_territory.len/start_state.num_territories)*100, 0.1)]% Station Control</B></td><td></td></tr>"
dat += "<br><table cellspacing=5><tr><td><B>[gang_name("A")] Gang: [(ticker.mode.gang_points ? "[ticker.mode.gang_points.A] Influence, " : "")][round((ticker.mode.A_territory.len/start_state.num_territories)*100, 1)]% Control</B></td><td></td></tr>"
for(var/datum/mind/N in ticker.mode.A_bosses)
var/mob/M = N.current
if(!M)
@@ -402,7 +397,7 @@
dat += "</table>"
if(ticker.mode.B_bosses.len || ticker.mode.B_gang.len)
dat += "<br><table cellspacing=5><tr><td><B>[gang_name("B")] Gang: [round((ticker.mode.B_territory.len/start_state.num_territories)*100, 0.1)]% Station Control</B></td><td></td></tr>"
dat += "<br><table cellspacing=5><tr><td><B>[gang_name("B")] Gang: [(ticker.mode.gang_points ? "[ticker.mode.gang_points.B] Influence, " : "")][round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1)]% Control</B></td><td></td></tr>"
for(var/datum/mind/N in ticker.mode.B_bosses)
var/mob/M = N.current
if(!M)
+18 -10
View File
@@ -16,35 +16,35 @@
message_admins("[key_name_admin(usr)] created traitors.")
log_admin("[key_name(usr)] created traitors.")
else
message_admins("[key_name_admin(usr)] tried to create traitors. Unfortunatly there were no candidates available.")
message_admins("[key_name_admin(usr)] tried to create traitors. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create traitors.")
if("2")
if(src.makeChanglings())
message_admins("[key_name(usr)] created changelings.")
log_admin("[key_name(usr)] created changelings.")
else
message_admins("[key_name_admin(usr)] tried to create changelings. Unfortunatly there were no candidates available.")
message_admins("[key_name_admin(usr)] tried to create changelings. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create changelings.")
if("3")
if(!src.makeRevs())
message_admins("[key_name(usr)] started a revolution.")
log_admin("[key_name(usr)] started a revolution.")
else
message_admins("[key_name_admin(usr)] tried to start a revolution. Unfortunatly there were no candidates available.")
message_admins("[key_name_admin(usr)] tried to start a revolution. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to start a revolution.")
if("4")
if(src.makeCult())
message_admins("[key_name(usr)] started a cult.")
log_admin("[key_name(usr)] started a cult.")
else
message_admins("[key_name_admin(usr)] tried to start a cult. Unfortunatly there were no candidates available.")
message_admins("[key_name_admin(usr)] tried to start a cult. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to start a cult.")
if("5")
if(src.makeMalfAImode())
message_admins("[key_name(usr)] caused an AI to malfunction.")
log_admin("[key_name(usr)] caused an AI to malfunction.")
else
message_admins("[key_name_admin(usr)] tried to cause an AI to malfunction. Unfortunatly there were no candidates available.")
message_admins("[key_name_admin(usr)] tried to cause an AI to malfunction. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to cause an AI to malfunction.")
if("6")
message_admins("[key_name(usr)] is creating a wizard...")
@@ -52,7 +52,7 @@
message_admins("[key_name(usr)] created a wizard.")
log_admin("[key_name(usr)] created a wizard.")
else
message_admins("[key_name_admin(usr)] tried to create a wizard. Unfortunatly there were no candidates available.")
message_admins("[key_name_admin(usr)] tried to create a wizard. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create a wizard.")
if("7")
message_admins("[key_name(usr)] is creating a nuke team...")
@@ -60,7 +60,7 @@
message_admins("[key_name(usr)] created a nuke team.")
log_admin("[key_name(usr)] created a nuke team.")
else
message_admins("[key_name_admin(usr)] tried to create a nuke team. Unfortunatly there were not enough candidates available.")
message_admins("[key_name_admin(usr)] tried to create a nuke team. Unfortunately, there were not enough candidates available.")
log_admin("[key_name(usr)] failed to create a nuke team.")
if("8")
message_admins("[key_name(usr)] spawned a ninja.")
@@ -76,7 +76,7 @@
message_admins("[key_name(usr)] created a death squad.")
log_admin("[key_name(usr)] created a death squad.")
else
message_admins("[key_name_admin(usr)] tried to create a death squad. Unfortunatly there were not enough candidates available.")
message_admins("[key_name_admin(usr)] tried to create a death squad. Unfortunately, there were not enough candidates available.")
log_admin("[key_name(usr)] failed to create a death squad.")
if("11")
var/strength = input("Set Blob Strength (1=Weak, 2=Strong, 3=Full)","Set Strength",1) as num
@@ -88,7 +88,7 @@
message_admins("[key_name(usr)] started a gang war.")
log_admin("[key_name(usr)] started a gang war.")
else
message_admins("[key_name(usr)] tried to start a gang war. Unfortunatly there were not enough candidates available.")
message_admins("[key_name(usr)] tried to start a gang war. Unfortunately, there were not enough candidates available.")
log_admin("[key_name(usr)] failed to start a gang war.")
if("13")
message_admins("[key_name(usr)] is creating an emergency response team...")
@@ -96,7 +96,7 @@
message_admins("[key_name(usr)] created an emergency response team.")
log_admin("[key_name(usr)] created an emergency response team.")
else
message_admins("[key_name_admin(usr)] tried to create an emergency response team. Unfortunatly there were not enough candidates available.")
message_admins("[key_name_admin(usr)] tried to create an emergency response team. Unfortunately, there were not enough candidates available.")
log_admin("[key_name(usr)] failed to create an emergency response team.")
if("14")
message_admins("[key_name(usr)] is creating an abductor team...")
@@ -106,6 +106,14 @@
else
message_admins("[key_name_admin(usr)] tried to create an abductor team. Unfortunatly there were not enough candidates available.")
log_admin("[key_name(usr)] failed to create an abductor team.")
if("15")
message_admins("[key_name(usr)] is creating a revenant...")
if(src.makeRevenant())
message_admins("[key_name(usr)] created a revenant.")
log_admin("[key_name(usr)] created a revenant.")
else
message_admins("[key_name_admin(usr)] tried to create a revenant. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create a revenant.")
else if(href_list["forceevent"])
if(!check_rights(R_FUN)) return
+1 -1
View File
@@ -29,6 +29,6 @@
target.Weaken(20)
target.stuttering = 20
target << "You've been hit by bluespace artillery!"
target << "<span class='userdanger'>You're hit by bluespace artillery!</span>"
log_admin("[target.name] has been hit by Bluespace Artillery fired by [usr]")
message_admins("[target.name] has been hit by Bluespace Artillery fired by [usr]")
+5 -5
View File
@@ -690,7 +690,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
@@ -712,9 +712,9 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store)
if ("tournament janitor")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
@@ -807,7 +807,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
+31 -4
View File
@@ -23,6 +23,7 @@ client/proc/one_click_antag()
<a href='?src=\ref[src];makeAntag=10'>Make Deathsquad (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=13'>Make Emergency Response Team (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=14'>Make Abductor Team (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=15'>Make Revenant (Requires Ghost)</a><br>
"}
/* These dont work just yet
Ninja, aliens and deathsquad I have not looked into yet
@@ -506,7 +507,11 @@ client/proc/one_click_antag()
teams_finished = round(ticker.mode.abductors.len / 2)
var/number = teams_finished + 1
var/datum/game_mode/abduction/temp = new
var/datum/game_mode/abduction/temp
if(ticker.mode.config_tag == "abductor")
temp = ticker.mode
else
temp = new
var/agent_mind = pick(candidates)
candidates -= agent_mind
@@ -525,18 +530,33 @@ client/proc/one_click_antag()
temp.team_names.len = number
temp.scientists[number] = scientist_mind
temp.agents[number] = agent_mind
temp.abductors = list(agent_mind,scientist_mind)
temp.make_abductor_team(number)
temp.abductors |= list(agent_mind,scientist_mind)
temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
temp.post_setup_team(number)
ticker.mode.abductors += temp.abductors
if(ticker.mode.config_tag == "abductor")
var/datum/game_mode/abduction/A = ticker.mode
A.teams += 1
else
ticker.mode.abductors |= temp.abductors
return 1
else
return
/datum/admins/proc/makeRevenant()
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for becoming a revenant?", "revenant", null)
if(candidates.len >= 1)
var/spook_op = pick(candidates)
var/mob/dead/observer/O = spook_op
candidates -= spook_op
var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant(get_turf(O))
revvie.key = O.key
revvie.mind.assigned_role = "revenant"
revvie.mind.special_role = "Revenant"
return 1
else
return
/datum/admins/proc/getCandidates(var/Question, var/jobbanType, var/datum/game_mode/gametypeCheck)
var/list/mob/dead/observer/candidates = list()
var/time_passed = world.time
@@ -553,12 +573,19 @@ client/proc/one_click_antag()
if(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate"))
continue
spawn(0)
G << 'sound/misc/notice2.ogg' //Alerting them to their consideration
switch(alert(G,Question,"Please answer in 30 seconds!","Yes","No"))
if("Yes")
G << 'sound/machines/ping.ogg'
G << "<span class='notice'>Choice registered: Yes.</span>"
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
G << "<span class='danger'>Sorry, you were too late for the consideration!</span>"
G << 'sound/machines/buzz-sigh.ogg'
return
candidates += G
if("No")
G << "<span class='danger'>Choice registered: No.</span>"
G << 'sound/machines/buzz-sigh.ogg'
return
else
return
+1 -1
View File
@@ -33,7 +33,7 @@
if(usr)
if (usr.client)
if(usr.client.holder)
M << "<b>You hear [ticker.Bible_deity_name ? "the voice of " + ticker.Bible_deity_name : "a voice"] in your head... <i>[msg]</i></b>"
M << "<i>You hear [ticker.Bible_deity_name ? "the voice of " + ticker.Bible_deity_name : "a voice"] in your head... <b>[msg]</i></b>"
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
message_admins("<span class='adminnotice'><b> SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] :</b> [msg]</span>")
+1 -1
View File
@@ -19,7 +19,7 @@
if(ishuman(usr))
var/mob/living/carbon/human/user = usr
if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50))
user << "Your hand slips, setting off the trigger."
user << "<span class='warning'>Your hand slips, setting off the trigger!</span>"
pulse(0)
update_icon()
if(usr)
+62 -5
View File
@@ -62,6 +62,7 @@ datum/preferences
var/eye_color = "000" //Eye color
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/mutant_color = "FFF" //Mutant race skin color
var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
//Mob preview
var/icon/preview_icon_front = null
@@ -94,6 +95,10 @@ datum/preferences
/datum/preferences/New(client/C)
blood_type = random_blood_type()
ooccolor = normal_ooc_colour
custom_names["ai"] = pick(ai_names)
custom_names["cyborg"] = pick(ai_names)
custom_names["clown"] = pick(clown_names)
custom_names["mime"] = pick(mime_names)
if(istype(C))
if(!IsGuestKey(C.key))
load_path(C.ckey)
@@ -158,10 +163,18 @@ datum/preferences
dat += "<a href='?_src_=prefs;preference=name;task=input'>[real_name]</a><BR>"
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : "Female"]</a><BR>"
dat += "<b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a>"
dat += "<b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a><BR>"
dat += "<b>Special Names:</b><BR>"
dat += "<a href ='?_src_=prefs;preference=clown_name;task=input'><b>Clown:</b> [custom_names["clown"]]</a> "
dat += "<a href ='?_src_=prefs;preference=mime_name;task=input'><b>Mime:</b>[custom_names["mime"]]</a><BR>"
dat += "<a href ='?_src_=prefs;preference=ai_name;task=input'><b>AI:</b> [custom_names["ai"]]</a> "
dat += "<a href ='?_src_=prefs;preference=cyborg_name;task=input'><b>Cyborg:</b> [custom_names["cyborg"]]</a><BR>"
dat += "<a href ='?_src_=prefs;preference=religion_name;task=input'><b>Chaplain religion:</b> [custom_names["religion"]] </a>"
dat += "<a href ='?_src_=prefs;preference=deity_name;task=input'><b>Chaplain deity:</b> [custom_names["deity"]]</a><BR></td>"
dat += "</td><td valign='center'>"
dat += "<td valign='center'>"
dat += "<div class='statusDisplay'><center><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></center></div>"
@@ -182,11 +195,11 @@ datum/preferences
dat += "<b>Underwear:</b><BR><a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><BR>"
dat += "<b>Undershirt:</b><BR><a href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a><BR>"
dat += "<b>Socks:</b><BR><a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><BR>"
dat += "<b>Backpack:</b><BR><a href ='?_src_=prefs;preference=bag;task=input'>[backbaglist[backbag]]</a><BR>"
dat += "<b>Backpack:</b><BR><a href ='?_src_=prefs;preference=bag;task=input'>[backbaglist[backbag]]</a><BR></td>"
if(pref_species.use_skintones)
dat += "</td><td valign='top' width='21%'>"
dat += "<td valign='top' width='21%'>"
dat += "<h3>Skin Tone</h3>"
@@ -304,7 +317,7 @@ datum/preferences
dat += "</center>"
//user << browse(dat, "window=preferences;size=560x560")
var/datum/browser/popup = new(user, "preferences", "<div align='center'>Character Setup</div>", 640, 680)
var/datum/browser/popup = new(user, "preferences", "<div align='center'>Character Setup</div>", 640, 750)
popup.set_content(dat)
popup.open(0)
@@ -752,6 +765,50 @@ datum/preferences
var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist
if(new_backbag)
backbag = backbaglist.Find(new_backbag)
if("clown_name")
var/new_clown_name = reject_bad_name( input(user, "Choose your character's clown name:", "Character Preference") as text|null )
if(new_clown_name)
custom_names["clown"] = new_clown_name
else
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
if("mime_name")
var/new_mime_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
if(new_mime_name)
custom_names["mime"] = new_mime_name
else
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
if("ai_name")
var/new_ai_name = reject_bad_name( input(user, "Choose your character's AI name:", "Character Preference") as text|null, 1 )
if(new_ai_name)
custom_names["ai"] = new_ai_name
else
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and .</font>"
if("cyborg_name")
var/new_cyborg_name = reject_bad_name( input(user, "Choose your character's cyborg name:", "Character Preference") as text|null, 1 )
if(new_cyborg_name)
custom_names["cyborg"] = new_cyborg_name
else
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and .</font>"
if("religion_name")
var/new_religion_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
if(new_religion_name)
custom_names["religion"] = new_religion_name
else
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
if("deity_name")
var/new_deity_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
if(new_deity_name)
custom_names["deity"] = new_deity_name
else
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
else
switch(href_list["preference"])
if("publicity")
@@ -187,6 +187,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] >> socks
S["backbag"] >> backbag
S["mutant_color"] >> mutant_color
S["clown_name"] >> custom_names["clown"]
S["mime_name"] >> custom_names["mime"]
S["ai_name"] >> custom_names["ai"]
S["cyborg_name"] >> custom_names["cyborg"]
S["religion_name"] >> custom_names["religion"]
S["deity_name"] >> custom_names["deity"]
//Jobs
S["userandomjob"] >> userandomjob
@@ -274,6 +280,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["backbag"] << backbag
S["species"] << pref_species.name
S["mutant_color"] << mutant_color
S["clown_name"] << custom_names["clown"]
S["mime_name"] << custom_names["mime"]
S["ai_name"] << custom_names["ai"]
S["cyborg_name"] << custom_names["cyborg"]
S["religion_name"] << custom_names["religion"]
S["deity_name"] << custom_names["deity"]
//Jobs
S["userandomjob"] << userandomjob
+12 -12
View File
@@ -113,12 +113,12 @@ BLIND // can't see anything
permeability_coefficient = initial(permeability_coefficient)
flags |= visor_flags
flags_inv |= visor_flags_inv
user << "You push \the [src] back into place."
user << "<span class='notice'>You push \the [src] back into place.</span>"
src.mask_adjusted = 0
slot_flags = initial(slot_flags)
else
src.icon_state += "_up"
user << "You push \the [src] out of the way."
user << "<span class='notice'>You push \the [src] out of the way.</span>"
gas_transfer_coefficient = null
permeability_coefficient = null
flags &= ~visor_flags
@@ -293,20 +293,20 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon")
var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes
if(get_dist(usr, src) > 1)
usr << "You have moved too far away."
usr << "<span class='warning'>You have moved too far away!</span>"
return
sensor_mode = modes.Find(switchMode) - 1
if (src.loc == usr)
switch(sensor_mode)
if(0)
usr << "You disable your suit's remote sensing equipment."
usr << "<span class='notice'>You disable your suit's remote sensing equipment.</span>"
if(1)
usr << "Your suit will now only report whether you are alive or dead."
usr << "<span class='notice'>Your suit will now only report whether you are alive or dead.</span>"
if(2)
usr << "Your suit will now only report your exact vital lifesigns."
usr << "<span class='notice'>Your suit will now only report your exact vital lifesigns.</span>"
if(3)
usr << "Your suit will now report your exact vital lifesigns as well as your coordinate position."
usr << "<span class='notice'>Your suit will now report your exact vital lifesigns as well as your coordinate position.</span>"
if(istype(loc,/mob/living/carbon/human))
var/mob/living/carbon/human/H = loc
@@ -329,19 +329,19 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
if(!can_use(usr))
return
if(!can_adjust)
usr << "You cannot wear this suit any differently."
usr << "<span class='warning'>You cannot wear this suit any differently!</span>"
return
if(src.adjusted == 1)
src.fitted = initial(fitted)
src.item_color = initial(item_color)
src.item_color = src.suit_color //colored jumpsuits are shit and break without this
usr << "You adjust the suit back to normal."
usr << "<span class='notice'>You adjust the suit back to normal.</span>"
src.adjusted = 0
else
if(src.fitted != FEMALE_UNIFORM_TOP)
src.fitted = NO_FEMALE_UNIFORM
src.item_color += "_d"
usr << "You adjust the suit to wear it more casually."
usr << "<span class='notice'>You adjust the suit to wear it more casually.</span>"
src.adjusted = 1
usr.update_inv_w_uniform()
..()
@@ -388,7 +388,7 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
flags |= (visor_flags)
flags_inv |= (visor_flags_inv)
icon_state = initial(icon_state)
usr << "You pull \the [src] down."
usr << "<span class='notice'>You pull \the [src] down.</span>"
flash_protect = initial(flash_protect)
tint = initial(tint)
else
@@ -396,7 +396,7 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
flags &= ~(visor_flags)
flags_inv &= ~(visor_flags_inv)
icon_state = "[initial(icon_state)]up"
usr << "You push \the [src] up."
usr << "<span class='notice'>You push \the [src] up.</span>"
flash_protect = 0
tint = 0
+1 -1
View File
@@ -12,7 +12,7 @@
attack_self(mob/user)
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
user << "<span class='warning'>You cannot turn the light on while in this [user.loc]!</span>" //To prevent some lighting anomalities.
return
on = !on
icon_state = "hardhat[on]_[item_color]"
+3 -3
View File
@@ -235,14 +235,14 @@ obj/item/clothing/head/helmet/bluetaghelm
helmetCam.c_tag = "Helmet-Mounted Camera (No User)([rand(1,999)])"
helmetCam.network = list("SS13")
update_icon()
user.visible_message("<span class='notice'>[user] attaches [A] to [src]</span>","<span class='notice'>You attach [A] to [src]</span>")
user.visible_message("[user] attaches [A] to [src].","<span class='notice'>You attach [A] to [src].</span>")
return
if(istype(A, /obj/item/weapon/crowbar))
if(!helmetCam)
..()
return
user.visible_message("<span class='notice'>[user] removes [helmetCam] from [src]</span>","<span class='notice'>You remove [helmetCam] from [src]</span>")
user.visible_message("[user] removes [helmetCam] from [src].","<span class='notice'>You remove [helmetCam] from [src].</span>")
helmetCam.assembly.loc = get_turf(src)
helmetCam.assembly = null
qdel(helmetCam)
@@ -263,7 +263,7 @@ obj/item/clothing/head/helmet/bluetaghelm
var/mob/living/carbon/human/user = usr
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]."
user << "<span class='warning'>You cannot turn the light on while in this [user.loc]!</span>"
F.on = !F.on
user << "<span class='notice'>You toggle the helmetlight [F.on ? "on":"off"].</span>"
+2 -2
View File
@@ -100,12 +100,12 @@
src.icon_state = "ushankaup"
src.item_state = "ushankaup"
earflaps = 0
user << "You raise the ear flaps on the ushanka."
user << "<span class='notice'>You raise the ear flaps on the ushanka.</span>"
else
src.icon_state = "ushankadown"
src.item_state = "ushankadown"
earflaps = 1
user << "You lower the ear flaps on the ushanka."
user << "<span class='notice'>You lower the ear flaps on the ushanka.</span>"
/*
* Pumpkin head
+2 -2
View File
@@ -27,10 +27,10 @@
src.flipped = !src.flipped
if(src.flipped)
icon_state = "[item_color]soft_flipped"
user << "You flip the hat backwards."
user << "<span class='notice'>You flip the hat backwards.</span>"
else
icon_state = "[item_color]soft"
user << "You flip the hat back in normal position."
user << "<span class='notice'>You flip the hat back in normal position.</span>"
usr.update_inv_head(0) //so our mob-overlays update
/obj/item/clothing/head/soft/examine(mob/user)
+1 -1
View File
@@ -12,7 +12,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
if(src == C.wear_mask)
user << "<span class='notice'>You need help taking this off!</span>"
user << "<span class='warning'>You need help taking this off!</span>"
return
..()
+3 -3
View File
@@ -21,7 +21,7 @@
if(bananium < 100)
on = !on
update_icon()
usr << "<span class='danger'>You ran out of bananium!</span>"
usr << "<span class='warning'>You ran out of bananium!</span>"
else
..()
@@ -49,9 +49,9 @@
if(bananium > 0)
on = !on
update_icon()
usr << "You [on ? "activate" : "deactivate"] the prototype shoes."
usr << "<span class='notice'>You [on ? "activate" : "deactivate"] the prototype shoes.</span>"
else
usr << "You need bananium to turn the prototype shoes on."
usr << "<span class='warning'>You need bananium to turn the prototype shoes on!</span>"
/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon()
if(on)
+1 -1
View File
@@ -106,6 +106,6 @@
if(ishuman(user))
var/mob/living/carbon/human/C = user
if(C.shoes == src && src.chained == 1)
user << "<span class='notice'>You need help taking these off!</span>"
user << "<span class='warning'>You need help taking these off!</span>"
return
..()
+1 -1
View File
@@ -28,7 +28,7 @@
src.slowdown = slowdown_active
magpulse = !magpulse
icon_state = "[magboot_state][magpulse]"
user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system."
user << "<span class='notice'>You [magpulse ? "enable" : "disable"] the mag-pulse traction system.</span>"
user.update_inv_shoes(0) //so our mob-overlays update
user.update_gravity(user.mob_has_gravity())
+2 -2
View File
@@ -1,7 +1,7 @@
/obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking
/obj/item/clothing/shoes/syndigaloshes
desc = "A pair of brown shoes. They seem to have extra grip."
/obj/item/clothing/shoes/sneakers/syndigaloshes
desc = "A pair of brown shoes."
name = "brown shoes"
icon_state = "brown"
item_state = "brown"
@@ -25,6 +25,7 @@
action_button_name = "Toggle Chronosuit"
slowdown = 2
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90)
var/list/chronosafe_items = list(/obj/item/weapon/chrono_eraser, /obj/item/weapon/gun/energy/chrono_gun)
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null
var/activating = 0
@@ -74,6 +75,13 @@
var/turf/to_turf = from_turf
var/atom/movable/overlay/phaseanim = new(from_turf)
var/obj/holder = new(camera)
var/list/nonsafe_slots = list(slot_belt, slot_back, slot_l_hand, slot_r_hand)
for(var/slot in nonsafe_slots)
var/obj/item/slot_item = user.get_item_by_slot(slot)
if(slot_item && !(slot_item.type in chronosafe_items) && user.unEquip(slot_item))
user << "<span class='notice'>Your [slot_item.name] got left behind.</span>"
phaseanim.name = "phasing [user.name]"
phaseanim.icon = 'icons/mob/mob.dmi'
phaseanim.icon_state = "chronostuck"
+2 -2
View File
@@ -14,7 +14,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
user << "<span class='warning'>You cannot turn the light on while in this [user.loc]!</span>" //To prevent some lighting anomalities.
return
on = !on
icon_state = "hardsuit[on]-[item_color]"
@@ -171,7 +171,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) //Toggle Helmet
if(!isturf(user.loc))
user << "You cannot toggle your helmet while in this [user.loc]" //To prevent some lighting anomalities.
user << "<span class='warning'>You cannot toggle your helmet while in this [user.loc]!</span>" //To prevent some lighting anomalities.
return
on = !on
if(on || force)
+2 -2
View File
@@ -60,7 +60,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|ARMS
allowed = list(/obj/item/weapon/kitchenknife)
allowed = list(/obj/item/weapon/kitchen)
togglename = "sleeves"
//Cook
@@ -71,7 +71,7 @@
item_state = "apronchef"
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
allowed = list(/obj/item/weapon/kitchenknife)
allowed = list(/obj/item/weapon/kitchen)
//Detective
/obj/item/clothing/suit/det_suit
+7 -7
View File
@@ -38,10 +38,10 @@
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
if(H.wear_suit != src)
H << "You must be wearing [src] to put up the hood."
H << "<span class='warning'>You must be wearing [src] to put up the hood!</span>"
return
if(H.head)
H << "You're already wearing something on your head."
H << "<span class='warning'>You're already wearing something on your head!</span>"
return
else
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
@@ -66,7 +66,7 @@
if(!can_use(usr))
return 0
usr << "You toggle [src]'s [togglename]."
usr << "<span class='notice'>You toggle [src]'s [togglename].</span>"
if(src.suittoggled)
src.icon_state = "[initial(icon_state)]"
src.suittoggled = 0
@@ -128,18 +128,18 @@
if(!suittoggled)
if(ishuman(src.loc))
if(H.wear_suit != src)
H << "You must be wearing [src] to engage the helmet."
H << "<span class='warning'>You must be wearing [src] to engage the helmet!</span>"
return
if(H.head)
H << "You're already wearing something on your head."
H << "<span class='warning'>You're already wearing something on your head!</span>"
return
else
H << "You engage the helmet on the hardsuit."
H << "<span class='notice'>You engage the helmet on the hardsuit.</span>"
H.equip_to_slot_if_possible(helmet,slot_head,0,0,1)
suittoggled = 1
H.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
else
H << "You disengage the helmet on the hardsuit."
H << "<span class='notice'>You disengage the helmet on the hardsuit.</span>"
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
RemoveHelmet()
+2 -2
View File
@@ -100,10 +100,10 @@
if(user == M)
user << "<span class='notice'>You attach [src] to [U].</span>"
else
user.visible_message("<span class='notice'>[user] pins \the [src] on [M]'s chest.</span>", \
user.visible_message("[user] pins \the [src] on [M]'s chest.", \
"<span class='notice'>You pin \the [src] on [M]'s chest.</span>")
else user << "<span class='warning'>Medals can only be pinned on jumpsuits.</span>"
else user << "<span class='warning'>Medals can only be pinned on jumpsuits!</span>"
else ..()
/obj/item/clothing/tie/medal/conduct
+3 -3
View File
@@ -20,7 +20,7 @@
/obj/item/weaponcrafting/reciever/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/pipe))
user << "You attach the shotgun barrel to the receiver. The pins seem loose."
user << "<span class='notice'>You attach the shotgun barrel to the receiver. The pins seem loose.</span>"
var/obj/item/weaponcrafting/ishotgunconstruction/I = new /obj/item/weaponcrafting/ishotgunconstruction
user.unEquip(src)
user.put_in_hands(I)
@@ -53,7 +53,7 @@
/obj/item/weaponcrafting/ishotgunconstruction2/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/weaponcrafting/stock))
user << "You attach the stock to the receiver-barrel assembly."
user << "<span class='notice'>You attach the stock to the receiver-barrel assembly.</span>"
var/obj/item/weaponcrafting/ishotgunconstruction3/I = new /obj/item/weaponcrafting/ishotgunconstruction3
user.unEquip(src)
user.put_in_hands(I)
@@ -78,6 +78,6 @@
user << "<span class='notice'>You tie the wrapping paper around the stock and the barrel to secure it.</span>"
qdel(src)
else
user << "<span class='warning'>You need at least five feet of wrapping paper to secure the stock.</span>"
user << "<span class='warning'>You need at least five feet of wrapping paper to secure the stock!</span>"
return
+4 -4
View File
@@ -45,8 +45,8 @@
else
return
user.visible_message("<span class='notice'>[user] puts [I] into [src].</span>", "<span class='notice'>You put [I] inside [src].</span>",\
"<span class='notice'>You hear a rustle as someone puts something into a plastic bag.</span>")
user.visible_message("[user] puts [I] into [src].", "<span class='notice'>You put [I] inside [src].</span>",\
"<span class='italics'>You hear a rustle as someone puts something into a plastic bag.</span>")
icon_state = "evidence"
@@ -68,8 +68,8 @@
/obj/item/weapon/evidencebag/attack_self(mob/user as mob)
if(contents.len)
var/obj/item/I = contents[1]
user.visible_message("<span class='notice'>[user] takes [I] out of [src].</span>", "<span class='notice'>You take [I] out of [src].</span>",\
"<span class='notice'>You hear someone rustle around in a plastic bag, and remove something.</span>")
user.visible_message("[user] takes [I] out of [src].", "<span class='notice'>You take [I] out of [src].</span>",\
"<span class='italics'>You hear someone rustle around in a plastic bag, and remove something.</span>")
overlays.Cut() //remove the overlays
user.put_in_hands(I)
w_class = 1
@@ -21,7 +21,7 @@
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag)
if(ismob(target) && target.reagents && reagents.total_volume)
user.visible_message("<span class='danger'>[user] has smothered \the [target] with \the [src]!</span>", "<span class='danger'>You smother \the [target] with \the [src]!</span>", "You hear some struggling and muffled cries of surprise")
user.visible_message("<span class='danger'>[user] has smothered \the [target] with \the [src]!</span>", "<span class='danger'>You smother \the [target] with \the [src]!</span>", "<span class='italics'>You hear some struggling and muffled cries of surprise.</span>")
src.reagents.reaction(target, TOUCH)
src.reagents.clear_reagents()
return
@@ -31,8 +31,8 @@
/obj/item/weapon/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user as mob,proximity)
if(!proximity) return
if(istype(A) && src in user)
user.visible_message("[user] starts to wipe down [A] with [src]!")
user.visible_message("[user] starts to wipe down [A] with [src]!", "<span class='notice'>You start to wipe down [A] with [src]...</span")
if(do_after(user,30))
user.visible_message("[user] finishes wiping off the [A]!")
user.visible_message("[user] finishes wiping off the [A]!", "<span class='notice'>You finish wiping off the [A].</span>")
A.clean_blood()
return
+1 -1
View File
@@ -151,7 +151,7 @@
if(!found_something)
add_log("<I># No forensic traces found #</I>", 0) // Don't display this to the holder user
if(holder)
holder << "<span class='notice'>Unable to locate any fingerprints, materials, fibers, or blood on \the [target_name]!</span>"
holder << "<span class='warning'>Unable to locate any fingerprints, materials, fibers, or blood on \the [target_name]!</span>"
else
if(holder)
holder << "<span class='notice'>You finish scanning \the [target_name].</span>"
+1 -1
View File
@@ -47,7 +47,7 @@
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
target.visible_message("<span class='notice'>[user] and [target] pop \an [src]! *pop*</span>", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='notice'>You hear a *pop*.</span>")
target.visible_message("[user] and [target] pop \an [src]! *pop*", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='italics'>You hear a pop.</span>")
var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc)
Joke.name = "[pick("awful","terrible","unfunny")] joke"
Joke.info = pick("What did one snowman say to the other?\n\n<i>'Is it me or can you smell carrots?'</i>",
+17 -27
View File
@@ -344,7 +344,8 @@
qdel(src)
/obj/effect/spacevine/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (!W || !user || !W.type) return
if (!W || !user || !W.type)
return
user.changeNext_move(CLICK_CD_MELEE)
var/override = 0
@@ -356,33 +357,22 @@
..()
return
switch(W.type)
if(/obj/item/weapon/circular_saw) qdel(src)
if(/obj/item/weapon/kitchen/utensil/knife) qdel(src)
if(/obj/item/weapon/scalpel) qdel(src)
if(/obj/item/weapon/twohanded/fireaxe) qdel(src)
if(/obj/item/weapon/hatchet) qdel(src)
if(/obj/item/weapon/melee/energy) qdel(src)
if(/obj/item/weapon/scythe)
for(var/obj/effect/spacevine/B in orange(src,1))
if(prob(80))
qdel(B)
if(istype(W, /obj/item/weapon/scythe))
for(var/obj/effect/spacevine/B in orange(src,1))
if(prob(80))
qdel(B)
qdel(src)
else if(is_sharp(W))
qdel(src)
else if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
qdel(src)
//less effective weapons
if(/obj/item/weapon/wirecutters)
if(prob(25)) qdel(src)
if(/obj/item/weapon/shard)
if(prob(25)) qdel(src)
else //weapons with subtypes
if(istype(W, /obj/item/weapon/melee/energy/sword)) qdel(src)
else if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user)) qdel(src)
else
user_unbuckle_mob(user,user)
return
else
user_unbuckle_mob(user,user)
return
//Plant-b-gone damage is handled in its entry in chemistry-reagents.dm
..()
+1 -1
View File
@@ -345,7 +345,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
/obj/item/clothing/shoes/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
/obj/item/clothing/shoes/sneakers/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
+1 -1
View File
@@ -224,7 +224,7 @@
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user)
if(M == user && !src.reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head")
user.visible_message("<span class='notice'>[user] crushes the can of [src] on \his forehead!</span>", "<span class='notice'>You crush the can of [src] on your forehead!</span>")
user.visible_message("<span class='warning'>[user] crushes the can of [src] on \his forehead!</span>", "<span class='notice'>You crush the can of [src] on your forehead.</span>")
playsound(user.loc,'sound/weapons/pierce.ogg', rand(10,50), 1)
var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(user.loc)
crushed_can.icon_state = icon_state
+4 -4
View File
@@ -69,11 +69,11 @@
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume)
user << "<span class='warning'>[target] is empty.</span>"
user << "<span class='warning'>[target] is empty!</span>"
return
if(reagents.total_volume >= reagents.maximum_volume)
user << "<span class='warning'>[src] is full.</span>"
user << "<span class='warning'>[src] is full!</span>"
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
@@ -82,10 +82,10 @@
//Something like a glass or a food item. Player probably wants to transfer TO it.
else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
if(!reagents.total_volume)
user << "<span class='warning'>[src] is empty.</span>"
user << "<span class='warning'>[src] is empty!</span>"
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "<span class='warning'>you can't add anymore to [target].</span>"
user << "<span class='warning'>you can't add anymore to [target]!</span>"
return
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You transfer [trans] units of the condiment to [target].</span>"
@@ -40,9 +40,9 @@
if(istype(I,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = I
if(I.w_class > 2)
user << "<span class='warning'>The ingredient is too big for [src].</span>"
user << "<span class='warning'>The ingredient is too big for [src]!</span>"
else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume))
user << "<span class='warning'>You can't add more ingredients to [src].</span>"
user << "<span class='warning'>You can't add more ingredients to [src]!</span>"
else
user.drop_item()
if(S.trash)
@@ -309,9 +309,9 @@
if(istype(I,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = I
if(I.w_class > 2)
user << "<span class='warning'>The ingredient is too big for [src].</span>"
user << "<span class='warning'>The ingredient is too big for [src]!</span>"
else if(contents.len >= 20)
user << "<span class='warning'>You can't add more ingredients to [src].</span>"
user << "<span class='warning'>You can't add more ingredients to [src]!</span>"
else
if(reagents.has_reagent("water", 10)) //are we starting a soup or a salad?
var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/soup(get_turf(src))
+11 -11
View File
@@ -65,7 +65,7 @@
return 0
if(wrapped)
M << "<span class='notice'>You can't eat wrapped food!</span>"
M << "<span class='warning'>You can't eat wrapped food!</span>"
return 0
else if(fullness <= 50)
M << "<span class='notice'>You hungrily [eatverb] some of \the [src] and gobble it down!</span>"
@@ -76,7 +76,7 @@
else if(fullness > 500 && fullness < 600)
M << "<span class='notice'>You unwillingly [eatverb] a bit of \the [src].</span>"
else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
M << "<span class='notice'>You cannot force any more of \the [src] to go down your throat.</span>"
M << "<span class='warning'>You cannot force any more of \the [src] to go down your throat!</span>"
return 0
else
if(!isbrain(M)) //If you're feeding it to someone else.
@@ -86,8 +86,8 @@
M.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>", \
"<span class='userdanger'>[user] attempts to feed [M] [src].</span>")
else
M.visible_message("<span class='danger'>[user] cannot force anymore of [src] down [M]'s throat!</span>", \
"<span class='userdanger'>[user] cannot force anymore of [src] down [M]'s throat!</span>")
M.visible_message("<span class='warning'>[user] cannot force anymore of [src] down [M]'s throat!</span>", \
"<span class='warning'>[user] cannot force anymore of [src] down [M]'s throat!</span>")
return 0
if(!do_mob(user, M))
@@ -97,7 +97,7 @@
"<span class='userdanger'>[user] feeds [M] to eat [src].</span>")
else
user << "<span class='notice'>[M] doesn't seem to have a mouth!</span>"
user << "<span class='warning'>[M] doesn't seem to have a mouth!</span>"
return
if(reagents) //Handle ingestion of the reagent.
@@ -142,13 +142,13 @@
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(custom_food_type && ispath(custom_food_type))
if(S.w_class > 2)
user << "<span class='warning'>[S] is too big for [src].</span>"
user << "<span class='warning'>[S] is too big for [src]!</span>"
return 0
if(!S.customfoodfilling)
user << "<span class='warning'>[src] can't be filled with [S].</span>"
user << "<span class='warning'>[src] can't be filled with [S]!</span>"
return 0
if(contents.len >= 20)
user << "<span class='warning'>You can't add more ingredients to [src].</span>"
user << "<span class='warning'>You can't add more ingredients to [src]!</span>"
return 0
var/obj/item/weapon/reagent_containers/food/snacks/customizable/C = new custom_food_type(get_turf(src))
C.initialize_custom_food(src, S, user)
@@ -175,18 +175,18 @@
!(locate(/obj/structure/optable) in src.loc) && \
!(locate(/obj/item/weapon/storage/bag/tray) in src.loc) \
)
user << "<span class='notice'>You cannot slice [src] here! You need a table or at least a tray.</span>"
user << "<span class='warning'>You cannot slice [src] here! You need a table or at least a tray.</span>"
return 1
var/slices_lost = 0
if (accuracy > 1)
user.visible_message( \
"<span class='notice'>[user] slices [src].</span>", \
"[user] slices [src].", \
"<span class='notice'>You slice [src].</span>" \
)
else
user.visible_message( \
"<span class='notice'>[user] inaccurately slices [src] with [W]!</span>", \
"[user] inaccurately slices [src] with [W]!", \
"<span class='notice'>You inaccurately slice [src] with your [W]!</span>" \
)
slices_lost = rand(1,min(1,round(slices_num/2)))
@@ -20,7 +20,7 @@
user << "<span class='notice'>You flatten [src].</span>"
qdel(src)
else
user << "<span class='notice'>You need to put [src] on a surface to roll it out!</span>"
user << "<span class='warning'>You need to put [src] on a surface to roll it out!</span>"
else
..()
@@ -82,7 +82,7 @@
user << "<span class='notice'>You flatten [src].</span>"
qdel(src)
else
user << "<span class='notice'>You need to put [src] on a surface to roll it out!</span>"
user << "<span class='warning'>You need to put [src] on a surface to roll it out!</span>"
else
..()
+14 -12
View File
@@ -98,18 +98,20 @@
w_class = 3
/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/weapon/kitchen/utensil/fork))
if(W.icon_state == "forkloaded")
user << "<span class='notice'>You already have omelette on your fork.</span>"
return
W.icon_state = "forkloaded"
user.visible_message( \
"<span class='notice'>[user] takes a piece of omelette with their fork!</span>", \
"<span class='notice'>You take a piece of omelette with your fork!</span>" \
)
reagents.remove_reagent("nutriment", 1)
if(reagents.total_volume <= 0)
qdel(src)
if(istype(W,/obj/item/weapon/kitchen/fork))
var/obj/item/weapon/kitchen/fork/F = W
if(F.forkload)
user << "<span class='warning'>You already have omelette on your fork!</span>"
else
F.icon_state = "forkloaded"
user.visible_message("[user] takes a piece of omelette with their fork!", \
"<span class='notice'>You take a piece of omelette with your fork.</span>")
var/datum/reagent/R = pick(reagents.reagent_list)
reagents.remove_reagent(R.id, 1)
F.forkload = R
if(reagents.total_volume <= 0)
qdel(src)
return
..()
@@ -124,10 +124,10 @@
if(src.operating)
return
if(!src.occupant)
visible_message("<span class='danger'>You hear a loud metallic grinding sound.</span>")
visible_message("<span class='italics'>You hear a loud metallic grinding sound.</span>")
return
use_power(1000)
visible_message("<span class='danger'>You hear a loud squelchy grinding sound.</span>")
visible_message("<span class='italics'>You hear a loud squelchy grinding sound.</span>")
src.operating = 1
update_icon()
var/sourcename = src.occupant.real_name
@@ -126,7 +126,7 @@
else
src.visible_message("<span class='info'>[user] whips up some [flavour] icecream.</span>")
else
user << "<span class='warning'>You don't have the ingredients to make this.</span>"
user << "<span class='warning'>You don't have the ingredients to make this!</span>"
/obj/machinery/icecream_vat/Topic(href, href_list)
if(..())
@@ -44,7 +44,7 @@
return 1
else
if(!user.unEquip(O))
user << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
user << "<span class='warning'>\the [O] is stuck to your hand, you cannot put it in \the [src]!</span>"
return 0
O.loc = src
beaker = O
@@ -56,7 +56,7 @@
user << "It looks as not containing any juice."
return 1
if(!user.unEquip(O))
user << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
user << "<span class='warning'>\the [O] is stuck to your hand, you cannot put it in \the [src]!</span>"
return 0
O.loc = src
src.updateUsrDialog()
@@ -59,24 +59,24 @@
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/wirecutters)) // If it's broken and they're using a screwdriver
user.visible_message( \
"<span class='notice'>[user] starts to fix part of the microwave.</span>", \
"<span class='notice'>You start to fix part of the microwave.</span>" \
"[user] starts to fix part of the microwave.", \
"<span class='notice'>You start to fix part of the microwave...</span>" \
)
if (do_after(user,20))
user.visible_message( \
"<span class='notice'>[user] fixes part of the microwave.</span>", \
"<span class='notice'>You have fixed part of the microwave.</span>" \
"[user] fixes part of the microwave.", \
"<span class='notice'>You fix part of the microwave.</span>" \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && istype(O, /obj/item/weapon/weldingtool)) // If it's broken and they're doing the wrench
user.visible_message( \
"<span class='notice'>[user] starts to fix part of the microwave.</span>", \
"<span class='notice'>You start to fix part of the microwave.</span>" \
"[user] starts to fix part of the microwave.", \
"<span class='notice'>You start to fix part of the microwave...</span>" \
)
if (do_after(user,20))
user.visible_message( \
"<span class='notice'>[user] fixes the microwave.</span>", \
"<span class='notice'>You have fixed the microwave.</span>" \
"[user] fixes the microwave.", \
"<span class='notice'>You fix the microwave.</span>" \
)
src.icon_state = "mw"
src.broken = 0 // Fix it!
@@ -84,7 +84,7 @@
src.flags = OPENCONTAINER
return 0 //to use some fuel
else
user << "<span class='danger'>It's broken!</span>"
user << "<span class='warning'>It's broken!</span>"
return 1
else if(istype(O, /obj/item/weapon/reagent_containers/spray/))
var/obj/item/weapon/reagent_containers/spray/clean_spray = O
@@ -92,8 +92,8 @@
clean_spray.reagents.remove_reagent("cleaner",clean_spray.amount_per_transfer_from_this,1)
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
user.visible_message( \
"<span class='notice'>[user] has cleaned the microwave.</span>", \
"<span class='notice'>You have cleaned the microwave.</span>" \
"[user] has cleaned the microwave.", \
"<span class='notice'>You clean the microwave.</span>" \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
@@ -102,19 +102,19 @@
src.updateUsrDialog()
return 1 // Disables the after-attack so we don't spray the floor/user.
else
user << "<span class='danger'>You need more space cleaner!<span>"
user << "<span class='warning'>You need more space cleaner!<span>"
return 1
else if(istype(O, /obj/item/weapon/soap/)) // If they're trying to clean it then let them
var/obj/item/weapon/soap/P = O
user.visible_message( \
"<span class='notice'>[user] starts to clean the microwave.</span>", \
"<span class='notice'>You start to clean the microwave.</span>" \
"[user] starts to clean the microwave.S", \
"<span class='notice'>You start to clean the microwave...</span>" \
)
if (do_after(user, P.cleanspeed))
user.visible_message( \
"<span class='notice'>[user] has cleaned the microwave.</span>", \
"<span class='notice'>You have cleaned the microwave.</span>" \
"[user] has cleaned the microwave.", \
"<span class='notice'>You clean the microwave.</span>" \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
@@ -122,7 +122,7 @@
src.flags = OPENCONTAINER
else if(src.dirty==100) // The microwave is all dirty so can't be used!
user << "<span class='danger'>It's dirty!</span>"
user << "<span class='warning'>It's dirty!</span>"
return 1
else if(istype(O, /obj/item/weapon/storage/bag/tray))
@@ -130,7 +130,7 @@
var/loaded = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/S in T.contents)
if (contents.len>=max_n_of_items)
user << "<span class='warning'>[src] is full, you cannot put more.</span>"
user << "<span class='warning'>[src] is full, you cannot put more!</span>"
return 1
T.remove_from_storage(S, src)
loaded++
@@ -141,16 +141,16 @@
else if(istype(O,/obj/item/weapon/reagent_containers/food/snacks))
if (contents.len>=max_n_of_items)
user << "<span class='warning'>[src] is full, you cannot put more.</span>"
user << "<span class='warning'>[src] is full, you cannot put more!</span>"
return 1
else
// user.unEquip(O) //This just causes problems so far as I can tell. -Pete
if(!user.drop_item())
user << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
user << "<span class='warning'>\the [O] is stuck to your hand, you cannot put it in \the [src]!</span>"
return 0
O.loc = src
user.visible_message( \
"<span class='notice'>[user] has added \the [O] to \the [src].</span>", \
"[user] has added \the [O] to \the [src].", \
"<span class='notice'>You add \the [O] to \the [src].</span>")
else
@@ -272,7 +272,7 @@
return 0
/obj/machinery/microwave/proc/start()
visible_message("<span class='notice'>The microwave turns on.</span>", "<span class='notice'>You hear a microwave.</span>")
visible_message("The microwave turns on.", "<span class='italics'>You hear a microwave humming.</span>")
operating = 1
icon_state = "mw1"
updateUsrDialog()
@@ -298,7 +298,7 @@
/obj/machinery/microwave/proc/muck_finish()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
visible_message("<span class='danger'>The microwave gets covered in muck!</span>")
visible_message("<span class='warning'>The microwave gets covered in muck!</span>")
dirty = 100 // Make it dirty so it can't be used util cleaned
icon_state = "mwbloody" // Make it look dirty too
operating = 0 // Turn it off again aferwards
@@ -313,7 +313,7 @@
s.set_up(2, 1, src)
s.start()
icon_state = "mwb" // Make it look all busted up and shit
visible_message("<span class='danger'>The microwave breaks!</span>") //Let them know they're stupid
visible_message("<span class='warning'>The microwave breaks!</span>") //Let them know they're stupid
broken = 2 // Make it broken so it can't be used util fixed
flags = null //So you can't add condiments
operating = 0 // Turn it off again aferwards
@@ -84,8 +84,8 @@
if (O.client) //grief-proof
O.loc = loc
O.visible_message("<span class='notice'>Suddenly [O] jumps out from the processor!</span>", \
"You jump out from the processor", \
"You hear chimpering")
"<span class='notice'>You jump out from the processor!</span>", \
"<span class='italics'>You hear chimpering.</span>")
return
var/obj/item/weapon/reagent_containers/glass/bucket/bucket_of_blood = new(loc)
var/datum/reagent/blood/B = new()
@@ -121,10 +121,10 @@
/obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(src.processing)
user << "<span class='danger'>The processor is in the process of processing.</span>"
user << "<span class='warning'>The processor is in the process of processing!</span>"
return 1
if(src.contents.len > 0) //TODO: several items at once? several different items?
user << "<span class='danger'>Something is already in the processing chamber.</span>"
user << "<span class='warning'>Something is already in the processing chamber!</span>"
return 1
if(default_unfasten_wrench(user, O))
return
@@ -137,7 +137,7 @@
var/datum/food_processor_process/P = select_recipe(what)
if (!P)
user << "<span class='danger'>That probably won't blend.</span>"
user << "<span class='warning'>That probably won't blend!</span>"
return 1
user.visible_message("[user] put [what] into [src].", \
"You put the [what] into [src].")
@@ -149,10 +149,10 @@
if (src.stat != 0) //NOPOWER etc
return
if(src.processing)
user << "<span class='danger'>The processor is in the process of processing.</span>"
user << "<span class='warning'>The processor is in the process of processing!</span>"
return 1
if(src.contents.len == 0)
user << "<span class='danger'>The processor is empty.</span>"
user << "<span class='warning'>The processor is empty!</span>"
return 1
for(var/O in src.contents)
var/datum/food_processor_process/P = select_recipe(O)
@@ -160,15 +160,15 @@
log_admin("DEBUG: [O] in processor havent suitable recipe. How do you put it in?") //-rastaf0
continue
src.processing = 1
user.visible_message("<span class='notice'>[user] turns on \a [src].</span>", \
"You turn on \a [src].", \
"You hear a food processor")
user.visible_message("[user] turns on \a [src].", \
"<span class='notice'>You turn on \a [src].</span>", \
"<span class='italics'>You hear a food processor.</span>")
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
use_power(500)
sleep(P.time)
P.process_food(src.loc, O)
src.processing = 0
src.visible_message("<span class='notice'>\the [src] finished processing.</span>")
src.visible_message("\the [src] finishes processing.")
/obj/machinery/processor/verb/eject()
set category = "Object"
@@ -42,12 +42,12 @@
return 0
if(contents.len >= max_n_of_items)
user << "<span class='notice'>\The [src] is full.</span>"
user << "<span class='warning'>\The [src] is full!</span>"
return 0
if(accept_check(O))
load(O)
user.visible_message("<span class='notice'>[user] has added \the [O] to \the [src].", "<span class='notice'>You add \the [O] to \the [src].")
user.visible_message("[user] has added \the [O] to \the [src].", "<span class='notice'>You add \the [O] to \the [src].</span>")
updateUsrDialog()
return 1
@@ -62,7 +62,7 @@
load(G)
loaded++
else
user << "<span class='notice'>\The [src] smartly refuses [O].</span>"
user << "<span class='warning'>\The [src] smartly refuses [O].</span>"
updateUsrDialog()
return 0
@@ -70,15 +70,15 @@
// this code follows storage items and trays only.
if(loaded)
if(contents.len >= max_n_of_items)
user.visible_message("<span class='notice'>[user] loads \the [src] with \the [O].</span>", \
user.visible_message("[user] loads \the [src] with \the [O].", \
"<span class='notice'>You fill \the [src] with \the [O].</span>")
else
user.visible_message("<span class='notice'>[user] loads \the [src] with \the [O].</span>", \
user.visible_message("[user] loads \the [src] with \the [O].", \
"<span class='notice'>You load \the [src] with \the [O].</span>")
if(O.contents.len > 0)
user << "<span class='notice'>Some items are refused.</span>"
user << "<span class='warning'>Some items are refused.</span>"
else
user << "There is nothing in [O] to put in [src]."
user << "<span class='warning'>There is nothing in [O] to put in [src]!</span>"
return 0
updateUsrDialog()
@@ -95,7 +95,7 @@
if(istype(O.loc,/mob))
var/mob/M = O.loc
if(!M.unEquip(O))
usr << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
usr << "<span class='warning'>\the [O] is stuck to your hand, you cannot put it in \the [src]!</span>"
return
else if(istype(O.loc,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = O.loc
@@ -206,7 +206,8 @@
name = "Hooch"
id = "hooch"
result = "hooch"
required_reagents = list ("sugar" = 1, "ethanol" = 2, "fuel" = 1)
required_reagents = list ("ethanol" = 2, "fuel" = 1)
required_catalysts = list("enzyme" = 1)
result_amount = 3
/datum/chemical_reaction/irish_coffee
+2 -2
View File
@@ -279,11 +279,11 @@
/mob/living/simple_animal/hostile/retaliate/clown/insane/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O,/obj/item/weapon/nullrod))
if(prob(5))
visible_message("<span class='notice'>[src] finally found the peace it deserves. You hear honks echoing off into the distance.</span>")
visible_message("[src] finally found the peace it deserves. <i>You hear honks echoing off into the distance.</i>")
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
qdel(src)
else
visible_message("<span class='userdanger'>[src] seems to be resisting the effect!</span>")
visible_message("<span class='danger'>[src] seems to be resisting the effect!</span>")
else
..()
+1 -1
View File
@@ -82,7 +82,7 @@
else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
user << "<span class='warning'>You cannot put this in [src.name]</span>"
user << "<span class='warning'>You cannot put this in [src.name]!</span>"
else
var/i = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
+4 -4
View File
@@ -204,7 +204,7 @@
qdel(src)
return
else
user << "<span class='warning'>You need five lengths of cable to make a potato battery.</span>"
user << "<span class='warning'>You need five lengths of cable to make a potato battery!</span>"
return
@@ -806,7 +806,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/proc/squish(atom/target)
new splat(src.loc)
src.visible_message("<span class='notice'>The [src.name] has been squashed.</span>","<span class='notice'>You hear a smack.</span>")
src.visible_message("The [src.name] has been squashed.","<span class='italics'>You hear a smack.</span>")
for(var/atom/A in get_turf(target))
src.reagents.reaction(A)
@@ -834,7 +834,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user as mob)
if(awakening || istype(user.loc,/turf/space))
return
user << "<span class='notice'>You begin to awaken the Killer Tomato.</span>"
user << "<span class='notice'>You begin to awaken the Killer Tomato...</span>"
awakening = 1
spawn(30)
@@ -898,7 +898,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/attack_self(var/mob/user)
squish(user)
user.drop_item()
src.visible_message("<span class='notice'>[user] squashes the [src.name].</span>","<span class='notice'>You hear a smack.</span>")
src.visible_message("[user] squashes the [src.name].","<span class='italics'>You hear a smack.</span>")
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/squish(atom/squishee)
+3 -3
View File
@@ -75,7 +75,7 @@
if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount)
ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created.
if(plank.amount > old_plank_amount)
user << "You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name]."
user << "<span class='notice'>You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].</span>"
qdel(src)
if(is_type_in_list(W,accepted))
@@ -89,7 +89,7 @@
qdel(src)
return
else
usr << "<span class ='warning'> You must dry this first.</span>"
usr << "<span class ='warning'> You must dry this first!</span>"
/obj/item/weapon/grown/log/steel
seed = /obj/item/seeds/steelmycelium
@@ -152,7 +152,7 @@
if(endurance > 0)
endurance -= rand(1, (endurance / 3) + 1)
else
usr << "All the petals have fallen off the [name] from violent whacking."
usr << "<span class='warning'>All the petals have fallen off the [name] from violent whacking!</span>"
usr.unEquip(src)
qdel(src)
+19 -19
View File
@@ -586,7 +586,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/syr = reagent_source
if(syr.mode != 1)
user << "You can't get any extract out of this plant." //That. Gives me an idea...
user << "<span class='warning'>You can't get any extract out of this plant.</span>" //That. Gives me an idea...
return
if(!reagent_source.reagents.total_volume)
@@ -650,7 +650,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(istype(O, /obj/item/seeds/))
if(!planted)
user.unEquip(O)
user << "You plant [O]."
user << "<span class='notice'>You plant [O].</span>"
dead = 0
myseed = O
planted = 1
@@ -692,11 +692,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(istype(O, /obj/item/weapon/minihoe))
if(weedlevel > 0)
user.visible_message("<span class='notice'>[user] uproots the weeds.</span>", "<span class='notice'>You remove the weeds from [src].</span>")
user.visible_message("[user] uproots the weeds.", "<span class='notice'>You remove the weeds from [src].</span>")
weedlevel = 0
update_icon()
else
user << "<span class='notice'>This plot is completely devoid of weeds. It doesn't need uprooting.</span>"
user << "<span class='warning'>This plot is completely devoid of weeds! It doesn't need uprooting.</span>"
else if(istype(O, /obj/item/weapon/storage/bag/plants))
attack_hand(user)
@@ -708,28 +708,28 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(istype(O, /obj/item/weapon/wrench) && unwrenchable)
if(anchored == 2)
user << "Unscrew the hoses first!"
user << "<span class='warning'>Unscrew the hoses first!</span>"
return
if(!anchored && !isinspace())
user.visible_message("<span class='notice'>[user] begins to wrench [src] into place.</span>", \
"<span class='notice'>You begin to wrench [src] in place.</span>")
user.visible_message("[user] begins to wrench [src] into place.", \
"<span class='notice'>You begin to wrench [src] in place...</span>")
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if (do_after(user, 20))
if(anchored)
return
anchored = 1
user.visible_message("<span class='notice'>[user] wrenches [src] into place.</span>", \
user.visible_message("[user] wrenches [src] into place.", \
"<span class='notice'>You wrench [src] in place.</span>")
else if(anchored)
user.visible_message("<span class='notice'>[user] begins to unwrench [src].</span>", \
"<span class='notice'>You begin to unwrench [src].</span>")
user.visible_message("[user] begins to unwrench [src].", \
"<span class='notice'>You begin to unwrench [src]...</span>")
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if (do_after(user, 20))
if(!anchored)
return
anchored = 0
user.visible_message("<span class='notice'>[user] unwrenches [src].</span>", \
user.visible_message("[user] unwrenches [src].", \
"<span class='notice'>You unwrench [src].</span>")
else if(istype(O, /obj/item/weapon/screwdriver) && unwrenchable) //THIS NEED TO BE DONE DIFFERENTLY, SOMEONE REFACTOR THE TRAY CODE ALREADY
@@ -737,12 +737,12 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
if(anchored == 2)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
anchored = 1
user << "You unscrew \the [src]'s hoses."
user << "<span class='notice'>You unscrew \the [src]'s hoses.</span>"
else if(anchored == 1)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
anchored = 2
user << "You screw in \the [src]'s hoses."
user << "<span class='notice'>You screw in \the [src]'s hoses.</span>"
for(var/obj/machinery/hydroponics/h in range(1,src))
spawn()
@@ -758,7 +758,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(dead)
planted = 0
dead = 0
user << "You remove the dead plant from [src]."
user << "<span class='notice'>You remove the dead plant from [src].</span>"
qdel(myseed)
update_icon()
else
@@ -824,7 +824,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
break
else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key
for(var/mob/M in player_list)
if(ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
if(istype(M, /mob/dead/observer))
var/mob/dead/observer/O = M
if(!O.can_reenter_corpse)
@@ -870,11 +870,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
harvest = 0
lastproduce = age
if(istype(myseed,/obj/item/seeds/replicapod/))
user << "You harvest from the [myseed.plantname]."
user << "<span class='notice'>You harvest from the [myseed.plantname].</span>"
else if(myseed.getYield() <= 0)
user << "<span class='warning'>You fail to harvest anything useful.</span>"
user << "<span class='warning'>You fail to harvest anything useful!</span>"
else
user << "You harvest [myseed.getYield()] items from the [myseed.plantname]."
user << "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>"
if(myseed.oneharvest)
qdel(myseed)
planted = 0
@@ -986,5 +986,5 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
/obj/machinery/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
..()
if(istype(O, /obj/item/weapon/shovel))
user << "You clear up [src]!"
user << "<span class='notice'>You clear up [src]!</span>"
qdel(src)
+3 -3
View File
@@ -71,7 +71,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
return
if(!user.drop_item()) //couldn't drop the item
user << "<span class='notice'>\The [O] is stuck to your hand, you cannot put it in the seed extractor!</span>"
user << "<span class='warning'>\The [O] is stuck to your hand, you cannot put it in the seed extractor!</span>"
return
if(O && O.loc)
@@ -86,7 +86,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
updateUsrDialog()
return
else
user << "<span class='notice'>You can't extract any seeds from \the [O.name].</span>"
user << "<span class='warning'>You can't extract any seeds from \the [O.name]!</span>"
datum/seed_pile
var/name = ""
@@ -171,7 +171,7 @@ obj/machinery/seed_extractor/proc/add(var/obj/item/seeds/O as obj)
if(istype(O.loc,/mob))
var/mob/M = O.loc
if(!M.unEquip(O))
usr << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
usr << "<span class='warning'>\the [O] is stuck to your hand, you cannot put it in \the [src]!</span>"
return
else if(istype(O.loc,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = O.loc
+3 -3
View File
@@ -107,12 +107,12 @@
mutant_color = bloodSample.data["mutant_color"]
factions = bloodSample.data["factions"]
W.reagents.clear_reagents()
user << "You inject the contents of the syringe into the seeds."
user << "<span class='notice'>You inject the contents of the syringe into the seeds.</span>"
contains_sample = 1
else
user << "The seeds reject the sample!"
user << "<span class='warning'>The seeds reject the sample!</span>"
else
user << "The seeds already contain a genetic sample."
user << "<span class='warning'>The seeds already contain a genetic sample!</span>"
..()
+4 -4
View File
@@ -81,7 +81,7 @@
name = ("bookcase ([sanitize(newname)])")
else if(istype(I, /obj/item/weapon/crowbar))
if(contents.len)
user << "<span class='notice'>You need to remove the books first.</span>"
user << "<span class='warning'>You need to remove the books first!</span>"
else
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
user << "<span class='notice'>You pry the shelf out.</span>"
@@ -191,7 +191,7 @@
if(is_blind(user))
return
if(unique)
user << "<span class='notice'>These pages don't seem to take the ink well. Looks like you can't modify it.</span>"
user << "<span class='warning'>These pages don't seem to take the ink well! Looks like you can't modify it.</span>"
return
var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
switch(choice)
@@ -250,8 +250,8 @@
scanner.computer.inventory.Add(src)
user << "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
else if(istype(I, /obj/item/weapon/kitchenknife) || istype(I, /obj/item/weapon/wirecutters))
user << "<span class='notice'>You begin to carve out [title].</span>"
else if(istype(I, /obj/item/weapon/kitchen/knife) || istype(I, /obj/item/weapon/wirecutters))
user << "<span class='notice'>You begin to carve out [title]...</span>"
if(do_after(user, 30))
user << "<span class='notice'>You carve out the pages from [title]! You didn't want to read it anyway.</span>"
var/obj/item/weapon/storage/book/B = new
@@ -20,10 +20,10 @@
if(href_list["move"])
var/obj/docking_port/mobile/M = SSshuttle.getShuttle("laborcamp")
if(!M)
usr << "<span class='notice'>Cannot locate shuttle.</span>"
usr << "<span class='warning'>Cannot locate shuttle!</span>"
return 0
var/obj/docking_port/stationary/S = M.get_docked()
if(S && S.name == "laborcamp_away")
usr << "<span class='notice'>Shuttle is already at the outpost.</span>"
usr << "<span class='warning'>Shuttle is already at the outpost!</span>"
return 0
..()
+1 -1
View File
@@ -140,7 +140,7 @@
playsound(src, 'sound/weapons/smg_empty_alarm.ogg',50,1)
warned = 1
if(!R.cell.use(drillcost))
R << "<span class='notice'>You don't have enough charge to drill.</span>"
R << "<span class='warning'>You don't have enough charge to drill!</span>"
return 0
return 1
+10 -10
View File
@@ -238,7 +238,7 @@
name = "gibtonite deposit"
desc = "An active gibtonite reserve. Run!"
stage = 1
visible_message("<span class='warning'>There was gibtonite inside! It's going to explode!</span>")
visible_message("<span class='danger'>There was gibtonite inside! It's going to explode!</span>")
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
@@ -406,7 +406,7 @@
/turf/simulated/mineral/attackby(var/obj/item/weapon/pickaxe/P as obj, mob/user as mob, params)
if (!user.IsAdvancedToolUser())
usr << "<span class='danger'>You don't have the dexterity to do this!</span>"
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
return
if (istype(P, /obj/item/weapon/pickaxe))
@@ -421,13 +421,13 @@
if(!RD.use_robot_power(user))
return
else if(!D.bcell.use(D.drillcost))
user << "<span class='notice'>Your [D.name] doesn't have enough charge.</span>"
user << "<span class='warning'>Your [D.name] doesn't have enough charge!</span>"
return
if(last_act+P.digspeed > world.time)//prevents message spam
return
last_act = world.time
user << "<span class='danger'>You start picking.</span>"
user << "<span class='notice'>You start picking...</span>"
P.playDigSound()
if(do_after(user,P.digspeed))
@@ -544,15 +544,15 @@
return
if (dug)
user << "<span class='danger'>This area has already been dug.</span>"
user << "<span class='warning'>This area has already been dug!</span>"
return
user << "<span class='danger'>You start digging.</span>"
user << "<span class='notice'>You start digging...</span>"
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(20)
if ((user.loc == T && user.get_active_hand() == W))
user << "<span class='notice'>You dug a hole.</span>"
user << "<span class='notice'>You dig a hole.</span>"
gets_dug()
return
@@ -563,15 +563,15 @@
return
if (dug)
user << "<span class='danger'>This area has already been dug.</span>"
user << "<span class='warning'>This area has already been dug!</span>"
return
user << "<span class='danger'>You start digging.</span>"
user << "<span class='notice'>You start digging...</span>"
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(P.digspeed)
if ((user.loc == T && user.get_active_hand() == W))
user << "<span class='notice'>You dug a hole.</span>"
user << "<span class='notice'>You dig a hole.</span>"
gets_dug()
return
+18 -8
View File
@@ -68,7 +68,7 @@
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = I
if(W.welding)
user << "<span class='info'>You can't hit a high enough temperature to smelt [src] properly.</span>"
user << "<span class='warning'>You can't hit a high enough temperature to smelt [src] properly!</span>"
else
..()
@@ -123,7 +123,7 @@
/obj/item/weapon/twohanded/required/gibtonite/attackby(obj/item/I, mob/user, params)
if(!wires && istype(I, /obj/item/device/assembly/igniter))
user.visible_message("<span class='warning'>[user] attaches [I] to [src]!</span>")
user.visible_message("[user] attaches [I] to [src].", "<span class='notice'>You attach [I] to [src].</span>")
wires = new(src)
attacher = key_name(user)
qdel(I)
@@ -141,7 +141,7 @@
if(primed)
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) || istype(I, /obj/item/device/multitool))
primed = 0
user.visible_message("<span class='notice'>The chain reaction was stopped! ...The ore's quality went down.</span>")
user.visible_message("The chain reaction was stopped! ...The ore's quality looks diminished.", "<span class='notice'>You stopped the chain reaction. ...The ore's quality looks diminished.</span>")
icon_state = "Gibtonite ore"
quality = 1
return
@@ -185,7 +185,7 @@
else if(triggered_by == 2)
log_game("A signal has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z]). Igniter attacher: [attacher].")
else
user.visible_message("<span class='warning'>[user] strikes \the [src], causing a chain reaction!</span>")
user.visible_message("<span class='warning'>[user] strikes \the [src], causing a chain reaction!</span>", "<span class='danger'>You strike \the [src], causing a chain reaction.</span>")
log_game("[key_name(user)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
spawn(det_time)
if(primed)
@@ -280,12 +280,22 @@
sideslist = list("heads")
value = 20
/obj/item/weapon/coin/antagtoken
name = "antag token"
icon_state = "coin_valid_valid"
cmineral = "valid"
desc = "A novelty coin that helps the heart know what hard evidence cannot prove."
sideslist = list("valid", "salad")
value = 20
/obj/item/weapon/coin/antagtoken/New()
return
/obj/item/weapon/coin/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W
if(string_attached)
user << "<span class='notice'>There already is a string attached to this coin.</span>"
user << "<span class='warning'>There already is a string attached to this coin!</span>"
return
if (CC.use(1))
@@ -293,7 +303,7 @@
string_attached = 1
user << "<span class='notice'>You attach a string to the coin.</span>"
else
user << "<span class='warning'>You need one length of cable to attach a string to the coin.</span>"
user << "<span class='warning'>You need one length of cable to attach a string to the coin!</span>"
return
else if(istype(W,/obj/item/weapon/wirecutters))
@@ -317,6 +327,6 @@
icon_state = "coin_[cmineral]_[coinflip]"
playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1)
if(do_after(user, 15))
user.visible_message("<span class='notice'>[user] has flipped [src]. It lands on [coinflip].</span>", \
user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \
"<span class='notice'>You flip [src]. It lands on [coinflip].</span>", \
"<span class='notice'>You hear the clattering of loose change.</span>")
"<span class='italics'>You hear the clattering of loose change.</span>")
+2 -2
View File
@@ -203,7 +203,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(following && following == target)
return
following = target
src << "<span class='notice'>Now following [target]</span>"
src << "<span class='notice'>Now following [target].</span>"
spawn(0)
var/turf/pos = get_turf(src)
while(loc == pos && target && following == target && client)
@@ -336,7 +336,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/pointed(atom/A as mob|obj|turf in view())
if(!..())
return 0
usr.visible_message("<span class='deadsay'><b>[src]</b> points to [A]</span>")
usr.visible_message("<span class='deadsay'><b>[src]</b> points to [A].</span>")
return 1
/mob/dead/observer/verb/view_manfiest()
@@ -129,9 +129,9 @@ Doesn't work on other aliens/AI.*/
M.adjustToxLoss(amount)
user.adjustToxLoss(-amount)
M << "<span class='noticealien'>[user] has transfered [amount] plasma to you.</span>"
user << {"<span class='noticealien'>You have trasferred [amount] plasma to [M]</span>"}
user << {"<span class='noticealien'>You trasfer [amount] plasma to [M]</span>"}
else
user << "<span class='noticealien'>You need to be closer.</span>"
user << "<span class='noticealien'>You need to be closer!</span>"
return
/obj/effect/proc_holder/alien/acid
@@ -255,10 +255,9 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/regurgitate/fire(var/mob/living/carbon/alien/user)
if(user.stomach_contents.len)
for(var/atom/movable/A in user.stomach_contents)
if(A in user.stomach_contents)
user.stomach_contents.Remove(A)
A.loc = user.loc
//Paralyse(10)
user.stomach_contents.Remove(A)
A.loc = user.loc
A.update_pipe_vision()
user.visible_message("<span class='alertealien'>[user] hurls out the contents of their stomach!</span>")
return
@@ -16,7 +16,7 @@
else
user.layer = MOB_LAYER
user.visible_message("[user.] slowly peaks up from the ground...", \
"<span class='noticealien'>You have stopped hiding.</span>")
"<span class='noticealien'>You stop hiding.</span>")
return 1
+6 -6
View File
@@ -22,12 +22,12 @@
if(istype(O,/obj/item/organ/brain)) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/newbrain = O
if(brain)
user << "<span class='danger'>There's already a brain in the MMI!</span>"
user << "<span class='warning'>There's already a brain in the MMI!</span>"
return
if(!newbrain.brainmob)
user << "<span class='danger'>You aren't sure where this brain came from, but you're pretty sure it's a useless brain.</span>"
user << "<span class='warning'>You aren't sure where this brain came from, but you're pretty sure it's a useless brain!</span>"
return
visible_message("<span class='notice'>[user] sticks \a [newbrain] into \the [src]</span>")
visible_message("[user] sticks \a [newbrain] into \the [src].")
brainmob = newbrain.brainmob
newbrain.brainmob = null
@@ -67,9 +67,9 @@
/obj/item/device/mmi/attack_self(mob/user as mob)
if(!brain)
user << "<span class='danger'>You upend the MMI, but there's nothing in it.</span>"
user << "<span class='warning'>You upend the MMI, but there's nothing in it!</span>"
else if(locked)
user << "<span class='danger'>You upend the MMI, but the brain is clamped into place.</span>"
user << "<span class='warning'>You upend the MMI, but the brain is clamped into place!</span>"
else
user << "<span class='notice'>You upend the MMI, spilling the brain onto the floor.</span>"
@@ -123,7 +123,7 @@
set popup_menu = 0
if(brainmob.stat)
brainmob << "Can't do that while incapacitated or dead."
brainmob << "<span class='warning'>Can't do that while incapacitated or dead!</span>"
radio.listening = radio.listening==1 ? 0 : 1
brainmob << "<span class='notice'>Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.</span>"
@@ -52,7 +52,7 @@
var/mob/living/carbon/human/H = M
if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES)))
user << "<span class='notice'>You're going to need to remove their head cover first.</span>"
user << "<span class='warning'>You're going to need to remove their head cover first!</span>"
return
//since these people will be dead M != usr
@@ -63,15 +63,15 @@
if(O == (user || M))
continue
if(M == user)
O << "<span class='notice'>[user] inserts [src] into \his head!</span>"
O << "[user] inserts [src] into \his head!"
else
O << "<span class='notice'>[M] has [src] inserted into \his head by [user].</span>"
O << "[M] has [src] inserted into \his head by [user]."
if(M != user)
M << "<span class='notice'>[user] inserts [src] into your head!</span>"
user << "<span class='notice'>You insert [src] into [M]'s head!</span>"
M << "<span class='notice'>[user] inserts [src] into your head.</span>"
user << "<span class='notice'>You insert [src] into [M]'s head.</span>"
else
user << "<span class='notice'>You insert [src] into your head!</span>" //LOL
user << "<span class='notice'>You insert [src] into your head.</span>" //LOL
//this might actually be outdated since barring badminnery, a debrain'd body will have any client sucked out to the brain's internal mob. Leaving it anyway to be safe. --NEO
if(M.key)
@@ -1,8 +1,8 @@
/mob/living/carbon/brain/death(gibbed)
if(stat == DEAD) return
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
container.visible_message("<span class='danger'>[src]'s MMI flatlines!</span>", \
"<span class='danger'>You hear something flatline.</span>")
container.visible_message("<span class='warning'>[src]'s MMI flatlines!</span>", \
"<span class='italics'>You hear something flatline.</span>")
if(istype(src,/obj/item/organ/brain/alien))
container.icon_state = "mmi_alien_dead"
else
+8 -8
View File
@@ -38,9 +38,9 @@
/mob/living/carbon/relaymove(var/mob/user, direction)
if(user in src.stomach_contents)
if(prob(40))
audible_message("<span class='danger'>You hear something rumbling inside [src]'s stomach...</span>", \
"<span class='danger'>You hear something rumbling.</span>", 4,\
"<span class='danger'>Something is rumbling inside your stomach!</span>")
audible_message("<span class='warning'>You hear something rumbling inside [src]'s stomach...</span>", \
"<span class='warning'>You hear something rumbling.</span>", 4,\
"<span class='userdanger'>Something is rumbling inside your stomach!</span>")
var/obj/item/I = user.get_active_hand()
if(I && I.force)
var/d = rand(round(I.force / 4), I.force)
@@ -84,7 +84,7 @@
src.visible_message(
"<span class='danger'>[src] was shocked by \the [source]!</span>", \
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
"<span class='danger'>You hear a heavy electrical crack.</span>" \
"<span class='italics'>You hear a heavy electrical crack.</span>" \
)
if(prob(25) && heart_attack)
heart_attack = 0
@@ -170,7 +170,7 @@
eye_stat += rand(2, 4)
else
src << "Your eyes itch and burn severely!</span>"
src << "<span class='warning'>Your eyes itch and burn severely!</span>"
eye_stat += rand(12, 16)
if(eye_stat > 10)
@@ -406,7 +406,7 @@ var/const/GALOSHES_DONT_HELP = 8
changeNext_move(CLICK_CD_BREAKOUT)
last_special = world.time + CLICK_CD_BREAKOUT
visible_message("<span class='warning'>[src] attempts to unbuckle themself!</span>", \
"<span class='notice'>You attempt to unbuckle yourself. (This will take around one minute and you need to stay still.)</span>")
"<span class='notice'>You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.)</span>")
if(do_after(src, 600, needhand = 0))
if(!buckled)
return
@@ -449,7 +449,7 @@ var/const/GALOSHES_DONT_HELP = 8
var/displaytime = breakouttime / 600
if(!cuff_break)
visible_message("<span class='warning'>[src] attempts to remove [I]!</span>")
src << "<span class='notice'>You attempt to remove [I]. (This will take around [displaytime] minutes and you need to stand still.)</span>"
src << "<span class='notice'>You attempt to remove [I]... (This will take around [displaytime] minutes and you need to stand still.)</span>"
if(do_after(src, breakouttime, 10, 0))
if(I.loc != src || buckled)
return
@@ -474,7 +474,7 @@ var/const/GALOSHES_DONT_HELP = 8
else
breakouttime = 50
visible_message("<span class='warning'>[src] is trying to break [I]!</span>")
src << "<span class='notice'>You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)</span>"
src << "<span class='notice'>You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)</span>"
if(do_after(src, breakouttime, needhand = 0))
if(!I.loc || buckled)
return
+10 -10
View File
@@ -282,20 +282,20 @@
if(!I || !L || I.loc != src) //no item, no limb, or item is not in limb (the person atleast) anymore
return
var/time_taken = I.embedded_unsafe_removal_time*I.w_class
usr.visible_message("<span class='notice'>[usr] attempts to remove [I] from their [L.getDisplayName()]!</span>","<span class='notice'>You attempt to remove [I] from your [L.getDisplayName()], it will take [time_taken/10] seconds.</span>")
usr.visible_message("<span class='warning'>[usr] attempts to remove [I] from their [L.getDisplayName()].</span>","<span class='notice'>You attempt to remove [I] from your [L.getDisplayName()]... (It will take [time_taken/10] seconds.)</span>")
if(do_after(usr, time_taken, needhand = 1))
L.embedded_objects -= I
L.take_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus.
I.loc = get_turf(src)
usr.put_in_hands(I)
usr.emote("scream")
usr.visible_message("<span class='danger'>[usr] successfully rips [I] out of their [L.getDisplayName()]!</span>","<span class='userdanger'>You successfully remove [I] from your [L.getDisplayName()]!</span>")
usr.visible_message("[usr] successfully rips [I] out of their [L.getDisplayName()]!","<span class='notice'>You successfully remove [I] from your [L.getDisplayName()].</span>")
return
if(href_list["item"])
var/slot = text2num(href_list["item"])
if(slot in check_obscured_slots())
usr << "<span class='warning'>You can't reach that. Something is covering it.</span>"
usr << "<span class='warning'>You can't reach that! Something is covering it.</span>"
return
if(href_list["pockets"])
@@ -309,7 +309,7 @@
var/delay_denominator = 1
if(pocket_item && !(pocket_item.flags&ABSTRACT))
if(pocket_item.flags & NODROP)
usr << "<span class='notice'>You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!</span>"
usr << "<span class='warning'>You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!</span>"
usr << "<span class='notice'>You try to empty [src]'s [pocket_side] pocket.</span>"
else if(place_item && place_item.mob_can_equip(src, pocket_id, 1) && !(place_item.flags&ABSTRACT))
usr << "<span class='notice'>You try to place [place_item] into [src]'s [pocket_side] pocket.</span>"
@@ -678,7 +678,7 @@
if(health >= 0)
if(src == M)
visible_message( \
"<span class='notice'>[src] examines \himself.", \
"[src] examines \himself.", \
"<span class='notice'>You check yourself for injuries.</span>")
for(var/obj/item/organ/limb/org in organs)
@@ -734,16 +734,16 @@
src << "<span class='warning'>[C.name] is dead!</span>"
return
if(is_mouth_covered())
src << "<span class='notice'>Remove your mask!</span>"
src << "<span class='warning'>Remove your mask first!</span>"
return 0
if(C.is_mouth_covered())
src << "<span class='notice'>Remove their mask!</span>"
src << "<span class='warning'>Remove their mask first!</span>"
return 0
if(C.cpr_time < world.time + 30)
add_logs(src, C, "CPRed")
visible_message("<span class='notice'>[src] is trying to perform CPR on [C.name]!</span>", \
"<span class='notice'>You try to perform CPR on [C.name]. Hold still!</span>")
"<span class='notice'>You try to perform CPR on [C.name]... Hold still!</span>")
if(!do_mob(src, C))
src << "<span class='warning'>You fail to perform CPR on [C]!</span>"
return 0
@@ -753,8 +753,8 @@
var/suff = min(C.getOxyLoss(), 7)
C.adjustOxyLoss(-suff)
C.updatehealth()
visible_message("<span class='notice'>[src] performs CPR on [C.name]!</span>")
C << "<span class='unconscious'>You feel a breath of fresh air enter your lungs. It feels good.</span>"
src.visible_message("[src] performs CPR on [C.name]!", "<span class='notice'>You perform CPR on [C.name].</span>")
C << "<span class='unconscious'>You feel a breath of fresh air enter your lungs... It feels good...</span>"
/mob/living/carbon/human/generateStaticOverlay()
@@ -146,7 +146,7 @@ emp_act
else
return 0
var/armor = run_armor_check(affecting, "melee", "<span class='warning'>Your armor has protected your [hit_area].</span>", "<span class='warning'>Your armor has softened a hit to your [hit_area].</span>")
var/armor = run_armor_check(affecting, "melee", "<span class='notice'>Your armor has protected your [hit_area].</span>", "<span class='notice'>Your armor has softened a hit to your [hit_area].</span>")
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)
@@ -220,7 +220,7 @@ emp_act
for(var/obj/item/organ/limb/L in src.organs)
if(L.status == ORGAN_ROBOTIC)
if(!informed)
src << "<span class='danger'>You feel a sharp pain as your robotic limbs overload.</span>"
src << "<span class='userdanger'>You feel a sharp pain as your robotic limbs overload.</span>"
informed = 1
switch(severity)
if(1)
@@ -250,7 +250,7 @@ emp_act
update_inv_wear_mask()
update_inv_head()
else
src << "<span class='warning'>Your [head_clothes.name] protects your head and face from the acid!</span>"
src << "<span class='notice'>Your [head_clothes.name] protects your head and face from the acid!</span>"
else
. = get_organ("head")
if(.)
@@ -270,7 +270,7 @@ emp_act
update_inv_w_uniform()
update_inv_wear_suit()
else
src << "<span class='warning'>Your [chest_clothes.name] protects your body from the acid!</span>"
src << "<span class='notice'>Your [chest_clothes.name] protects your body from the acid!</span>"
else
. = get_organ("chest")
if(.)
@@ -300,7 +300,7 @@ emp_act
update_inv_w_uniform()
update_inv_wear_suit()
else
src << "<span class='warning'>Your [arm_clothes.name] protects your arms and hands from the acid!</span>"
src << "<span class='notice'>Your [arm_clothes.name] protects your arms and hands from the acid!</span>"
else
. = get_organ("r_arm")
if(.)
@@ -325,7 +325,7 @@ emp_act
update_inv_w_uniform()
update_inv_wear_suit()
else
src << "<span class='warning'>Your [leg_clothes.name] protects your legs and feet from the acid!</span>"
src << "<span class='notice'>Your [leg_clothes.name] protects your legs and feet from the acid!</span>"
else
. = get_organ("r_leg")
if(.)
@@ -46,7 +46,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
src << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
src << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if( !(I.slot_flags & SLOT_BELT) )
return
@@ -80,7 +80,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
src << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
src << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if( !(I.slot_flags & SLOT_ID) )
return 0
@@ -92,7 +92,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
src << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
src << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return
@@ -105,7 +105,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
src << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
src << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return 0
@@ -119,15 +119,15 @@
return 0
if(!wear_suit)
if(!disable_warning)
src << "<span class='danger'>You need a suit before you can attach this [I.name].</span>"
src << "<span class='warning'>You need a suit before you can attach this [I.name]!</span>"
return 0
if(!wear_suit.allowed)
if(!disable_warning)
usr << "You somehow have a suit with no defined allowed items for suit storage, stop that." //should be src?
usr << "<span class='warning'>You somehow have a suit with no defined allowed items for suit storage, stop that!</span>" //should be src?
return 0
if(I.w_class > 4)
if(!disable_warning)
usr << "The [I.name] is too big to attach." //should be src?
usr << "<span class='warning'>The [I.name] is too big to attach!</span>" //should be src?
return 0
if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/weapon/pen) || is_type_in_list(I, wear_suit.allowed) ) //ugly and un-polymorphic.
return 1
@@ -163,7 +163,7 @@
var/obj/item/I = H.get_active_hand()
var/obj/item/weapon/storage/S = H.get_inactive_hand()
if(!I)
H << "<span class='notice'>You are not holding anything to equip.</span>"
H << "<span class='warning'>You are not holding anything to equip!</span>"
return
if(H.equip_to_appropriate_slot(I))
if(hand)
@@ -183,7 +183,7 @@
if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1))
S.handle_item_insertion(I)
else
H << "<span class='danger'>You are unable to equip that.</span>"
H << "<span class='warning'>You are unable to equip that!</span>"
/mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1)
@@ -310,7 +310,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
H << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
H << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if( !(I.slot_flags & SLOT_BELT) )
return
@@ -344,7 +344,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
H << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
H << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if( !(I.slot_flags & SLOT_ID) )
return 0
@@ -356,7 +356,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
H << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
H << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return
@@ -369,7 +369,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
H << "<span class='danger'>You need a jumpsuit before you can attach this [I.name].</span>"
H << "<span class='warning'>You need a jumpsuit before you can attach this [I.name]!</span>"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return 0
@@ -383,7 +383,7 @@
return 0
if(!H.wear_suit)
if(!disable_warning)
H << "<span class='danger'>You need a suit before you can attach this [I.name].</span>"
H << "<span class='warning'>You need a suit before you can attach this [I.name]!</span>"
return 0
if(!H.wear_suit.allowed)
if(!disable_warning)
@@ -849,7 +849,7 @@
else
return 0
var/armor = H.run_armor_check(affecting, "melee", "<span class='warning'>Your armor has protected your [hit_area].</span>", "<span class='warning'>Your armor has softened a hit to your [hit_area].</span>")
var/armor = H.run_armor_check(affecting, "melee", "<span class='notice'>Your armor has protected your [hit_area].</span>", "<span class='notice'>Your armor has softened a hit to your [hit_area].</span>")
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)
@@ -72,7 +72,7 @@
if(prob(15))
H.irradiate(rand(30,80))
H.Weaken(5)
H.visible_message("<span class='danger'>[H] writhes in pain as \his vacuoles boil.</span>", "<span class='userdanger'>[H] writhes in pain as \his vacuoles boil.</span>", "<span class='danger'>You hear the crunching of leaves.</span>")
H.visible_message("<span class='warning'>[H] writhes in pain as \his vacuoles boil.</span>", "<span class='userdanger'>You writhe in pain as your vacuoles boil!</span>", "<span class='italics'>You hear the crunching of leaves.</span>")
if(prob(80))
randmutb(H)
domutcheck(H,null)
@@ -81,7 +81,7 @@
domutcheck(H,null)
else
H.adjustFireLoss(rand(5,15))
H.show_message("<span class='danger'>The radiation beam singes you!</span>")
H.show_message("<span class='userdanger'>The radiation beam singes you!</span>")
if(/obj/item/projectile/energy/florayield)
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
return
@@ -232,7 +232,7 @@
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
name = "Golem"
id = "golem"
specflags = list(NOBREATH,HEATRES,COLDRES,NOGUNS,NOBLOOD,RADIMMUNE)
specflags = list(NOBREATH,HEATRES,COLDRES,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
speedmod = 3
armor = 55
punchmod = 5
@@ -281,7 +281,7 @@
say_mod = "rattles"
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
/*
ZOMBIES
*/
@@ -325,7 +325,7 @@
say_mod = "gibbers"
sexes = 0
invis_sight = SEE_INVISIBLE_LEVEL_ONE
specflags = list(NOBLOOD,NOBREATH)
specflags = list(NOBLOOD,NOBREATH,VIRUSIMMUNE)
var/scientist = 0 // vars to not pollute spieces list with castes
var/agent = 0
var/team = 1
+2 -2
View File
@@ -694,7 +694,7 @@ Sorry Giacom. Please don't be mad :(
// Override if a certain type of mob should be behave differently when stripping items (can't, for example)
/mob/living/stripPanelUnequip(obj/item/what, mob/who, where)
if(what.flags & NODROP)
src << "<span class='notice'>You can't remove \the [what.name], it appears to be stuck!</span>"
src << "<span class='warning'>You can't remove \the [what.name], it appears to be stuck!</span>"
return
who.visible_message("<span class='danger'>[src] tries to remove [who]'s [what.name].</span>", \
"<span class='userdanger'>[src] tries to remove [who]'s [what.name].</span>")
@@ -709,7 +709,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/stripPanelEquip(obj/item/what, mob/who, where)
what = src.get_active_hand()
if(what && (what.flags & NODROP))
src << "<span class='notice'>You can't put \the [what.name] on [who], it's stuck to your hand!</span>"
src << "<span class='warning'>You can't put \the [what.name] on [who], it's stuck to your hand!</span>"
return
if(what && what.mob_can_equip(who, where, 1))
visible_message("<span class='notice'>[src] tries to put [what] on [who].</span>")
+1 -1
View File
@@ -168,7 +168,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(user, src)
if(buckled)
user << "<span class='notice'>You cannot grab [src], \he is buckled in!</span>"
user << "<span class='warning'>You cannot grab [src], \he is buckled in!</span>"
if(!G) //the grab will delete itself in New if src is anchored
return 0
user.put_in_active_hand(G)
+4 -1
View File
@@ -42,4 +42,7 @@
var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
var/list/image/staticOverlays = list()
var/has_limbs = 0 //does the mob have distinct limbs?(arms,legs, chest,head)
var/list/datum/action/actions = list()
var/list/datum/action/actions = list()
var/list/pipes_shown = list()
var/last_played_vent
+4
View File
@@ -10,7 +10,11 @@
if("sandbox")
CanBuild()
//Vents
if(ventcrawler)
src << "<span class='notice'>You can ventcrawl! Use alt+click on vents to quickly travel about the station.</span>"
//Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways.
update_pipe_vision()
update_interface()
return .
+1 -11
View File
@@ -63,17 +63,7 @@ var/list/ai_list = list()
var/apc_override = 0 //hack for letting the AI use its APC even when visionless
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
var/list/possibleNames = ai_names
var/pickedName = null
while(!pickedName)
pickedName = pick(ai_names)
for (var/mob/living/silicon/ai/A in mob_list)
if (A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop
possibleNames -= pickedName
pickedName = null
real_name = pickedName
rename_self("ai", 1)
name = real_name
anchored = 1
canmove = 0
@@ -22,17 +22,9 @@
// Add an AI eye to the chunk, then update if changed.
/datum/camerachunk/proc/add(mob/camera/aiEye/eye)
if(istype(eye,/mob/camera/aiEye/remote))
var/mob/camera/aiEye/remote/cameye = eye
if(!cameye.user)
return
if(cameye.user.client)
cameye.user.client.images += obscured
else:
if(!eye.ai)
return
if(eye.ai.client)
eye.ai.client.images += obscured
var/client/client = eye.GetViewerClient()
if(client)
client.images += obscured
eye.visibleCameraChunks += src
visible++
seenby += eye
@@ -42,18 +34,9 @@
// Remove an AI eye from the chunk, then update if changed.
/datum/camerachunk/proc/remove(mob/camera/aiEye/eye)
if(istype(eye,/mob/camera/aiEye/remote))
var/mob/camera/aiEye/remote/cameye = eye
if(!cameye.user)
return
if(cameye.user.client)
cameye.user.client.images -= obscured
else
if(!eye.ai)
return
if(eye.ai.client)
eye.ai.client.images -= obscured
var/client/client = eye.GetViewerClient()
if(client)
client.images -= obscured
eye.visibleCameraChunks -= src
seenby -= eye
if(visible > 0)
@@ -123,15 +106,9 @@
var/mob/camera/aiEye/m = eye
if(!m)
continue
if(istype(m,/mob/camera/aiEye/remote))
var/mob/camera/aiEye/remote/cam = eye
if(cam.user)
cam.user.client.images -= t.obscured
else
if(!m.ai)
continue
if(m.ai.client)
m.ai.client.images -= t.obscured
var/client/client = m.GetViewerClient()
if(client)
client.images -= t.obscured
for(var/turf in visRemoved)
var/turf/t = turf
@@ -145,15 +122,9 @@
if(!m)
seenby -= m
continue
if(istype(m,/mob/camera/aiEye/remote))
var/mob/camera/aiEye/remote/cam = eye
if(cam.user)
cam.user.client.images += t.obscured
else
if(!m.ai)
continue
if(m.ai.client)
m.ai.client.images += t.obscured
var/client/client = m.GetViewerClient()
if(client)
client.images += t.obscured
changed = 0
@@ -31,6 +31,11 @@
/mob/camera/aiEye/Move()
return 0
/mob/camera/aiEye/proc/GetViewerClient()
if(ai)
return ai.client
return null
// AI MOVEMENT
@@ -120,3 +125,6 @@
acceleration = !acceleration
usr << "Camera acceleration has been toggled [acceleration ? "on" : "off"]."
+1 -1
View File
@@ -4,7 +4,7 @@
if(src.cable)
if(get_dist(src, src.cable) > 1)
var/turf/T = get_turf(src.loc)
T.visible_message("<span class='warning'>[src.cable] rapidly retracts back into its spool.</span>", "<span class='danger'>You hear a click and the sound of wire spooling rapidly.</span>")
T.visible_message("<span class='warning'>[src.cable] rapidly retracts back into its spool.</span>", "<span class='italics'>You hear a click and the sound of wire spooling rapidly.</span>")
qdel(src.cable)
cable = null
if(silence_time)
+1 -1
View File
@@ -108,7 +108,7 @@
// 33% chance of no additional effect
if(prob(20))
visible_message("<span class='danger'>A shower of sparks spray from [src]'s inner workings.</span>", 3, "<span class='danger'>You hear and smell the ozone hiss of electrical sparks being expelled violently.</span>", 2)
visible_message("<span class='warning'>A shower of sparks spray from [src]'s inner workings.</span>", 3, "<span class='italics'>You hear and smell the ozone hiss of electrical sparks being expelled violently.</span>", 2)
return src.death(0)
silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes
@@ -264,7 +264,7 @@
var/turf/T = get_turf(src.loc)
src.cable = new /obj/item/weapon/pai_cable(T)
for (var/mob/M in viewers(T))
M.show_message("<span class='danger'>A port on [src] opens to reveal [src.cable], which promptly falls to the floor.</span>", 3, "<span class='danger'>You hear the soft click of something light and hard falling to the ground.</span>", 2)
M.show_message("<span class='warning'>A port on [src] opens to reveal [src.cable], which promptly falls to the floor.</span>", 3, "<span class='italics'>You hear the soft click of something light and hard falling to the ground.</span>", 2)
//src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
src.paiInterface() // So we'll just call the update directly rather than doing some default checks
return
@@ -74,7 +74,7 @@
if(istype(module_state_3,/obj/item/borg/sight))
sight_mode |= module_state_3:sight_mode
else
src << "<span class='notice'>You need to disable a module first!</span>"
src << "<span class='warning'>You need to disable a module first!</span>"
/mob/living/silicon/robot/proc/uneq_active()
uneq_module(module_active)
+40 -39
View File
@@ -400,19 +400,19 @@
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/weapon/weldingtool/WT = W
if (src == user)
user << "<span class='warning'>You lack the reach to be able to repair yourself.</span>"
user << "<span class='warning'>You lack the reach to be able to repair yourself!</span>"
return 1
if (src.health >= src.maxHealth)
user << "<span class='warning'>[src] is already in good condition.</span>"
user << "<span class='warning'>[src] is already in good condition!</span>"
return 1
if (WT.remove_fuel(0, user))
adjustBruteLoss(-30)
updatehealth()
add_fingerprint(user)
visible_message("<span class='notice'>[user] has fixed some of the dents on [src].</span>")
visible_message("[user] has fixed some of the dents on [src].")
return 0
else
user << "<span class='warning'>The welder must be on for this task.</span>"
user << "<span class='warning'>The welder must be on for this task!</span>"
return 1
else if(istype(W, /obj/item/stack/cable_coil) && wiresexposed)
@@ -420,33 +420,33 @@
if (coil.use(1))
adjustFireLoss(-30)
updatehealth()
visible_message("<span class='notice'>[user] has fixed some of the burnt wires on [src].</span>")
user.visible_message("[user] has fixed some of the burnt wires on [src].", "<span class='notice'>You fix some of the burnt wires on [src].</span>")
else
user << "<span class='warning'>You need one length of cable to repair [src].</span>"
user << "<span class='warning'>You need one length of cable to repair [src]!</span>"
else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover
if(opened)
user << "You close the cover."
user << "<span class='notice'>You close the cover.</span>"
opened = 0
update_icons()
else
if(locked)
user << "The cover is locked and cannot be opened."
user << "<span class='warning'>The cover is locked and cannot be opened!</span>"
else
user << "You open the cover."
user << "<span class='notice'>You open the cover.</span>"
opened = 1
update_icons()
else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside
if(wiresexposed)
user << "Close the cover first."
user << "<span class='warning'>Close the cover first!</span>"
else if(cell)
user << "There is a power cell already installed."
user << "<span class='warning'>There is a power cell already installed!</span>"
else
user.drop_item()
W.loc = src
cell = W
user << "You insert the power cell."
user << "<span class='notice'>You insert the power cell.</span>"
// chargecount = 0
update_icons()
@@ -454,7 +454,7 @@
if (wiresexposed)
wires.Interact(user)
else
user << "You can't reach the wiring."
user << "<span class='warning'>You can't reach the wiring!</span>"
else if(istype(W, /obj/item/weapon/screwdriver) && opened && !cell) // haxing
wiresexposed = !wiresexposed
@@ -465,7 +465,7 @@
if(radio)
radio.attackby(W,user)//Push it to the radio to let it handle everything
else
user << "Unable to locate a radio."
user << "<span class='warning'>Unable to locate a radio!</span>"
update_icons()
else if(istype(W, /obj/item/weapon/wrench) && opened && !cell) //Deconstruction. The flashes break from the fall, to prevent this from being a ghetto reset module.
@@ -475,20 +475,21 @@
return
else
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
user << "<span class='notice'>You start to unfasten [src]'s securing bolts...</span>"
if(do_after(user, 50) && !cell)
user.visible_message("<span class='danger'>[user] deconstructs [src]!</span>", "<span class='notice'>You unfasten the securing bolts, and [src] falls to pieces!</span>")
user.visible_message("[user] deconstructs [src]!", "<span class='notice'>You unfasten the securing bolts, and [src] falls to pieces!</span>")
deconstruct()
else if(istype(W, /obj/item/weapon/aiModule))
var/obj/item/weapon/aiModule/MOD = W
if(!opened)
user << "You need access to the robot's insides to do that."
user << "<span class='warning'>You need access to the robot's insides to do that!</span>"
return
if(wiresexposed)
user << "You need to close the wire panel to do that."
user << "<span class='warning'>You need to close the wire panel to do that!</span>"
return
if(!cell)
user << "You need to install a power cell to do that."
user << "<span class='warning'>You need to install a power cell to do that!</span>"
return
if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers
emote("buzz-[user.name]")
@@ -500,17 +501,17 @@
if(radio)//sanityyyyyy
radio.attackby(W,user)//GTFO, you have your own procs
else
user << "Unable to locate a radio."
user << "<span class='warning'>Unable to locate a radio!</span>"
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
if(emagged)//still allow them to open the cover
user << "The interface seems slightly damaged"
user << "<span class='notice'>The interface seems slightly damaged.</span>"
if(opened)
user << "You must close the cover to swipe an ID card."
user << "<span class='warning'>You must close the cover to swipe an ID card!</span>"
else
if(allowed(usr))
locked = !locked
user << "You [ locked ? "lock" : "unlock"] [src]'s cover."
user << "<span class='notice'>You [ locked ? "lock" : "unlock"] [src]'s cover.</span>"
update_icons()
else
user << "<span class='danger'>Access denied.</span>"
@@ -518,27 +519,27 @@
else if(istype(W, /obj/item/borg/upgrade/))
var/obj/item/borg/upgrade/U = W
if(!opened)
usr << "You must access the borgs internals!"
usr << "<span class='warning'>You must access the borgs internals!</span>"
else if(!src.module && U.require_module)
usr << "The borg must choose a module before it can be upgraded!"
usr << "<span class='warning'>The borg must choose a module before it can be upgraded!</span>"
else if(U.locked)
usr << "The upgrade is locked and cannot be used yet!"
usr << "<span class='warning'>The upgrade is locked and cannot be used yet!</span>"
else
if(U.action(src))
usr << "You apply the upgrade to [src]!"
usr << "<span class='notice'>You apply the upgrade to [src].</span>"
usr.drop_item()
U.loc = src
else
usr << "Upgrade error!"
usr << "<span class='danger'>Upgrade error.</span>"
else if(istype(W, /obj/item/device/toner))
if(toner >= tonermax)
usr << "The toner level of [src] is at it's highest level possible"
usr << "<span class='warning'>The toner level of [src] is at it's highest level possible!</span>"
else
toner = 40
usr.drop_item()
qdel(W)
usr << "You fill the toner level of [src] to it's max capacity"
usr << "<span class='notice'>You fill the toner level of [src] to its max capacity.</span>"
else
if(W.force && W.damtype != STAMINA) //only sparks if real damage is dealt.
@@ -550,19 +551,19 @@
if(!opened)//Cover is closed
if(locked)
if(prob(90))
user << "You emag the cover lock."
user << "<span class='notice'>You emag the cover lock.</span>"
locked = 0
else
user << "You fail to emag the cover lock."
user << "<span class='warning'>You fail to emag the cover lock!</span>"
if(prob(25))
src << "Hack attempt detected."
src << "<span class='userdanger'>Hack attempt detected.</span>"
else
user << "The cover is already unlocked."
user << "<span class='warning'>The cover is already unlocked!</span>"
return
if(opened)//Cover is open
if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
if(wiresexposed)
user << "You must close the cover first"
user << "<span class='warning'>You must close the cover first!</span>"
return
else
sleep(6)
@@ -571,7 +572,7 @@
SetLockdown(1) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown
lawupdate = 0
connected_ai = null
user << "You emag [src]'s interface."
user << "<span class='notice'>You emag [src]'s interface.</span>"
message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
clear_supplied_laws()
@@ -599,9 +600,9 @@
SetLockdown(0)
update_icons()
else
user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
user << "<span class='warning'>You fail to [ locked ? "unlock" : "lock"] [src]'s interface!</span>"
if(prob(25))
src << "Hack attempt detected."
src << "<span class='danger'>ALERT: Hack attempt detected.</span>"
/mob/living/silicon/robot/verb/unlock_own_cover()
set category = "Robot Commands"
@@ -612,7 +613,7 @@
if("Yes")
locked = 0
update_icons()
usr << "You unlock your cover."
usr << "<span class='notice'>You unlock your cover.</span>"
/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if (M.a_intent =="disarm")
@@ -666,7 +667,7 @@
cell.updateicon()
cell.add_fingerprint(user)
user.put_in_active_hand(cell)
user << "You remove \the [cell]."
user << "<span class='notice'>You remove \the [cell].</span>"
cell = null
update_icons()
@@ -212,7 +212,8 @@
modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src)
modules += new /obj/item/weapon/pen(src)
modules += new /obj/item/weapon/razor(src)
modules += new /obj/item/device/violin(src)
modules += new /obj/item/device/instrument/violin(src)
modules += new /obj/item/device/instrument/guitar(src)
var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
M.matter = 30
+5 -5
View File
@@ -389,7 +389,7 @@
/mob/living/silicon/attack_larva(mob/living/carbon/alien/larva/L)
if(L.a_intent == "help")
visible_message("<span class='notice'>[L.name] rubs its head against [src].</span>")
visible_message("[L.name] rubs its head against [src].")
return
/mob/living/silicon/attack_hulk(mob/living/carbon/human/user)
@@ -405,15 +405,15 @@
/mob/living/silicon/attack_hand(mob/living/carbon/human/M)
switch(M.a_intent)
if ("help")
M.visible_message("<span class='notice'>[M] pets [src]!</span>", \
"<span class='notice'>You pet [src]!</span>")
M.visible_message("[M] pets [src].", \
"<span class='notice'>You pet [src].</span>")
if("grab")
grabbedby(M)
else
M.do_attack_animation(src)
playsound(src.loc, 'sound/effects/bang.ogg', 10, 1)
visible_message("<span class='danger'>[M] punches [src], but doesn't leave a dent.</span>", \
"<span class='userdanger'>[M] punches [src], but doesn't leave a dent.!</span>")
visible_message("<span class='warning'>[M] punches [src], but doesn't leave a dent.</span>", \
"<span class='warning'>[M] punches [src], but doesn't leave a dent.</span>")
return 0
/mob/living/silicon/adjustEarDamage()
@@ -109,18 +109,18 @@
//helmet and armor = 100% protection
if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) )
if( O.force )
user << "<span class='warning'>[src] is wearing too much armor. You can't cause \him any damage.</span>"
user << "<span class='warning'>[src] is wearing too much armor! You can't cause \him any damage.</span>"
visible_message("<span class='danger'> [user] hits [src] with [O], however [src] is too armored.</span>")
else
user << "<span class='warning'>[src] is wearing too much armor. You can't reach \his skin.<span>"
visible_message("<span class='notice'>[user] gently taps [src] with [O].</span>")
user << "<span class='warning'>[src] is wearing too much armor! You can't reach \his skin.<span>"
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O]</span>")
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
@@ -128,11 +128,11 @@
if (istype(O, /obj/item/weapon/razor))
if (shaved)
user << "<span class='warning'>You can't shave this corgi, it's already been shaved.</span>"
user << "<span class='warning'>You can't shave this corgi, it's already been shaved!</span>"
return
user.visible_message("<span class='notice'>[user] starts to shave [src] using \the [O].</span>")
user.visible_message("[user] starts to shave [src] using \the [O].", "<span class='notice'>You start to shave [src] using \the [O]...</span>")
if(do_after(user, 50))
user.visible_message("<span class='notice'>[user] shaves [src]'s hair using \the [O]. </span>")
user.visible_message("[user] shaves [src]'s hair using \the [O].")
playsound(loc, 'sound/items/Welder2.ogg', 20, 1)
shaved = 1
icon_living = "[initial(icon_living)]_shaved"
@@ -194,13 +194,13 @@
if("back")
if(inventory_back)
usr << "<span class='danger'>It's already wearing something.</span>"
usr << "<span class='warning'>It's already wearing something!</span>"
return
else
var/obj/item/item_to_add = usr.get_active_hand()
if(!item_to_add)
usr.visible_message("<span class='notice'>[usr] pets [src]</span>","<span class='notice'>You rest your hand on [src]'s back for a moment.</span>")
usr.visible_message("[usr] pets [src].","<span class='notice'>You rest your hand on [src]'s back for a moment.</span>")
return
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
@@ -219,9 +219,9 @@
)
if( ! ( item_to_add.type in allowed_types ) )
usr << "You set [item_to_add] on [src]'s back, but \he shakes it off!"
usr << "<span class='warning'>You set [item_to_add] on [src]'s back, but \he shakes it off!</span>"
if(!usr.drop_item())
usr << "<span class='notice'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>"
usr << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>"
return
item_to_add.loc = loc
if(prob(25))
@@ -250,10 +250,10 @@
return
if(inventory_head)
if(user) user << "<span class='danger'>You can't put more than one hat on [src]!</span>"
if(user) user << "<span class='warning'>You can't put more than one hat on [src]!</span>"
return
if(!item_to_add)
user.visible_message("<span class='notice'>[user] pets [src]</span>","<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
user.visible_message("[user] pets [src].","<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
return
@@ -392,23 +392,23 @@
if(valid)
if(user && !user.drop_item())
user << "<span class='notice'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
user << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
return 0
if(health <= 0)
user << "<span class ='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him.</span>"
else if(user)
user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
"You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
"You hear a friendly-sounding bark.")
"<span class='notice'>You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.</span>",
"<span class='italics'>You hear a friendly-sounding bark.</span>")
item_to_add.loc = src
src.inventory_head = item_to_add
regenerate_icons()
else
if(user && !user.drop_item())
user << "<span class='notice'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
user << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
return 0
user << "You set [item_to_add] on [src]'s head, but \he shakes it off!"
user << "<span class='warning'>You set [item_to_add] on [src]'s head, but \he shakes it off!</span>"
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
@@ -535,7 +535,7 @@
//puppies cannot wear anything.
/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
usr << "<span class='danger'>You can't fit this on [src]</span>"
usr << "<span class='warning'>You can't fit this on [src]!</span>"
return
..()
@@ -30,34 +30,34 @@
"can't tell if their ethernet detour is moving or not", "won't be able to reseed enough"+\
" kernels to function properly","can't start their neurotube console")
D << "<span class='notice'>You can't seem to find the [pick(faux_gadgets)]. Without it, [src] [pick(faux_problems)].</span>"
D << "<span class='warning'>You can't seem to find the [pick(faux_gadgets)]! Without it, [src] [pick(faux_problems)].</span>"
return
D.visible_message("<span class='notice'>[D] begins to reactivate [src].</span>")
D.visible_message("[D] begins to reactivate [src].", "<span class='notice'>You begin to reactivate [src]...</span>")
if(do_after(user,30,needhand = 1))
health = health_repair_max
stat = CONSCIOUS
icon_state = icon_living
dead_mob_list -= src
living_mob_list += src
D.visible_message("<span class='notice'>[D] reactivates [src]!</span>")
D.visible_message("[D] reactivates [src]!", "<span class='notice'>You reactivate [src].</span>")
alert_drones(DRONE_NET_CONNECT)
if(G)
G << "<span class='boldnotice'>DRONE NETWORK: </span><span class='ghostalert'>You were reactivated by [D]!</span>"
else
D << "<span class='notice'>You need to remain still to reactivate [src].</span>"
D << "<span class='warning'>You need to remain still to reactivate [src]!</span>"
if("Cannibalize")
if(D.health < D.maxHealth)
D.visible_message("<span class='notice'>[D] begins to cannibalize parts from [src].</span>")
D.visible_message("[D] begins to cannibalize parts from [src].", "<span class='notice'>You begin to cannibalize parts from [src]...</span>")
if(do_after(D, 60,5,0))
D.visible_message("<span class='notice'>[D] repairs itself using [src]'s remains!</span>")
D.visible_message("[D] repairs itself using [src]'s remains!", "<span class='notice'>You repair yourself using [src]'s remains.</span>")
D.adjustBruteLoss(-src.maxHealth)
new /obj/effect/decal/cleanable/oil/streak(get_turf(src))
qdel(src)
else
D << "<span class='notice'>You need to remain still to cannibalize [src].</span>"
D << "<span class='warning'>You need to remain still to cannibalize [src]!</span>"
else
D << "<span class='notice'>You're already in perfect condition!</span>"
D << "<span class='warning'>You're already in perfect condition!</span>"
if("Nothing")
return
@@ -69,9 +69,9 @@
..()
return
if(user.get_active_hand())
user << "<span class='notice'>Your hands are full.</span>"
user << "<span class='warning'>Your hands are full!</span>"
return
src << "<span class='warning'>[user] is trying to pick you up!</span>"
src << "<span class='danger'>[user] is trying to pick you up!</span>"
if(buckled)
user << "<span class='warning'>[src] is buckled to the [buckled.name] and cannot be picked up!</span>"
return
@@ -92,15 +92,15 @@
/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && stat != DEAD)
if(health < health_repair_max)
user << "<span class='notice'>You start to tighten loose screws on [src].</span>"
user << "<span class='notice'>You start to tighten loose screws on [src]...</span>"
if(do_after(user,80))
var/repair = health_repair_max - health
adjustBruteLoss(-repair)
visible_message("<span class='notice'>[user] tightens [src == user ? "their" : "[src]'s"] loose screws!</span>")
visible_message("[user] tightens [src == user ? "their" : "[src]'s"] loose screws!", "<span class='notice'>You tighten [src == user ? "their" : "[src]'s"] loose screws.</span>")
else
user << "<span class='notice'>You need to remain still to tighten [src]'s screws.</span>"
user << "<span class='warning'>You need to remain still to tighten [src]'s screws!</span>"
else
user << "<span class='notice'>[src]'s screws can't get any tighter!</span>"
user << "<span class='warning'>[src]'s screws can't get any tighter!</span>"
else
..()
@@ -22,7 +22,7 @@
light_on = !light_on
src << "<span class='notice'>Your light is now [light_on ? "on" : "off"]</span>"
src << "<span class='notice'>Your light is now [light_on ? "on" : "off"].</span>"
/mob/living/simple_animal/drone/verb/drone_ping()
set category = "Drone"
@@ -43,7 +43,7 @@
set category = "Drone"
if(!seeStatic)
src << "<span class='notice'>You have no vision filter to change!</span>"
src << "<span class='warning'>You have no vision filter to change!</span>"
return
var/selectedStatic = input("Select a vision filter", "Vision Filter") as null|anything in staticChoices
@@ -74,13 +74,13 @@
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
user.visible_message("[user] milks [src] using \the [O].", "<span class='notice'>You milk [src] using \the [O].</span>")
var/obj/item/weapon/reagent_containers/glass/G = O
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
user << "<span class='danger'>[O] is full.</span>"
user << "<span class='warning'>[O] is full!</span>"
if(!transfered)
user << "<span class='danger'>The udder is dry. Wait a bit longer...</span>"
user << "<span class='warning'>The udder is dry! Wait a bit longer...</span>"
else
..()
//cow
@@ -115,7 +115,7 @@
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
user.visible_message("[user] milks [src] using \the [O].", "<span class='notice'>You milk [src] using \the [O].</span>")
var/obj/item/weapon/reagent_containers/glass/G = O
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
@@ -242,14 +242,14 @@ var/global/chicken_count = 0
/mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, food_type)) //feedin' dem chickens
if(!stat && eggsleft < 8)
var/feedmsg = "<span class='notice'>[user] feeds [O] to [name]! [pick(feedMessages)]"
var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]"
user.visible_message(feedmsg)
user.drop_item()
qdel(O)
eggsleft += rand(1, 4)
//world << eggsleft
else
user << "<span class='notice'>[name] doesn't seem hungry!</span>"
user << "<span class='warning'>[name] doesn't seem hungry!</span>"
else
..()
@@ -33,7 +33,7 @@
/mob/living/simple_animal/pet/pug/attackby(var/obj/item/O as obj, var/mob/user as mob, params) //Marker -Agouri
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O]</span>")
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
@@ -25,7 +25,6 @@
name = "giant spider"
desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes."
icon_state = "guard"
var/butcher_state = 8 // Icon state for dead spider icons
icon_living = "guard"
icon_dead = "guard_dead"
speak_emote = list("chitters")
@@ -95,18 +94,11 @@
stop_automated_movement = 0
walk(src,0)
// Chops off each leg with a 50/50 chance of harvesting one, until finally calling
// default harvest action
/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user, sharpness = 1)
if(butcher_state > 0)
butcher_state--
icon_state = icon_dead + "[butcher_state]"
if(prob(50))
new /obj/item/weapon/reagent_containers/food/snacks/spiderleg(src.loc)
return
else
return ..()
/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user)
var/leg_amount = rand(4,8)
for(var/i=0, i<leg_amount, i++)
new /obj/item/weapon/reagent_containers/food/snacks/spiderleg(src.loc)
..()
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(var/C)
spawn(100)
@@ -245,7 +237,7 @@
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
if(E)
src << "<span class='notice'>There is already a cluster of eggs here!</span>"
src << "<span class='warning'>There is already a cluster of eggs here!</span>"
else if(!fed)
src << "<span class='warning'>You are too hungry to do this!</span>"
else if(busy != LAYING_EGGS)
@@ -28,7 +28,7 @@
else if(mind) // Let's make this a feature
egg.owner = mind
victim.internal_organs += egg
visible_message("<span class='notice'>[src] lays an egg in a [victim]!</span>")
visible_message("<span class='warning'>[src] lays an egg in a [victim].</span>")
egg_lain = 1
/mob/living/simple_animal/hostile/headcrab/AttackingTarget()
@@ -39,7 +39,7 @@
var/mob/living/carbon/human/H = target
if(H.stat == DEAD)
Infect(target)
src << "<span class='danger'>With your egg laid you feel your death rapidly approaching, time to die...</span>"
src << "<span class='userdanger'>With your egg laid you feel your death rapidly approaching, time to die...</span>"
spawn(100)
death()
return
@@ -37,7 +37,7 @@
/mob/living/simple_animal/hostile/mimic/death()
..(1)
visible_message("<span class='danger'>[src] stops moving!</span>")
visible_message("[src] stops moving!")
ghostize()
qdel(src)
@@ -280,7 +280,7 @@
user << "<span class='notice'>[src] are useless on the dead.</span>"
return
if(H != user)
H.visible_message("<span class='notice'>[user] forces [H] to eat [src]... they quickly regenerate all injuries!</span>")
H.visible_message("[user] forces [H] to eat [src]... they quickly regenerate all injuries!")
else
user << "<span class='notice'>You chomp into [src], barely managing to hold it down, but feel amazingly refreshed in mere moments.</span>"
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
@@ -461,7 +461,7 @@
user << "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>"
qdel(src)
else
user << "<span class='info'>You can't improve [C] any further.</span>"
user << "<span class='warning'>You can't improve [C] any further!</span>"
return
if(istype(target, /obj/mecha/working/ripley))
var/obj/mecha/D = target
@@ -483,9 +483,9 @@
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open")
D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter."
else
user << "<span class='info'>You can't add armour onto the mech while someone is inside!</span>"
user << "<span class='warning'>You can't add armour onto the mech while someone is inside!</span>"
else
user << "<span class='info'>You can't improve [D] any further.</span>"
user << "<span class='warning'>You can't improve [D] any further!</span>"
return
/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
@@ -71,10 +71,10 @@
if(istype(L, /mob/living/simple_animal/hostile/mushroom) && stat == DEAD)
var/mob/living/simple_animal/hostile/mushroom/M = L
if(faint_ticker < 2)
M.visible_message("<span class='notice'>[M] chews a bit on [src].</span>")
M.visible_message("[M] chews a bit on [src].")
faint_ticker++
return
M.visible_message("<span class='notice'>[M] devours [src]!</span>")
M.visible_message("<span class='warning'>[M] devours [src]!</span>")
var/level_gain = (powerlevel - M.powerlevel)
if(level_gain >= -1 && !bruised && !M.ckey)//Player shrooms can't level up to become robust gods.
if(level_gain < 1)//So we still gain a level if two mushrooms were the same level
@@ -91,7 +91,7 @@
/mob/living/simple_animal/hostile/mushroom/death(gibbed)
if(!gibbed)
visible_message("<span class='notice'>[src] fainted.</span>")
visible_message("[src] fainted.")
..(gibbed)
UpdateMushroomCap()
@@ -103,7 +103,7 @@
overlays += cap_living
/mob/living/simple_animal/hostile/mushroom/proc/Recover()
visible_message("<span class='notice'>[src] slowly begins to recover.</span>")
visible_message("[src] slowly begins to recover.")
faint_ticker = 0
revive()
UpdateMushroomCap()
@@ -123,7 +123,7 @@
/mob/living/simple_animal/hostile/mushroom/proc/Bruise()
if(!bruised && !stat)
src.visible_message("<span class='notice'>The [src.name] was bruised!</span>")
src.visible_message("The [src.name] was bruised!")
bruised = 1
/mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I as obj, mob/user as mob, params)
@@ -132,7 +132,7 @@
Recover()
qdel(I)
else
user << "<span class='notice'>[src] won't eat it!</span>"
user << "<span class='warning'>[src] won't eat it!</span>"
return
if(I.force)
Bruise()
@@ -44,7 +44,7 @@
/mob/living/simple_animal/hostile/pirate/death()
..(1)
visible_message("<span class='notice'>[src] stops moving.</span>")
visible_message("[src] stops moving.")
if(corpse)
new corpse (src.loc)
if(weapon1)
@@ -20,7 +20,7 @@
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/russian
var/weapon1 = /obj/item/weapon/kitchenknife
var/weapon1 = /obj/item/weapon/kitchen/knife
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
faction = list("russian")
@@ -46,7 +46,7 @@
/mob/living/simple_animal/hostile/russian/death(gibbed)
..(1)
visible_message("<span class='notice'>[src] stops moving.</span>")
visible_message("[src] stops moving.")
if(corpse)
new corpse (src.loc)
if(weapon1)
@@ -63,8 +63,8 @@
visible_message("<span class='danger'>[src] blocks [O] with its shield!</span>")
playsound(loc, O.hitsound, 25, 1, -1)
else
usr << "<span class='danger'>This weapon is ineffective, it does no damage.</span>"
visible_message("<span class='danger'>[user] gently taps [src] with [O].</span>")
usr << "<span class='warning'>This weapon is ineffective, it does no damage!</span>"
visible_message("<span class='warning'>[user] gently taps [src] with [O].</span>")
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(var/obj/item/projectile/Proj)
+13 -13
View File
@@ -204,19 +204,19 @@
if(copytext(possible_phrase,1,3) in department_radio_keys)
possible_phrase = copytext(possible_phrase,3)
else
usr << "<span class='danger'>There is nothing to remove from its [remove_from].</span>"
usr << "<span class='warning'>There is nothing to remove from its [remove_from]!</span>"
return
//Adding things to inventory
else if(href_list["add_inv"])
var/add_to = href_list["add_inv"]
if(!usr.get_active_hand())
usr << "<span class='danger'>You have nothing in your hand to put on its [add_to].</span>"
usr << "<span class='warning'>You have nothing in your hand to put on its [add_to]!</span>"
return
switch(add_to)
if("ears")
if(ears)
usr << "<span class='danger'>It's already wearing something.</span>"
usr << "<span class='warning'>It's already wearing something!</span>"
return
else
var/obj/item/item_to_add = usr.get_active_hand()
@@ -224,7 +224,7 @@
return
if( !istype(item_to_add, /obj/item/device/radio/headset) )
usr << "<span class='danger'>This object won't fit.</span>"
usr << "<span class='warning'>This object won't fit!</span>"
return
var/obj/item/device/radio/headset/headset_to_add = item_to_add
@@ -232,7 +232,7 @@
usr.drop_item()
headset_to_add.loc = src
src.ears = headset_to_add
usr << "You fit the headset onto [src]."
usr << "<span class='notice'>You fit the headset onto [src].</span>"
clearlist(available_channels)
for(var/ch in headset_to_add.channels)
@@ -489,7 +489,7 @@
if(!parrot_perch || parrot_interest.loc != parrot_perch.loc)
held_item = parrot_interest
parrot_interest.loc = src
visible_message("[src] grabs [held_item]!", "<span class='notice'>You grab [held_item]!</span>", "You hear the sounds of wings flapping furiously.")
visible_message("[src] grabs [held_item]!", "<span class='notice'>You grab [held_item]!</span>", "<span class='italics'>You hear the sounds of wings flapping furiously.</span>")
parrot_interest = null
parrot_state = PARROT_SWOOP | PARROT_RETURN
@@ -663,7 +663,7 @@
return -1
if(held_item)
src << "<span class='danger'>You are already holding [held_item]</span>"
src << "<span class='warning'>You are already holding [held_item]!</span>"
return 1
for(var/obj/item/I in view(1,src))
@@ -676,10 +676,10 @@
held_item = I
I.loc = src
visible_message("[src] grabs [held_item]!", "<span class='notice'>You grab [held_item]!</span>", "You hear the sounds of wings flapping furiously.")
visible_message("[src] grabs [held_item]!", "<span class='notice'>You grab [held_item]!</span>", "<span class='italics'>You hear the sounds of wings flapping furiously.</span>")
return held_item
src << "<span class='danger'>There is nothing of interest to take.</span>"
src << "<span class='warning'>There is nothing of interest to take!</span>"
return 0
/mob/living/simple_animal/parrot/proc/steal_from_mob()
@@ -691,7 +691,7 @@
return -1
if(held_item)
src << "<span class='danger'>You are already holding [held_item]</span>"
src << "<span class='warning'>You are already holding [held_item]!</span>"
return 1
var/obj/item/stolen_item = null
@@ -707,10 +707,10 @@
C.unEquip(stolen_item)
held_item = stolen_item
stolen_item.loc = src
visible_message("[src] grabs [held_item] out of [C]'s hand!", "<span class='notice'>You snag [held_item] out of [C]'s hand!</span>", "You hear the sounds of wings flapping furiously.")
visible_message("[src] grabs [held_item] out of [C]'s hand!", "<span class='notice'>You snag [held_item] out of [C]'s hand!</span>", "<span class='italics'>You hear the sounds of wings flapping furiously.</span>")
return held_item
src << "<span class='danger'>There is nothing of interest to take.</spawn>"
src << "<span class='warning'>There is nothing of interest to take!</spawn>"
return 0
/mob/living/simple_animal/parrot/verb/drop_held_item_player()
@@ -779,7 +779,7 @@
src.loc = AM.loc
icon_state = "parrot_sit"
return
src << "<span class='danger'>There is no perch nearby to sit on.</span>"
src << "<span class='warning'>There is no perch nearby to sit on!</span>"
return
/mob/living/simple_animal/parrot/proc/toggle_mode()
@@ -31,7 +31,7 @@
var/essence_regen_cap = 25 //The regeneration cap of essence (go figure); regenerates every Life() tick up to this amount.
var/essence_regen = 1 //If the revenant regenerates essence or not; 1 for yes, 0 for no
var/essence_min = 1 //The minimum amount of essence a revenant can have; by default, it never drops below one
var/strikes = 2 //How many times a revenant can die before dying for good
var/strikes = 3 //How many times a revenant can die before dying for good
var/revealed = 0 //If the revenant can take damage from normal sources.
var/inhibited = 0 //If the revenant's abilities are blocked by a chaplain's power.
@@ -61,6 +61,9 @@
/mob/living/simple_animal/revenant/Process_Spacemove(var/movement_dir = 0)
return 1 //Mainly to prevent the no-grav effect
/mob/living/simple_animal/revenant/ex_act(severity, target)
return 1 //Immune to the effects of explosions.
/mob/living/simple_animal/revenant/ClickOn(var/atom/A, var/params) //Copypaste from ghost code - revenants can't interact with the world directly.
if(client.buildmode)
build_click(src, client.buildmode, params, A)
@@ -94,21 +97,39 @@
/mob/living/simple_animal/revenant/New()
..()
notransform = 1
spawn(50)
spawn(5)
if(src.mind)
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_harvest
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_transmit
src.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/revenant_light
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_life_tap
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_seed_drain
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_mindspike
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_mindblast
notransform = 0
else
qdel(src)
src << 'sound/effects/ghost.ogg'
src.store_memory("<span class='deadsay'>I am a revenant. My spectral form has been empowered. My only goal is to gather essence from the humans of [world.name].</span>")
src << "<br>"
src << "<span class='deadsay'><font size=3><b>You are a revenant!</b></font></span>"
src << "<b>Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.</b>"
src << "<b>You are not dead, not alive, but somewhere in between. You are capable of very limited interaction with both worlds.</b>"
src << "<b>You are invincible and invisible to everyone but other ghosts. Some abilities may change this.</b>"
src << "<b>Your goal is to gather essence from humans. Your essence passively regenerates up to 25E over time. You can use the Harvest abilities to gather more from corpses.</b>"
src << "<b>Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant !</b>"
src << "<br>"
if(!src.giveSpells())
message_admins("Revenant was created but has no mind. Trying again in five seconds.")
spawn(50)
if(!src.giveSpells())
message_admins("Revenant still has no mind. Deleting...")
qdel(src)
/mob/living/simple_animal/revenant/proc/giveSpells()
if(src.mind)
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_harvest
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_transmit
src.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/revenant_light
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_life_tap
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_seed_drain
src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_mindspike
return 1
return 0
/mob/living/simple_animal/revenant/death()
if(!src.strikes)
return 0 //Impossible to die with strikes still active
..(1)
src.invisibility = 0
visible_message("<span class='danger'>[src] pulses with an eldritch purple light as its form unwinds into smoke.</span>")
@@ -50,6 +50,13 @@
if(5 to INFINITY)
user << "<span class='info'>Such a feast! [target] will yield much essence to you.</span>"
sleep(30)
if(!in_range(user, target))
user << "<span class='warning'>You are not close enough to siphon [target]'s soul. The link has been broken.</span>"
draining = 0
return
if(!target.stat)
user << "<span class='warning'>They are now powerful enough to fight off your draining.</span>"
target << "<span class='boldannounce'>You feel something tugging across your body before subsiding.</span>"
user << "<span class='danger'>You begin siphoning essence from [target]'s soul. You can not move while this is happening.</span>"
if(target.stat != DEAD)
target << "<span class='warning'>You feel a horribly unpleasant draining sensation as your grip on life weakens...</span>"
@@ -58,7 +65,7 @@
user.revealed = 1
user.invisibility = 0
target.visible_message("<span class='warning'>[target] suddenly rises slightly into the air, their skin turning an ashy gray.</span>")
target.Beam(user,icon_state="drain_life",icon='icons/effects/effects.dmi',time=50)
target.Beam(user,icon_state="drain_life",icon='icons/effects/effects.dmi',time=80)
target.death(0)
target.visible_message("<span class='warning'>[target] gently slumps back onto the ground.</span>")
user.icon_state = "revenant_idle"
@@ -116,7 +123,7 @@
panel = "Revenant Abilities (Locked)"
charge_max = 300
clothes_req = 0
range = 5
range = -1
var/locked = 1
/obj/effect/proc_holder/spell/aoe_turf/revenant_light/cast(list/targets, var/mob/living/simple_animal/revenant/user = usr)
@@ -129,6 +136,7 @@
name = "Overload Light (25E)"
panel = "Revenant Abilities"
locked = 0
range = 5
charge_counter = charge_max
return
if(locked)
@@ -199,7 +207,7 @@
panel = "Revenant Abilities (Locked)"
charge_max = 1200
clothes_req = 0
range = 1 //Adjacent
range = -1
include_user = 1
var/locked = 1
var/planted = 0
@@ -215,6 +223,7 @@
name = "Seed of Draining (20E)"
locked = 0
panel = "Revenant Abilities"
range = 1
include_user = 0
return
if(locked)
@@ -249,9 +258,9 @@
name = "Unlock: Mind Spike (5E)"
desc = "Drives a spike of dark energy into the target's mind. Cheap but effective and doesn't take long to cool down."
panel = "Revenant Abilities (Locked)"
charge_max = 15
charge_max = 40
clothes_req = 0
range = 3
range = -1
include_user = 1
var/locked = 1
@@ -266,6 +275,7 @@
name = "Mind Spike (5E)"
locked = 0
panel = "Revenant Abilities"
range = 3
include_user = 0
return
if(locked)
@@ -289,52 +299,6 @@
user.revealed = 0
user.invisibility = INVISIBILITY_OBSERVER
//Mind Blast: A big-hitting damage ability.
/obj/effect/proc_holder/spell/targeted/revenant_mindblast
name = "Unlock: Mind Blast (25E)"
desc = "Blasts the target's mind with dark energy, doing a hefty amount of damage."
panel = "Revenant Abilities (Locked)"
charge_max = 250
clothes_req = 0
range = 3
include_user = 1
var/locked = 1
/obj/effect/proc_holder/spell/targeted/revenant_mindblast/cast(list/targets, var/mob/living/simple_animal/revenant/user = usr)
if(user.inhibited)
user << "<span class='warning'>Something is blocking the use of [src]!</span>"
charge_counter = charge_max
return
if(locked && essence_check(25, 1))
user << "<span class='info'>You have unlocked Mind Blast!</span>"
charge_counter = charge_max
name = "Mind Blast (25E)"
locked = 0
panel = "Revenant Abilities"
include_user = 0
return
if(locked)
charge_counter = charge_max
return
if(!essence_check(25))
charge_counter = charge_max
return
for(var/mob/living/carbon/human/M in targets)
user << "<span class='info'>You blast [M]'s mind with energy!</span>"
M << "<span class='boldannounce'><i>You feel a sudden explosion of agony in your head!</i></span>"
M.apply_damage(40, BRUTE, "head")
M.adjustBrainLoss(20)
M.emote("scream")
M.Weaken(4)
//M << 'sound/effects/mind_blast.ogg'
user.revealed = 1
user.invisibility = 0
spawn(30)
user.revealed = 0
user.invisibility = INVISIBILITY_OBSERVER
//Hypnotize: Makes the target fall asleep, make them vulnerable to draining.
/obj/effect/proc_holder/spell/targeted/revenant_hypnotize
name = "Unlock: Hypnotize (15E)"
@@ -342,7 +306,7 @@
panel = "Revenant Abilities (Locked)"
charge_max = 900
clothes_req = 0
range = 3
range = -1
include_user = 1
var/locked = 1
@@ -356,6 +320,7 @@
charge_counter = charge_max
name = "Hypnotize (15E)"
locked = 0
range = 3
panel = "Revenant Abilities"
include_user = 0
return
@@ -370,4 +335,12 @@
M << "<span class='boldannounce'>Tired... <font size=1.5> so tired...</font></span>"
M.drowsyness += 7
spawn(70)
M.sleeping += 12
M.sleeping += 30
/* (WIP)
Strangulate: Chokes the target with crushing force.
/obj/effect/proc_holder/spell/targeted/revenant_strangulate
name = "Unlock: Strangulate (30E)"
desc = "Strangles a target with an asphyxiating hand, dealing decent oxygen damage to them."
*/
@@ -1,6 +1,7 @@
/datum/round_event_control/revenant
name = "Spawn Revenant"
typepath = /datum/round_event/revenant
weight = 15
max_occurrences = 3
earliest_start = 0 //Meant to mix things up early-game.
@@ -37,21 +38,11 @@
return find_revenant()
var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs))
player_mind.transfer_to(revvie)
player_mind.assigned_role = "MODE"
player_mind.assigned_role = "revenant"
player_mind.special_role = "Revenant"
ticker.mode.traitors |= player_mind
revvie << 'sound/effects/ghost.ogg'
message_admins("[key_of_revenant] has been made into a Revenant by an event.")
log_game("[key_of_revenant] was spawned as a Revenant by an event.")
player_mind.store_memory("<span class='deadsay'>I am a revenant. My spectral form has been empowered. My only goal is to gather essence from the humans of [world.name].</span>")
revvie << "<br>"
revvie << "<span class='deadsay'><font size=3><b>You are a revenant!</b></font></span>"
revvie << "<b>Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.</b>"
revvie << "<b>You are not dead, not alive, but somewhere in between. You are capable of very limited interaction with both worlds.</b>"
revvie << "<b>You are invincible and invisible to everyone but other ghosts. Some abilities may change this.</b>"
revvie << "<b>Your goal is to gather essence from humans. Your essence passively regenerates up to 25E over time. You can use the Harvest abilities to gather more from corpses.</b>"
//revvie << "<b>Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant !</b>" //Not added yet.
revvie << "<br>"
return 1
@@ -363,7 +363,10 @@
user.changeNext_move(CLICK_CD_MELEE)
var/sharpness = is_sharp(O)
if(sharpness)
harvest(user, sharpness)
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/sharpness))
harvest(user)
return
..()
@@ -461,13 +464,9 @@
new childtype(loc)
// Harvest an animal's delicious byproducts
/mob/living/simple_animal/proc/harvest(mob/living/user, sharpness = 1)
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/sharpness))
visible_message("<span class='notice'>[user] butchers [src].</span>")
gib()
return
/mob/living/simple_animal/proc/harvest(mob/living/user)
visible_message("<span class='notice'>[user] butchers [src].</span>")
gib()
/mob/living/simple_animal/stripPanelUnequip(obj/item/what, mob/who, where, child_override)
if(!child_override)
@@ -490,4 +489,4 @@
canmove = 0
else
canmove = 1
return canmove
return canmove

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