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

Conflicts:
	config/admins.txt
This commit is contained in:
TZK13
2015-01-03 07:07:03 -06:00
256 changed files with 5006 additions and 3820 deletions
+56 -6
View File
@@ -245,7 +245,8 @@ var/list/admin_verbs_hideable = list(
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/cmd_admin_areatest
/client/proc/cmd_admin_areatest,
/client/proc/readmin
)
if(holder)
verbs.Remove(holder.rank.adds)
@@ -501,11 +502,11 @@ var/list/admin_verbs_hideable = list(
set category = "Admin"
if(holder)
if(alert("Confirm self-deadmin for the round? You can't re-admin yourself without someont promoting you.",,"Yes","No") == "Yes")
log_admin("[src] deadmined themself.")
message_admins("[src] deadmined themself.")
deadmin()
src << "<span class='interface'>You are now a normal player.</span>"
log_admin("[src] deadmined themself.")
message_admins("[src] deadmined themself.")
deadmin()
verbs += /client/proc/readmin
src << "<span class='interface'>You are now a normal player.</span>"
feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_log_hrefs()
@@ -526,3 +527,52 @@ var/list/admin_verbs_hideable = list(
if(holder)
src.holder.output_ai_laws()
/client/proc/readmin()
set name = "Re-admin self"
set category = "Admin"
set desc = "Regain your admin powers."
var/list/rank_names = list()
for(var/datum/admin_rank/R in admin_ranks)
rank_names[R.name] = R
var/datum/admins/D = admin_datums[ckey]
var/rank = null
if(config.admin_legacy_system)
//load text from file
var/list/Lines = file2list("config/admins.txt")
for(var/line in Lines)
var/list/splitline = text2list(line, " = ")
if(splitline[1] == ckey)
if(splitline.len >= 2)
rank = ckeyEx(splitline[2])
break
continue
else
if(!dbcon.IsConnected())
message_admins("Warning, mysql database is not connected.")
src << "Warning, mysql database is not connected."
return
var/sql_ckey = sanitizeSQL(ckey)
var/DBQuery/query = dbcon.NewQuery("SELECT rank FROM [format_table_name("admin")] WHERE ckey = '[sql_ckey]'")
query.Execute()
while(query.NextRow())
rank = ckeyEx(query.item[1])
if(!D)
if(rank_names[rank] == null)
var/error_extra = ""
if(!config.admin_legacy_system)
error_extra = " Check mysql DB connection."
error("Error while re-adminning [src], admin rank ([rank]) does not exist.[error_extra]")
src << "Error while re-adminning, admin rank ([rank]) does not exist.[error_extra]"
return
D = new(rank_names[rank],ckey)
var/client/C = directory[ckey]
D.associate(C)
message_admins("[src] re-adminned themselves.")
log_admin("[src] re-adminned themselves.")
feedback_add_details("admin_verb","RAS")
verbs -= /client/proc/readmin
return
else
src << "You are already an admin."
verbs -= /client/proc/readmin
return
+23 -1
View File
@@ -4,13 +4,35 @@
#define NOTESFILE "data/player_notes.sav" //where the player notes are saved
/proc/see_own_notes()
if(!config.see_own_notes)
return
var/ckey = usr.client.ckey
if(!ckey)
usr << "<span class='warning'>Error: No ckey found.</span>"
return
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile)
usr << "<span class='warning'>Error: Cannot access [NOTESFILE]</span>"
return
notesfile.cd = "/[ckey]"
var/dat = "<b>Notes for [ckey]:</b><br>"
while(!notesfile.eof)
var/note
notesfile >> note
dat += note
var/datum/browser/popup = new(usr, "player_notes", "Player Notes", 700, 400)
popup.set_content(dat)
popup.open()
datum/admins/proc/notes_show(var/ckey)
usr << browse("<head><title>Player Notes</title></head><body>[notes_gethtml(ckey)]</body>","window=player_notes;size=700x400")
datum/admins/proc/notes_gethtml(var/ckey)
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return "<font color='red'>Error: Cannot access [NOTESFILE]</font>"
if(!notesfile) return "<span class='warning'>Error: Cannot access [NOTESFILE]</span>"
if(ckey)
. = "<b>Notes for <a href='?_src_=holder;notes=show'>[ckey]</a>:</b> <a href='?_src_=holder;notes=add;ckey=[ckey]'>\[+\]</a><br>"
notesfile.cd = "/[ckey]"
+8 -8
View File
@@ -670,7 +670,7 @@ var/global/list/g_fancy_list_of_types = null
if ("tournament chef") //Steven Seagal FTW
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chef(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
@@ -705,7 +705,7 @@ var/global/list/g_fancy_list_of_types = null
if ("laser tag red")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/red(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/redtaghelm(M), slot_head)
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/suit/redtag(M), slot_wear_suit)
@@ -716,7 +716,7 @@ var/global/list/g_fancy_list_of_types = null
if ("laser tag blue")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/blue(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/blue(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/blue(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bluetaghelm(M), slot_head)
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/suit/bluetag(M), slot_wear_suit)
@@ -743,7 +743,7 @@ var/global/list/g_fancy_list_of_types = null
if("tunnel clown")//Tunnel clowns rule!
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
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)
@@ -764,7 +764,7 @@ var/global/list/g_fancy_list_of_types = null
if("masked killer")
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
@@ -785,7 +785,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(U, slot_w_uniform)
U.attachTie(new /obj/item/clothing/tie/waistcoat(M))
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
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/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
@@ -821,7 +821,7 @@ var/global/list/g_fancy_list_of_types = null
if("centcom official")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
@@ -951,7 +951,7 @@ var/global/list/g_fancy_list_of_types = null
if("mobster")
M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
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/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/tommygun(M), slot_r_hand)
+5 -5
View File
@@ -18,7 +18,7 @@
if(!armed)
if(ishuman(usr))
var/mob/living/carbon/human/user = usr
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50))
user << "Your hand slips, setting off the trigger."
pulse(0)
update_icon()
@@ -65,11 +65,11 @@
pulse(0)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user as mob)
if(!armed)
user << "<span class='notice'>You arm [src].</span>"
else
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -83,9 +83,9 @@
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user as mob)
if(armed)
if(((user.getBrainLoss() >= 60 || CLUMSY in user.mutations)) && prob(50))
if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
+2 -2
View File
@@ -160,7 +160,7 @@
/obj/effect/landmark/corpse/cook
name = "Cook"
corpseuniform = /obj/item/clothing/under/rank/chef
corpsesuit = /obj/item/clothing/suit/chef/classic
corpsesuit = /obj/item/clothing/suit/apron/chef
corpseshoes = /obj/item/clothing/shoes/sneakers/black
corpsehelmet = /obj/item/clothing/head/chefhat
corpseback = /obj/item/weapon/storage/backpack
@@ -189,7 +189,7 @@
corpseback = /obj/item/weapon/storage/backpack/industrial
corpseshoes = /obj/item/clothing/shoes/sneakers/orange
corpsebelt = /obj/item/weapon/storage/belt/utility/full
corpsegloves = /obj/item/clothing/gloves/yellow
corpsegloves = /obj/item/clothing/gloves/color/yellow
corpsehelmet = /obj/item/clothing/head/hardhat
corpseid = 1
corpseidjob = "Station Engineer"
@@ -77,18 +77,9 @@
if("Power")
user << "<B>Your wish is granted, but at a terrible cost...</B>"
user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
if (!(LASER in user.mutations))
user.mutations.Add(LASER)
user << "<span class='notice'>You feel pressure building behind your eyes.</span>"
if (!(COLD_RESISTANCE in user.mutations))
user.mutations.Add(COLD_RESISTANCE)
user << "<span class='notice'>Your body feels warm.</span>"
if (!(XRAY in user.mutations))
user.mutations.Add(XRAY)
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
user.see_in_dark = 8
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
user << "<span class='notice'>The walls suddenly disappear.</span>"
user.dna.add_mutation(LASEREYES)
user.dna.add_mutation(COLDRES)
user.dna.add_mutation(XRAY)
user.dna.species = new /datum/species/shadow()
user.regenerate_icons()
if("Wealth")
+7 -2
View File
@@ -133,6 +133,7 @@ var/next_external_rsc = 0
if((global.comms_key == "default_pwd" || length(global.comms_key) <= 6) && global.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms.
src << "<span class='danger'>The server's API key is either too short or is the default value! Consider changing it immediately!</span>"
add_verbs_from_config()
set_client_age_from_db()
if (!ticker || ticker.current_state == GAME_STATE_PREGAME)
@@ -210,7 +211,7 @@ var/next_external_rsc = 0
var/sql_admin_rank = sanitizeSQL(admin_rank)
var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid)")
var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)")
query_insert.Execute()
//Logging player access
@@ -218,6 +219,10 @@ var/next_external_rsc = 0
var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');")
query_accesslog.Execute()
/client/proc/add_verbs_from_config()
if(config.see_own_notes)
verbs += /client/proc/self_notes
#undef TOPIC_SPAM_DELAY
#undef UPLOAD_LIMIT
@@ -306,4 +311,4 @@ var/next_external_rsc = 0
'icons/stamp_icons/large_stamp-cap.png',
'icons/stamp_icons/large_stamp-qm.png',
'icons/stamp_icons/large_stamp-law.png'
)
)
+2 -2
View File
@@ -126,9 +126,9 @@
if(M.glasses == src)
M.eye_blind = 3
M.eye_blurry = 5
M.disabilities |= NEARSIGHTED
M.disabilities |= NEARSIGHT
spawn(100)
M.disabilities &= ~NEARSIGHTED
M.disabilities &= ~NEARSIGHT
..()
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
-10
View File
@@ -17,13 +17,3 @@
/obj/item/clothing/gloves/boxing/yellow
icon_state = "boxingyellow"
item_state = "boxingyellow"
/obj/item/clothing/gloves/white
name = "white gloves"
desc = "These look pretty fancy."
icon_state = "latex"
item_state = "lgloves"
item_color="mime"
redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
+76 -34
View File
@@ -1,4 +1,4 @@
/obj/item/clothing/gloves/yellow
/obj/item/clothing/gloves/color/yellow
desc = "These gloves will protect the wearer from electric shock."
name = "insulated gloves"
icon_state = "yellow"
@@ -7,118 +7,160 @@
permeability_coefficient = 0.05
item_color="yellow"
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly."
name = "budget insulated gloves"
icon_state = "yellow"
item_state = "ygloves"
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
permeability_coefficient = 0.05
item_color="yellow"
New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
/obj/item/clothing/gloves/color/fyellow/New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
/obj/item/clothing/gloves/black
/obj/item/clothing/gloves/color/black
desc = "These gloves are fire-resistant."
name = "black gloves"
icon_state = "black"
item_state = "bgloves"
item_color="brown"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
/obj/item/clothing/gloves/color/black/hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
ce
item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
/obj/item/clothing/gloves/color/black/ce
item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
/obj/item/clothing/gloves/black/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/clothing/gloves/color/black/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wirecutters))
user << "<span class='notice'>You snip the fingertips off of [src].</span>"
playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1)
var/obj/item/clothing/gloves/fingerless/fingerless_gloves = new /obj/item/clothing/gloves/fingerless(user.loc)
fingerless_gloves.icon_state = icon_state
qdel(src)
if(icon_state == initial(icon_state)) //only if not dyed
user << "<span class='notice'>You snip the fingertips off of [src].</span>"
playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1)
new /obj/item/clothing/gloves/fingerless(user.loc)
qdel(src)
..()
/obj/item/clothing/gloves/orange
/obj/item/clothing/gloves/color/orange
name = "orange gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "orange"
item_state = "orangegloves"
item_color="orange"
/obj/item/clothing/gloves/red
/obj/item/clothing/gloves/color/red
name = "red gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "red"
item_state = "redgloves"
item_color = "red"
/obj/item/clothing/gloves/rainbow
/obj/item/clothing/gloves/color/rainbow
name = "rainbow gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "rainbow"
item_state = "rainbowgloves"
item_color = "rainbow"
clown
item_color = "clown"
/obj/item/clothing/gloves/color/rainbow/clown
item_color = "clown"
/obj/item/clothing/gloves/blue
/obj/item/clothing/gloves/color/blue
name = "blue gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "blue"
item_state = "bluegloves"
item_color="blue"
/obj/item/clothing/gloves/purple
/obj/item/clothing/gloves/color/purple
name = "purple gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "purple"
item_state = "purplegloves"
item_color="purple"
/obj/item/clothing/gloves/green
/obj/item/clothing/gloves/color/green
name = "green gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "green"
item_state = "greengloves"
item_color="green"
/obj/item/clothing/gloves/grey
/obj/item/clothing/gloves/color/grey
name = "grey gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "gray"
item_state = "graygloves"
item_color="grey"
rd
item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
/obj/item/clothing/gloves/color/grey/rd
item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
hop
item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
/obj/item/clothing/gloves/color/grey/hop
item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
/obj/item/clothing/gloves/light_brown
/obj/item/clothing/gloves/color/light_brown
name = "light brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "lightbrown"
item_state = "lightbrowngloves"
item_color="light brown"
/obj/item/clothing/gloves/brown
/obj/item/clothing/gloves/color/brown
name = "brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "brown"
item_state = "browngloves"
item_color="brown"
cargo
item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
/obj/item/clothing/gloves/color/brown/cargo
item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
/obj/item/clothing/gloves/color/captain
desc = "Regal blue gloves, with a nice gold trim. Swanky."
name = "captain's gloves"
icon_state = "captain"
item_state = "egloves"
item_color = "captain"
siemens_coefficient = 0
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
strip_delay = 60
/obj/item/clothing/gloves/color/latex
name = "latex gloves"
desc = "Cheap sterile gloves made from latex."
icon_state = "latex"
item_state = "lgloves"
siemens_coefficient = 0.30
permeability_coefficient = 0.01
item_color="white"
transfer_prints = TRUE
/obj/item/clothing/gloves/color/latex/cmo
item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
/obj/item/clothing/gloves/color/latex/nitrile
name = "nitrile gloves"
desc = "Pricy sterile gloves that are stronger than latex."
icon_state = "nitrile"
item_state = "nitrilegloves"
transfer_prints = FALSE
/obj/item/clothing/gloves/color/white
name = "white gloves"
desc = "These look pretty fancy."
icon_state = "white"
item_state = "wgloves"
item_color="mime"
/obj/item/clothing/gloves/color/white/redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
+21 -47
View File
@@ -1,42 +1,15 @@
/obj/item/clothing/gloves/captain
desc = "Regal blue gloves, with a nice gold trim. Swanky."
name = "captain's gloves"
icon_state = "captain"
item_state = "egloves"
item_color = "captain"
siemens_coefficient = 0
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
strip_delay = 60
/obj/item/clothing/gloves/combat
name = "combat gloves"
desc = "These tactical gloves are fireproof and shock resistant."
icon_state = "black"
item_state = "bgloves"
siemens_coefficient = 0
permeability_coefficient = 0.05
strip_delay = 80
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
/obj/item/clothing/gloves/latex
name = "latex gloves"
desc = "Sterile latex gloves."
icon_state = "latex"
item_state = "lgloves"
siemens_coefficient = 0.30
permeability_coefficient = 0.01
item_color="white"
/obj/item/clothing/gloves/fingerless
name = "fingerless gloves"
desc = "Plain black gloves without fingertips for the hard working."
icon_state = "fingerless"
item_state = "fingerless"
item_color = null //So they don't wash.
transfer_prints = TRUE
cmo
item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
strip_delay = 40
put_on_delay = 20
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
/obj/item/clothing/gloves/botanic_leather
name = "botanist's leather gloves"
@@ -49,14 +22,15 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
/obj/item/clothing/gloves/fingerless
name = "fingerless gloves"
desc = "Plain black gloves without fingertips for the hard working."
icon_state = "fingerless"
item_state = "fingerless"
item_color = null //So they don't wash.
transfer_prints = TRUE
strip_delay = 40
put_on_delay = 20
/obj/item/clothing/gloves/combat
name = "combat gloves"
desc = "These tactical gloves are fireproof and shock resistant."
icon_state = "black"
item_state = "bgloves"
siemens_coefficient = 0
permeability_coefficient = 0.05
strip_delay = 80
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
-7
View File
@@ -54,13 +54,6 @@
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
/obj/item/clothing/head/helmet/bulletproof
name = "tactical helmet"
desc = "An advanced helmet designed to protect against traditional projectile weaponry and explosives."
icon_state = "bulletproof"
armor = list(melee = 25, bullet = 60, laser = 25, energy = 10, bomb = 40, bio = 0, rad = 0)
strip_delay = 70
/obj/item/clothing/head/helmet/thunderdome
name = "\improper Thunderdome helmet"
desc = "<i>'Let the battle commence!'</i>"
+1 -1
View File
@@ -1,5 +1,5 @@
/obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
body_parts_covered = CHEST
cold_protection = CHEST|GROIN
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+9 -6
View File
@@ -46,24 +46,27 @@
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen)
//Chef
/obj/item/clothing/suit/chef
/obj/item/clothing/suit/toggle/chef
name = "chef's apron"
desc = "An apron used by a high class chef."
desc = "An apron-jacket used by a high class chef."
icon_state = "chef"
item_state = "chef"
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|ARMS
allowed = list (/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
allowed = list(/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
action_button_name = "Toggle Jacket Sleeves"
togglename = "sleeves"
//Chef
/obj/item/clothing/suit/chef/classic
name = "A classic chef's apron."
//Cook
/obj/item/clothing/suit/apron/chef
name = "cook's apron"
desc = "A basic, dull, white chef's apron."
icon_state = "apronchef"
item_state = "apronchef"
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
allowed = list(/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
//Detective
/obj/item/clothing/suit/det_suit
+1 -2
View File
@@ -5,9 +5,8 @@
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
var/open = 0
action_button_name = "Toggle Labcoat Buttons"
togglename = "buttons"
+4 -4
View File
@@ -253,24 +253,24 @@
name = "captain's winter coat"
icon_state = "coatcaptain"
armor = list(melee = 50, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
/obj/item/clothing/suit/toggle/wintercoat/security
name = "security winter coat"
icon_state = "coatsecurity"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
/obj/item/clothing/suit/toggle/wintercoat/medical
name = "medical winter coat"
icon_state = "coatmedical"
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
/obj/item/clothing/suit/toggle/wintercoat/science
name = "science winter coat"
icon_state = "coatscience"
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/suit/toggle/wintercoat/engineering
+2 -1
View File
@@ -42,7 +42,8 @@
/obj/item/clothing/under/rank/chef
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
name = "cook's suit"
desc = "A suit which is given only to the most <b>hardcore</b> cooks in space."
icon_state = "chef"
item_color = "chef"
+1 -1
View File
@@ -35,7 +35,7 @@
var/datum/disease/D
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
if(!H.dna || (H.sdisabilities & BLIND)) //A blindness disease would be the worst.
if(!H.dna || (H.disabilities & BLIND)) //A blindness disease would be the worst.
continue
D = new virus_type()
var/datum/disease/dnaspread/DS = D
+3 -3
View File
@@ -117,13 +117,13 @@
santa.equip_to_slot_or_del(new /obj/item/clothing/suit/space/santa, slot_wear_suit)
santa.equip_to_slot_or_del(new /obj/item/clothing/head/santa, slot_head)
santa.equip_to_slot_or_del(new /obj/item/clothing/mask/breath, slot_wear_mask)
santa.equip_to_slot_or_del(new /obj/item/clothing/gloves/red, slot_gloves)
santa.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red, slot_gloves)
santa.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red, slot_shoes)
santa.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double, slot_belt)
santa.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain, slot_ears)
santa.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/santabag, slot_back)
santa.equip_to_slot_or_del(new /obj/item/device/flashlight, slot_r_store) //most blob spawn locations are really dark.
var/obj/item/weapon/card/id/gold/santacard = new(santa)
santacard.update_label("Santa Claus", "Santa")
var/datum/job/captain/J = new/datum/job/captain
@@ -147,5 +147,5 @@
var/obj/effect/proc_holder/spell/targeted/area_teleport/teleport/telespell = new(santa)
telespell.clothes_req = 0 //santa robes aren't actually magical.
santa.mind.spell_list += telespell //does the station have chimneys? WHO KNOWS!
santa << "<span class='userdanger'>You are Santa! Your objective is to bring joy to the people on this station. You can conjure more presents using a spell, and there are several presents in your bag.</span>"
+4 -5
View File
@@ -2396,13 +2396,12 @@ It is possible to destroy the net by the occupant or someone else.
..()
return
/obj/effect/energy_net/attack_hand(mob/user)
if (HULK in user.mutations)
user.visible_message("<span class='danger'>[user] rips the energy net apart!</span>", \
/obj/effect/energy_net/attack_hulk(mob/living/carbon/human/user)
..(user, 1)
user.visible_message("<span class='danger'>[user] rips the energy net apart!</span>", \
"<span class='notice'>You easily destroy the energy net.</span>")
health-=50
health-=50
healthcheck()
return
/obj/effect/energy_net/attack_paw(mob/user)
return attack_hand()
+45 -101
View File
@@ -20,7 +20,8 @@ mob/living/carbon/
var/hal_crit = 0
mob/living/carbon/proc/handle_hallucinations()
if(handling_hal) return
if(handling_hal)
return
handling_hal = 1
while(hallucination > 20)
sleep(rand(200,500)/(hallucination/25))
@@ -148,7 +149,6 @@ mob/living/carbon/proc/handle_hallucinations()
src << sound('sound/AI/shuttledock.ogg')
if(66 to 70)
//Flashes of danger
//src << "Danger Flash"
if(!halbody)
var/list/possible_points = list()
for(var/turf/simulated/floor/F in view(src,world.view))
@@ -162,8 +162,6 @@ mob/living/carbon/proc/handle_hallucinations()
halbody = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER)
if(4)
halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER)
// if(5)
// halbody = image('xcomalien.dmi',target,"chryssalid",TURF_LAYER)
if(client) client.images += halbody
spawn(rand(50,80)) //Only seen for a brief moment.
@@ -171,55 +169,58 @@ mob/living/carbon/proc/handle_hallucinations()
halbody = null
if(71 to 72)
//Fake death
// src.sleeping_willingly = 1
src.sleeping = 20
hal_crit = 1
hal_screwyhud = 1
spawn(rand(50,100))
// src.sleeping_willingly = 0
src.sleeping = 0
hal_crit = 0
hal_screwyhud = 0
if(73 to 75)
fake_attack()
handling_hal = 0
/mob/living/carbon/proc/fake_attack()
// var/list/possible_clones = new/list()
var/mob/living/carbon/human/clone = null
var/clone_weapon = null
for(var/mob/living/carbon/human/H in living_mob_list)
if(H.stat || H.lying)
continue
// possible_clones += H
clone = H
break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order.
/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts)
// if(!possible_clones.len) return
// clone = pick(possible_clones)
if(!clone)
return
if(!mocktxt)
//var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target))
var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(src.loc)
if(clone.l_hand)
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
clone_weapon = clone.l_hand.name
F.weap = clone.l_hand
else if (clone.r_hand)
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
clone_weapon = clone.r_hand.name
F.weap = clone.r_hand
mocktxt = ""
F.name = clone.name
F.my_target = src
F.weapon_name = clone_weapon
src.hallucinations += F
var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\
"Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\
"OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Captain IQ","Retrieve Arms",\
"Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry")
F.left = image(clone,dir = WEST)
F.right = image(clone,dir = EAST)
F.up = image(clone,dir = NORTH)
F.down = image(clone,dir = SOUTH)
if(mid_txts)
while(mid_txts.len)
var/mid_txt = pick(mid_txts)
mocktxt += mid_txt
mid_txts -= mid_txt
F.updateimage()
while(buttons.len)
var/button = pick(buttons)
var/button_txt = pick(possible_txt)
mocktxt += "<a href='?src=\ref[src];[button]'>[button_txt]</a><br>"
buttons -= button
possible_txt -= button_txt
return start_txt + mocktxt + end_txt + "</TT></BODY></HTML>"
proc/check_panel(mob/M)
if (istype(M, /mob/living/carbon/human) || istype(M, /mob/living/silicon/ai))
if(M.hallucination < 15)
return 1
return 0*/
/obj/effect/fake_attacker
icon = null
@@ -245,8 +246,11 @@ proc/check_panel(mob/M)
var/health = 100
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/user as mob)
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/living/user as mob)
step_away(src,my_target,2)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
my_target.visible_message("<span class='danger'>[my_target] flails around wildly.</span>", \
"<span class='danger'>[my_target] has attacked [src]!</span>")
@@ -303,11 +307,13 @@ proc/check_panel(mob/M)
updateimage()
else
if(prob(15))
src.do_attack_animation(my_target)
if(weapon_name)
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
my_target.staminaloss += 30
if(prob(20)) my_target.eye_blurry += 3
if(prob(20))
my_target.eye_blurry += 3
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
@@ -326,7 +332,7 @@ proc/check_panel(mob/M)
collapse = 1
updateimage()
/proc/fake_blood(var/mob/target)
/obj/effect/fake_attacker/proc/fake_blood(var/mob/target)
var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc)
O.name = "blood"
var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
@@ -350,65 +356,3 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
/obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\
/obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank)
/proc/fake_attack(var/mob/living/target)
// var/list/possible_clones = new/list()
var/mob/living/carbon/human/clone = null
var/clone_weapon = null
for(var/mob/living/carbon/human/H in living_mob_list)
if(H.stat || H.lying) continue
// possible_clones += H
clone = H
break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order.
// if(!possible_clones.len) return
// clone = pick(possible_clones)
if(!clone) return
//var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target))
var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(target.loc)
if(clone.l_hand)
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
clone_weapon = clone.l_hand.name
F.weap = clone.l_hand
else if (clone.r_hand)
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
clone_weapon = clone.r_hand.name
F.weap = clone.r_hand
F.name = clone.name
F.my_target = target
F.weapon_name = clone_weapon
target.hallucinations += F
F.left = image(clone,dir = WEST)
F.right = image(clone,dir = EAST)
F.up = image(clone,dir = NORTH)
F.down = image(clone,dir = SOUTH)
// F.base = new /icon(clone.stand_icon)
// F.currentimage = new /image(clone)
/*
F.left = new /icon(clone.stand_icon,dir=WEST)
for(var/icon/i in clone.overlays)
F.left.Blend(i)
F.up = new /icon(clone.stand_icon,dir=NORTH)
for(var/icon/i in clone.overlays)
F.up.Blend(i)
F.down = new /icon(clone.stand_icon,dir=SOUTH)
for(var/icon/i in clone.overlays)
F.down.Blend(i)
F.right = new /icon(clone.stand_icon,dir=EAST)
for(var/icon/i in clone.overlays)
F.right.Blend(i)
target << F.up
*/
F.updateimage()
+2 -1
View File
@@ -18,6 +18,7 @@
density = 1
opacity = 0
var/state = 0
var/list/allowed_books = list(/obj/item/weapon/book, /obj/item/weapon/spellbook, /obj/item/weapon/storage/book) //Things allowed in the bookcase
/obj/structure/bookcase/initialize()
@@ -61,7 +62,7 @@
state = 0
if(2)
if(istype(I, /obj/item/weapon/book) || istype(I, /obj/item/weapon/spellbook))
if(is_type_in_list(I, allowed_books))
user.drop_item()
I.loc = src
update_icon()
+10
View File
@@ -471,6 +471,13 @@
force = 10
throwforce = 10
var/cooldown = 0
var/list/can_be_placed_into = list(
/obj/structure/table,
/obj/structure/closet,
/obj/item/weapon/storage,
/obj/structure/safe,
/obj/machinery/disposal
)
/obj/item/weapon/resonator/proc/CreateResonance(var/target, var/creator)
if(cooldown <= 0)
@@ -489,6 +496,9 @@
if(target in user.contents)
return
if(proximity_flag)
for(var/type in can_be_placed_into)
if(istype(target, type))
return
CreateResonance(target, user)
/obj/effect/resonance
+1 -2
View File
@@ -7,7 +7,6 @@
stat = DEAD
density = 0
canmove = 0
blinded = 0
anchored = 1 // don't get pushed around
invisibility = INVISIBILITY_OBSERVER
languages = ALL
@@ -310,4 +309,4 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
dat += "<h4>Crew Manifest</h4>"
dat += data_core.get_manifest()
src << browse(dat, "window=manifest;size=370x420;can_close=1")
src << browse(dat, "window=manifest;size=370x420;can_close=1")
@@ -113,10 +113,6 @@
/mob/living/carbon/alien/proc/handle_mutations_and_radiation()
if(getFireLoss())
if((COLD_RESISTANCE in mutations) || prob(5))
adjustFireLoss(-1)
// Aliens love radiation nom nom nom
if (radiation)
if (radiation > 100)
@@ -50,10 +50,15 @@
//Hunter verbs
/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap()
/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(var/message = 1)
leap_on_click = !leap_on_click
leap_icon.icon_state = "leap_[leap_on_click ? "on":"off"]"
src << "<span class='noticealien'>You will now [leap_on_click ? "leap at":"slash at"] enemies!</span>"
if(message)
src << "<span class='noticealien'>You will now [leap_on_click ? "leap at":"slash at"] enemies!</span>"
else
return
/mob/living/carbon/alien/humanoid/hunter/ClickOn(var/atom/A, var/params)
face_atom(A)
@@ -66,6 +71,10 @@
#define MAX_ALIEN_LEAP_DIST 7
/mob/living/carbon/alien/humanoid/hunter/proc/leap_at(var/atom/A)
if(pounce_cooldown)
src << "<span class='alertalien'>You are too fatigued to pounce right now!</span>"
return
if(leaping) //Leap while you leap, so you can leap while you leap
return
@@ -76,13 +85,14 @@
if(lying)
return
leaping = 1
update_icons()
throw_at(A,MAX_ALIEN_LEAP_DIST,1)
leaping = 0
update_icons()
else //Maybe uses plasma in the future, although that wouldn't make any sense...
leaping = 1
update_icons()
throw_at(A,MAX_ALIEN_LEAP_DIST,1)
leaping = 0
update_icons()
/mob/living/carbon/alien/humanoid/throw_impact(A)
/mob/living/carbon/alien/humanoid/hunter/throw_impact(A)
var/msg = ""
if(A)
@@ -92,6 +102,11 @@
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
toggle_leap(0)
pounce_cooldown = !pounce_cooldown
spawn(pounce_cooldown_time) //3s by default
pounce_cooldown = !pounce_cooldown
else
msg = "<span class ='alertalien'>[src] smashes into [A]!</span>"
weakened = 2
@@ -5,6 +5,8 @@
var/obj/item/l_store = null
var/caste = ""
var/leap_on_click = 0
var/pounce_cooldown = 0
var/pounce_cooldown_time = 30
update_icon = 1
//This is fine right now, if we're adding organ specific damage this needs to be updated
@@ -85,19 +87,22 @@
updatehealth()
return
/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
adjustBruteLoss(14 + rand(1,9))
Paralyse(1)
step_away(src,user,15)
sleep(1)
step_away(src,user,15)
return 1
/mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob)
if(..())
switch(M.a_intent)
if ("harm")
var/damage = rand(1, 9)
if (prob(90))
if (HULK in M.mutations)//HULK SMASH
damage += 14
spawn(0)
Paralyse(1)
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
"<span class='userdanger'>[M] has punched [src]!</span>")
@@ -38,14 +38,10 @@
//Chemicals in the body
handle_chemicals_in_body()
//Disabilities
handle_disabilities()
//Apparently, the person who wrote this code designed it so that
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
handle_environment(environment)
@@ -67,28 +63,6 @@
if(client)
handle_regular_hud_updates()
/mob/living/carbon/alien/humanoid/proc/handle_disabilities()
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 10))
src << "<span class='danger'>You have a seizure!</span>"
Paralyse(10)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
spawn( 0 )
emote("cough")
return
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
spawn( 0 )
emote("twitch")
return
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
/mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost)
var/temperature = current
var/difference = abs(current-loc_temp) //get difference
@@ -110,12 +84,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = 1
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = 1
stat = DEAD
silent = 0
return 1
@@ -131,11 +105,11 @@
if(paralysis)
AdjustParalysis(-1)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -149,16 +123,15 @@
move_delay_add = max(0, move_delay_add - rand(1, 2))
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -189,7 +162,7 @@
/mob/living/carbon/alien/humanoid/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -242,12 +215,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
if ((blinded))
if ((eye_blind))
blind.layer = 18
else
blind.layer = 0
if (disabilities & NEARSIGHTED)
if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
@@ -104,17 +104,21 @@
updatehealth()
return
/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
adjustBruteLoss(5 + rand(1,9))
Paralyse(1)
spawn()
step_away(src,user,15)
sleep(1)
step_away(src,user,15)
return 1
/mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/M as mob)
if(..())
var/damage = rand(1, 9)
if (prob(90))
if (HULK in M.mutations)
damage += 5
spawn(0)
Paralyse(1)
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
add_logs(M, src, "attacked", admin=0)
visible_message("<span class='danger'>[M] has kicked [src]!</span>", \
@@ -38,7 +38,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
handle_environment(enviroment)
@@ -64,12 +63,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(1, eye_blind)
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < -25 || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = max(1, eye_blind)
silent = 0
return 1
@@ -84,11 +83,11 @@
if(paralysis)
AdjustParalysis(-2)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -102,16 +101,15 @@
move_delay_add = max(0, move_delay_add - rand(1, 2))
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -138,7 +136,7 @@
/mob/living/carbon/alien/larva/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -191,12 +189,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
if ((blinded))
if ((eye_blind))
blind.layer = 18
else
blind.layer = 0
if (disabilities & NEARSIGHTED)
if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
+1 -1
View File
@@ -101,7 +101,7 @@
breath.toxins -= toxins_used
breath.oxygen += toxins_used
if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :(
if(breath.temperature > (T0C+66)) // Hot air hurts :(
if(prob(20))
src << "<span class='danger'>You feel a searing heat in your lungs!</span>"
fire_alert = max(fire_alert, 1)
+6 -9
View File
@@ -18,7 +18,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
if(environment) // More error checking
@@ -125,12 +124,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) )
death()
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
return 1
@@ -144,8 +143,7 @@
if(31 to INFINITY)
emp_damage = 30//Let's not overdo it
if(21 to 30)//High level of EMP damage, unable to see, hear, or speak
eye_blind = 1
blinded = 1
eye_blind = max(eye_blind, 1)
ear_deaf = 1
silent = 1
if(!alert)//Sounds an alarm, but only once per 'level'
@@ -156,7 +154,6 @@
emp_damage -= 1
if(20)
alert = 0
blinded = 0
eye_blind = 0
ear_deaf = 0
silent = 0
@@ -209,7 +206,7 @@
/mob/living/carbon/brain/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in src.mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -249,12 +246,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
if ((blinded))
if (eye_blind)
blind.layer = 18
else
blind.layer = 0
if (disabilities & NEARSIGHTED)
if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
+6 -1
View File
@@ -1,3 +1,8 @@
/mob/living/carbon/UnarmedAttack(var/atom/A, var/proximity_flag)
..()
for(var/datum/mutation/human/HM in dna.mutations)
. += HM.on_attack_hand(A, src)
/mob/living/carbon/prepare_huds()
..()
prepare_data_huds()
@@ -27,7 +32,7 @@
src.nutrition -= HUNGER_FACTOR/10
if(src.m_intent == "run")
src.nutrition -= HUNGER_FACTOR/10
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
if((src.disabilities & FAT) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2
/mob/living/carbon/movement_delay()
@@ -52,8 +52,8 @@
return 1
/mob/living/carbon/proc/ChangeToHusk()
if(HUSK in mutations) return
mutations.Add(HUSK)
if(disabilities & HUSK) return
disabilities |= HUSK
status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
return 1
@@ -305,7 +305,7 @@
if(href_list["criminal"])
if(istype(usr, /mob/living/carbon/human))
var/mob/living/carbon/human/H = usr
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
// Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
@@ -331,7 +331,7 @@
if(href_list["status"])
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
if(R)
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
if(setcriminal != "Cancel")
investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
R.fields["criminal"] = setcriminal
@@ -340,7 +340,7 @@
if(href_list["view"])
if(R)
if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
usr << "<b>Name:</b> [R.fields["name"]] <b>Criminal Status:</b> [R.fields["criminal"]]"
usr << "<b>Minor Crimes:</b>"
@@ -365,7 +365,7 @@
var/t1 = copytext(sanitize(input("Please input minor crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
var/t2 = copytext(sanitize(input("Please input minor crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
if(R)
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
data_core.addMinorCrime(R.fields["id"], crime)
@@ -376,7 +376,7 @@
var/t1 = copytext(sanitize(input("Please input major crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
var/t2 = copytext(sanitize(input("Please input major crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
if(R)
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
data_core.addMajorCrime(R.fields["id"], crime)
@@ -386,7 +386,7 @@
if(href_list["view_comment"])
if(R)
if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
usr << "<b>Comments/Log:</b>"
var/counter = 1
@@ -400,7 +400,7 @@
if(R)
var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
if(R)
if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security) || !istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
return
var/counter = 1
while(R.fields[text("com_[]", counter)])
@@ -1,3 +1,7 @@
/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user)
adjustBruteLoss(5)
Weaken(4)
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M)
if(..()) //to allow surgery to return properly.
return
@@ -44,18 +44,6 @@
else
heal_overall_damage(0, -amount)
/mob/living/carbon/human/Stun(amount)
if(HULK in mutations) return
..()
/mob/living/carbon/human/Weaken(amount)
if(HULK in mutations) return
..()
/mob/living/carbon/human/Paralyse(amount)
if(HULK in mutations) return
..()
mob/living/carbon/human/proc/hat_fall_prob()
var/multiplier = 1
var/obj/item/clothing/head/H = head
@@ -441,7 +441,6 @@ emp_act
update_damage_overlays(0)
updatehealth()
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[M.name] has hit [src]!</span>", \
"<span class='userdanger'>[M.name] has hit [src]!</span>")
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
+25 -53
View File
@@ -49,15 +49,19 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
tinttotal = tintcheck() //here as both hud updates and status updates call it
//TODO: seperate this out
var/datum/gas_mixture/environment = loc.return_air()
handle_regular_hud_updates()
//No need to update all of these procs if the guy is dead.
if(stat != DEAD)
for(var/datum/mutation/human/HM in dna.mutations)
HM.on_life(src)
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
breathe() //Only try to take a breath every 4 ticks, unless suffocating
@@ -97,8 +101,6 @@
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
handle_regular_hud_updates()
if(dna)
dna.species.spec_life(src) // for mutantraces
@@ -125,34 +127,6 @@
/mob/living/carbon/human/proc/handle_disabilities()
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 1))
src << "<span class='danger'>You have a seizure!</span>"
for(var/mob/O in viewers(src, null))
if(O == src)
continue
O.show_message(text("<span class='userdanger'>[src] starts having a seizure!</span>"), 1)
Paralyse(10)
Jitter(1000)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
emote("cough")
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
switch(rand(1, 3))
if(1)
emote("twitch")
if(2 to 3)
say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point.
var/y_offset = pixel_y + rand(-1,1)
animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1)
animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1)
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
if (getBrainLoss() >= 60 && stat != 2)
if (prob(3))
switch(pick(1,2,3))
@@ -335,7 +309,7 @@
/mob/living/carbon/human/proc/get_cold_protection(temperature)
if(COLD_RESISTANCE in mutations)
if(dna.check_mutation(COLDRES))
return 1 //Fully protected from the cold.
if(dna && COLDRES in dna.species.specflags)
@@ -437,13 +411,13 @@
/mob/living/carbon/human/proc/handle_regular_status_updates()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO
if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
return 1
@@ -460,11 +434,7 @@
adjustOxyLoss(1)*/
if(hallucination)
if(hallucination >= 20)
if(prob(3))
fake_attack(src)
if(!handling_hal)
spawn handle_hallucinations() //The not boring kind!
spawn handle_hallucinations()
if(hallucination<=2)
hallucination = 0
@@ -477,13 +447,13 @@
if(paralysis)
AdjustParalysis(-1)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
handle_dreams()
adjustStaminaLoss(-10)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health && !hal_crit )
spawn(0)
@@ -493,27 +463,29 @@
stat = CONSCIOUS
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster
eye_blurry = max(eye_blurry-3, 0)
// blinded = 1 //now handled under /handle_regular_hud_updates()
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(istype(ears, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster, and slowly heals deafness
ear_damage = max(ear_damage-0.15, 0)
ear_deaf = max(ear_deaf-1, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
ear_damage = max(ear_damage-0.05, 0)
else
/* might be better to create a variable here, and instead of doing this nested for. */
// deafness heals slowly over time, unless ear_damage is over 100
if (ear_damage < 100)
// Heal the first 1/3 here
ear_deaf = max(ear_deaf - 1, 0)
ear_damage = max(ear_damage-0.05, 0)
if(istype(ears, /obj/item/clothing/ears/earmuffs)) // earmuffs rest your ears, healing 3x faster, but keeping you deaf.
// Heal the 2/3 here
ear_deaf = max(ear_deaf, 1)
ear_damage = max(ear_damage-0.10, 0)
//Dizziness
if(dizziness)
+2 -2
View File
@@ -22,7 +22,7 @@
if(dna)
message = dna.species.handle_speech(message,src)
if ((HULK in mutations) && health >= 25 && length(message))
if (dna.check_mutation(HULK))
message = "[uppertext(replacetext(message, ".", "!"))]!!" //because I don't know how to code properly in getting vars from other files -Bro
if(viruses.len)
@@ -103,7 +103,7 @@
if (ears)
ears.talk_into(src, message, message_mode)
return ITALICS | REDUCE_RANGE
if(message_mode in radiochannels)
if(ears)
ears.talk_into(src, message, message_mode)
+11 -29
View File
@@ -68,7 +68,7 @@
///////////
/datum/species/proc/update_base_icon_state(var/mob/living/carbon/human/H)
if(HUSK in H.mutations)
if(H.disabilities & HUSK)
H.remove_overlay(SPECIES_LAYER) // races lose their color
return "husk"
else if(sexes)
@@ -392,10 +392,10 @@
if(H.reagents) H.reagents.metabolize(H)
//The fucking FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
if(FAT in H.mutations)
if(H.disabilities & FAT)
if(H.overeatduration < 100)
H << "<span class='notice'>You feel fit again!</span>"
H.mutations -= FAT
H.disabilities &= ~FAT
H.update_inv_w_uniform(0)
H.update_inv_wear_suit()
else
@@ -472,11 +472,6 @@
H.see_invisible = invis_sight
H.see_in_dark = darksight
if(XRAY in H.mutations)
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
H.see_in_dark = 8
H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
if(H.seer)
H.see_invisible = SEE_INVISIBLE_OBSERVER
@@ -502,16 +497,16 @@
if(H.tinttotal >= TINT_IMPAIR)
if(tinted_weldhelh)
if(H.tinttotal >= TINT_BLIND)
H.blinded = 1 // You get the sudden urge to learn to play keyboard
H.eye_blind = max(H.eye_blind, 1) // You get the sudden urge to learn to play keyboard
H.client.screen += global_hud.darkMask
else
H.client.screen += global_hud.darkMask
if(H.blind)
if(H.blinded) H.blind.layer = 18
if(H.eye_blind) H.blind.layer = 18
else H.blind.layer = 0
if( H.disabilities & NEARSIGHTED && !istype(H.glasses, /obj/item/clothing/glasses/regular) )
if( H.disabilities & NEARSIGHT && !istype(H.glasses, /obj/item/clothing/glasses/regular) )
H.client.screen += global_hud.vimpaired
if(H.eye_blurry) H.client.screen += global_hud.blurry
if(H.druggy) H.client.screen += global_hud.druggy
@@ -617,16 +612,6 @@
return 1
/datum/species/proc/handle_mutations_and_radiation(var/mob/living/carbon/human/H)
if(H.getFireLoss())
if((COLD_RESISTANCE in H.mutations) || (prob(1)))
H.heal_organ_damage(0,1)
if ((HULK in H.mutations) && H.health <= 25)
H.mutations.Remove(HULK)
H.update_mutations() //update our mutation overlays
H << "<span class='danger'>You suddenly feel very weak.</span>"
H.Weaken(3)
H.emote("collapse")
if (H.radiation && !(RADIMMUNE in specflags))
if (H.radiation > 100)
@@ -707,7 +692,7 @@
if(H.back && grav)
mspeed += H.back.slowdown
if(FAT in H.mutations && grav)
if((H.disabilities & FAT) && grav)
mspeed += 1.5
if(H.bodytemperature < 283.222 && grav)
mspeed += (283.222 - H.bodytemperature) / 10 * 1.75
@@ -787,9 +772,6 @@
var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = H.run_armor_check(affecting, "melee")
if(HULK in M.mutations)
damage += 5
if(M.dna)
playsound(H.loc, M.dna.species.attack_sound, 25, 1, -1)
else
@@ -1191,7 +1173,7 @@
return 1
/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in H.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
if( (abs(310.15 - breath.temperature) > 50) && !(mutations_list[COLDRES] in H.dna.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
if(breath.temperature < 260.15)
if(prob(20))
H << "<span class='danger'>You feel your face freezing and an icicle forming in your lungs!</span>"
@@ -1199,7 +1181,7 @@
if(prob(20))
H << "<span class='danger'>You feel your face burning and a searing heat in your lungs!</span>"
if(!(COLDRES in specflags)) // COLD DAMAGE
if(!(mutations_list[COLDRES] in H.dna.mutations)) // COLD DAMAGE
switch(breath.temperature)
if(-INFINITY to 120)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head")
@@ -1268,7 +1250,7 @@
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
H.fire_alert = max(H.fire_alert, 2)
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(COLDRES in specflags))
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(mutations_list[COLDRES] in H.dna.mutations))
H.fire_alert = max(H.fire_alert, 1)
if(!istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
switch(H.bodytemperature)
@@ -1301,7 +1283,7 @@
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
H.pressure_alert = -1
else
if((COLD_RESISTANCE in H.mutations) || (COLDRES in specflags))
if(H.dna.check_mutation(COLDRES) || (COLDRES in specflags))
H.pressure_alert = -1
else
H.adjustBruteLoss( LOW_PRESSURE_DAMAGE )
@@ -38,7 +38,7 @@
/datum/species/lizard/handle_speech(message)
// jesus christ why
if(copytext(message, 1, 2) != "*")
message = replacetext(message, "s", stutter("ss"))
message = replacetext(message, "s", "sss")
return message
@@ -94,6 +94,7 @@
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
name = "Podperson"
id = "pod"
specflags = list(MUTCOLORS,EYECOLOR)
/datum/species/plant/pod/spec_life(mob/living/carbon/human/H)
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
@@ -34,7 +34,6 @@ There are several things that need to be remembered:
> There are also these special cases:
update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows
update_damage_overlays() //handles damage overlays for brute/burn damage
update_base_icon_state() //Handles updating var/base_icon_state (WIP) This is used to update the
mob's icon_state easily e.g. "[base_icon_state]_s" is the standing icon_state
@@ -90,7 +89,7 @@ Please contact me on #coderbus IRC. ~Carnie x
if(dna)
base_icon_state = dna.species.update_base_icon_state(src)
else
if(HUSK in mutations)
if(disabilities & HUSK)
base_icon_state = "husk"
else
base_icon_state = "[skin_tone]_[(gender == FEMALE) ? "f" : "m"]"
@@ -146,7 +145,7 @@ Please contact me on #coderbus IRC. ~Carnie x
//Reset our hair
remove_overlay(HAIR_LAYER)
if( (HUSK in mutations) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) )
if( (disabilities & HUSK) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) )
return
if((wear_suit) && (wear_suit.hooded) && (wear_suit.suittoggled == 1))
@@ -155,30 +154,8 @@ Please contact me on #coderbus IRC. ~Carnie x
if(dna)
dna.species.handle_hair(src)
/mob/living/carbon/human/update_mutations()
remove_overlay(MUTATIONS_LAYER)
var/list/standing = list()
var/g = (gender == FEMALE) ? "f" : "m"
for(var/mut in mutations)
switch(mut)
if(HULK)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_[g]_s", "layer"=-MUTATIONS_LAYER)
if(COLD_RESISTANCE)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER)
if(TK)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER)
if(LASER)
standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes_s", "layer"=-MUTATIONS_LAYER)
if(standing.len)
overlays_standing[MUTATIONS_LAYER] = standing
apply_overlay(MUTATIONS_LAYER)
/mob/living/carbon/human/proc/update_mutcolor()
if(dna && !(HUSK in mutations))
if(dna && !(disabilities & HUSK))
dna.species.update_color(src)
/mob/living/carbon/human/proc/update_body()
@@ -237,7 +214,6 @@ Please contact me on #coderbus IRC. ~Carnie x
if(notransform) return
update_body()
update_hair()
update_mutations()
update_inv_w_uniform()
update_inv_wear_id()
update_inv_gloves()
+1 -1
View File
@@ -11,4 +11,4 @@
else
if (internals)
internals.icon_state = "internal0"
return
return
+20 -55
View File
@@ -46,7 +46,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
blinded = null
//Handle temperature/pressure differences between body and environment
if(environment) // More error checking -- TLE
@@ -78,42 +77,8 @@
/mob/living/carbon/monkey/proc/handle_disabilities()
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 10))
src << "<span class='danger'>You have a seizure!</span>"
Paralyse(10)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
spawn( 0 )
emote("cough")
return
if (disabilities & TOURETTES)
if ((prob(10) && paralysis <= 1))
Stun(10)
spawn( 0 )
emote("twitch")
return
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
/mob/living/carbon/monkey/proc/handle_mutations_and_radiation()
if(getFireLoss())
if((COLD_RESISTANCE in mutations) && prob(50))
switch(getFireLoss())
if(1 to 50)
adjustFireLoss(-1)
if(51 to 100)
adjustFireLoss(-5)
if ((HULK in mutations) && health <= 25)
mutations.Remove(HULK)
src << "<span class='danger'>You suddenly feel very weak.</span>"
Weaken(3)
emote("collapse")
if (radiation)
if (radiation > 100)
radiation = 100
@@ -339,11 +304,8 @@
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
pressure_alert = -1
else
if( !(COLD_RESISTANCE in mutations) )
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
pressure_alert = -2
else
pressure_alert = -1
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
pressure_alert = -2
return
@@ -384,12 +346,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
blinded = 1
eye_blind = max(eye_blind, 1)
stat = DEAD
silent = 0
return 1
@@ -405,11 +367,11 @@
if(paralysis)
AdjustParalysis(-1)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -419,21 +381,24 @@
stat = CONSCIOUS
//Eyes
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
eye_blind = max(eye_blind, 1)
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
ear_damage = max(ear_damage-0.05, 0)
else
/* might be better to create a variable here, and instead of doing this nested for. */
// deafness heals slowly over time, unless ear_damage is over 100
if (ear_damage < 100)
// Heal the first 1/3 here
ear_deaf = max(ear_deaf - 1, 0)
ear_damage = max(ear_damage-0.05, 0)
//Other
if(stunned)
@@ -457,7 +422,7 @@
/mob/living/carbon/monkey/proc/handle_regular_hud_updates()
if (stat == 2 || (XRAY in mutations))
if (stat == 2)
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -532,12 +497,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if(blind && stat != DEAD)
if(blinded)
if(eye_blind)
blind.layer = 18
else
blind.layer = 0
if(disabilities & NEARSIGHTED)
if(disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if(eye_blurry)
+6 -7
View File
@@ -33,7 +33,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
src.blinded = null
if(environment)
handle_environment(environment) // Handle temperature/pressure differences between body and environment
@@ -210,7 +209,7 @@
if (src.stat == DEAD)
src.lying = 1
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
else
if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc.
if (src.stunned > 0)
@@ -222,7 +221,7 @@
src.stat = 0
if (src.paralysis > 0)
AdjustParalysis(-1)
src.blinded = 0
src.eye_blind = 0
src.lying = 0
src.stat = 0
@@ -234,7 +233,7 @@
if (src.eye_blind)
src.eye_blind = 0
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
if (src.ear_deaf > 0) src.ear_deaf = 0
if (src.ear_damage < 25)
@@ -242,9 +241,9 @@
src.density = !( src.lying )
if (src.sdisabilities & BLIND)
src.blinded = 1
if (src.sdisabilities & DEAF)
if (src.disabilities & BLIND)
src.eye_blind = max(eye_blind, 1)
if (src.disabilities & DEAF)
src.ear_deaf = 1
if (src.eye_blurry > 0)
+14 -14
View File
@@ -250,6 +250,20 @@
adjustBruteLoss(damage)
updatehealth()
/mob/living/carbon/slime/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
adjustBruteLoss(5)
if(Victim || Target)
Victim = null
Target = null
anchored = 0
if(prob(80) && !client)
Discipline++
spawn(0)
step_away(src,user,15)
sleep(3)
step_away(src,user,15)
/mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob)
if(Victim)
@@ -319,20 +333,6 @@
var/damage = rand(1, 9)
attacked += 10
if (prob(90))
if (HULK in M.mutations)
damage += 5
if(Victim || Target)
Victim = null
Target = null
anchored = 0
if(prob(80) && !client)
Discipline++
spawn(0)
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
add_logs(M, src, "attacked", admin=0)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
+2 -3
View File
@@ -15,7 +15,6 @@
if(BRUTE)
adjustBruteLoss(damage * blocked)
if(BURN)
if(COLD_RESISTANCE in mutations) damage = 0
adjustFireLoss(damage * blocked)
if(TOX)
adjustToxLoss(damage * blocked)
@@ -52,7 +51,7 @@
if(PARALYZE)
Paralyse(effect * blocked)
if(IRRADIATE)
radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm", "Your clothes feel warm"))/100),0)//Rads auto check armor
radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm."))/100),0)//Rads auto check armor
if(STUTTER)
if(status_flags & CANSTUN) // stun is usually associated with stutter
stuttering = max(stuttering,(effect * blocked))
@@ -75,6 +74,6 @@
if(stutter) apply_effect(stutter, STUTTER, blocked)
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
if(stamina) apply_effect(stamina, STAMINA, blocked)
if(stamina) apply_damage(stamina, STAMINA, null, blocked)
if(jitter) apply_effect(jitter, JITTER, blocked)
return 1
+2 -1
View File
@@ -267,7 +267,8 @@
for(var/mob/M in dead_mob_list)
if(!M.client || istype(M, /mob/new_player))
continue //skip monkeys, leavers and new players
if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
var/T = get_turf(src)
if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null)))
M.show_message(message)
+9 -10
View File
@@ -136,7 +136,7 @@
/mob/living/ex_act(severity, target)
..()
if(client && !blinded)
if(client && !eye_blind)
flick("flash", src.flash)
/mob/living/proc/updatehealth()
@@ -157,8 +157,6 @@
/mob/living/proc/burn_skin(burn_amount)
if(istype(src, /mob/living/carbon/human))
//world << "DEBUG: burn_skin(), mutations=[mutations]"
if (COLD_RESISTANCE in src.mutations) //fireproof
return 0
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
var/extradam = 0 //added to when organ is at max dam
@@ -169,8 +167,6 @@
H.updatehealth()
return 1
else if(istype(src, /mob/living/carbon/monkey))
if (COLD_RESISTANCE in src.mutations) //fireproof
return 0
var/mob/living/carbon/monkey/M = src
M.adjustFireLoss(burn_amount)
M.updatehealth()
@@ -380,9 +376,7 @@
radiation = 0
nutrition = NUTRITION_LEVEL_FED + 50
bodytemperature = 310
sdisabilities = 0
disabilities = 0
blinded = 0
eye_blind = 0
eye_blurry = 0
ear_deaf = 0
@@ -530,7 +524,7 @@
/mob/living/proc/cuff_break(obj/item/weapon/restraints/I, mob/living/carbon/C)
if(HULK in usr.mutations)
if(C.dna.check_mutation(HULK))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
C.visible_message("<span class='danger'>[C] manages to break [I]!</span>")
@@ -557,7 +551,7 @@
breakouttime = LC.breakouttime
displaytime = breakouttime / 600
if(isalienadult(C) || HULK in usr.mutations)
if(isalienadult(C) || C.dna.check_mutation(HULK))
C.visible_message("<span class='warning'>[C] is trying to break [I]!</span>")
C << "<span class='notice'>You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)</span>"
spawn(0)
@@ -769,7 +763,8 @@
gib()
return
/mob/living/proc/do_attack_animation(atom/A)
/atom/movable/proc/do_attack_animation(atom/A)
var/pixel_x_diff = 0
var/pixel_y_diff = 0
var/direction = get_dir(src, A)
@@ -796,4 +791,8 @@
pixel_y_diff = -8
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2)
/mob/living/do_attack_animation(atom/A)
..()
floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
+5 -4
View File
@@ -86,14 +86,12 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
else
return
updatehealth()
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[M.name] has hit [src]!</span>", \
"<span class='userdanger'>[M.name] has hit [src]!</span>")
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
else
step_away(src,M)
add_logs(M.occupant, src, "pushed", object=M, admin=0)
M.occupant_message("<span class='warning'>You push [src] out of the way.</span>")
visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>")
return
@@ -196,7 +194,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
/mob/living/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("me", 1, "[M.friendly] [src]")
M.visible_message("<span class='notice'>\The [M] [M.friendly] [src]!</span>")
return 0
else
if(M.attack_sound)
@@ -217,7 +215,10 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
M << "No attacking people at spawn, you jackass."
return 0
if (M.a_intent == "harm" && !M.is_muzzled())
if (M.a_intent == "harm")
if(M.is_muzzled() || (M.wear_mask && M.wear_mask.flags & MASKCOVERSMOUTH))
M << "<span class='warning'>You can't bite with your mouth covered!</span>"
return 0
M.do_attack_animation(src)
if (prob(75))
add_logs(M, src, "attacked", admin=0)
+1 -1
View File
@@ -210,7 +210,7 @@ var/list/department_radio_keys = list(
if(!message)
return 0
if(sdisabilities & MUTE)
if(disabilities & MUTE)
return 0
if(is_muzzled())
@@ -18,9 +18,3 @@
stat = CONSCIOUS
return
health = maxHealth - getBruteLoss() - getFireLoss()
/mob/living/silicon/pai/proc/follow_pai()
while(card)
loc = get_turf(card)
sleep(5)
qdel(src) //if there's no pAI we shouldn't exist
+1 -3
View File
@@ -4,7 +4,6 @@
mouse_opacity = 0
density = 0
mob_size = 0
invisibility = 101
var/network = "SS13"
var/obj/machinery/camera/current = null
@@ -51,7 +50,7 @@
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
make_laws()
canmove = 0
src.loc = get_turf(paicard)
src.loc = paicard
card = paicard
sradio = new(src)
if(card)
@@ -66,7 +65,6 @@
pda.owner = text("[]", src)
pda.name = pda.owner + " (" + pda.ownjob + ")"
follow_pai()
..()
/mob/living/silicon/pai/make_laws()
+10 -15
View File
@@ -5,9 +5,6 @@
if (src.notransform)
return
src.blinded = null
//Status updates, death etc.
clamp_values()
handle_regular_status_updates()
@@ -50,7 +47,7 @@
if(src.module_state_3)
src.cell.use(5)
src.cell.use(1)
src.blinded = 0
src.eye_blind = 0
src.stat = 0
else
uneq_all()
@@ -98,22 +95,20 @@
AdjustWeakened(-1)
if (src.paralysis > 0)
AdjustParalysis(-1)
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
else
src.blinded = 0
src.eye_blind = 0
else //Not stunned.
src.stat = 0
else //Dead.
src.blinded = 1
src.stat = 2
src.eye_blind = 1
if (src.stuttering) src.stuttering--
if (src.eye_blind)
src.eye_blind--
src.blinded = 1
if (src.ear_deaf > 0) src.ear_deaf--
if (src.ear_damage < 25)
@@ -122,9 +117,9 @@
src.density = !( src.lying )
if ((src.sdisabilities & BLIND))
src.blinded = 1
if ((src.sdisabilities & DEAF))
if (src.disabilities & BLIND)
src.eye_blind = max(1, eye_blind)
if (src.disabilities & DEAF)
src.ear_deaf = 1
if (src.eye_blurry > 0)
@@ -139,7 +134,7 @@
/mob/living/silicon/robot/proc/handle_regular_hud_updates()
if (src.stat == 2 || XRAY in mutations || src.sight_mode & BORGXRAY)
if (src.stat == 2 || src.sight_mode & BORGXRAY)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
@@ -241,11 +236,11 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((src.blind && src.stat != 2))
if(src.blinded)
if(src.eye_blind)
src.blind.layer = 18
else
src.blind.layer = 0
if (src.disabilities & NEARSIGHTED)
if (src.disabilities & NEARSIGHT)
src.client.screen += global_hud.vimpaired
if (src.eye_blurry)
+12 -10
View File
@@ -2,6 +2,7 @@
gender = NEUTER
voice_name = "synthesized voice"
languages = ROBOT | HUMAN
has_unlimited_silicon_privilege = 1
var/syndicate = 0
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/list/alarms_to_show = list()
@@ -384,6 +385,16 @@
visible_message("<span class='notice'>[L.name] rubs its head against [src].</span>")
return
/mob/living/silicon/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
adjustBruteLoss(rand(10, 15))
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[user] has punched [src]!</span>", \
"<span class='userdanger'>[user] has punched [src]!</span>")
return 1
return 0
/mob/living/silicon/attack_hand(mob/living/carbon/human/M)
switch(M.a_intent)
if ("help")
@@ -394,15 +405,6 @@
else
M.do_attack_animation(src)
playsound(src.loc, 'sound/effects/bang.ogg', 10, 1)
if (HULK in M.mutations)
var/damage = rand(10,15)
adjustBruteLoss(damage)
add_logs(M, src, "attacked", admin=0)
playsound(loc, "punch", 25, 1, -1)
visible_message("<span class='danger'>[M] has punched [src]!</span>", \
"<span class='userdanger'>[M] has punched [src]!</span>")
return 1
else
visible_message("<span class='danger'>[M] punches [src], but doesn't leave a dent.</span>", \
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>")
return 0
@@ -41,64 +41,4 @@
desc = "It's Coffee, the other pet!"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
//LOOK AT THIS - ..()??
/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/wirecutters))
if(prob(50))
user << "\red \b This kills the crab."
health -= 20
Die()
else
GetMad()
get
if(istype(O, /obj/item/stack/medical))
if(stat != DEAD)
var/obj/item/stack/medical/MED = O
if(health < maxHealth)
if(MED.amount >= 1)
health = min(maxHealth, health + MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] applies [MED] on [src]")
else
user << "\blue this crab is dead, medical items won't bring it back to life."
else
if(O.force)
health -= O.force
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with [O] by [user]. ")
else
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with [O]. ")
/mob/living/simple_animal/crab/GetMad()
name = "MEGAMADCRAB"
real_name = "MEGAMADCRAB"
desc = "OH NO YOU DUN IT NOW."
icon = 'icons/mob/mob.dmi'
icon_state = "madcrab"
icon_living = "madcrab"
icon_dead = "madcrab_dead"
speak_emote = list("clicks")
emote_hear = list("clicks with fury", "clicks angrily")
emote_see = list("clacks")
speak_chance = 1
turns_per_move = 15//Gotta go fast
maxHealth = 100//So they don't die as quickly
health = 100
melee_damage_lower = 3
melee_damage_upper = 10//Kill them. Kill them all
if(inventory_head)//Drops inventory so it doesn't have to be dealt with
inventory_head.loc = src.loc
inventory_head = null
if(inventory_mask)
inventory_mask.loc = src.loc
inventory_mask = null*/
response_harm = "stomps"
@@ -30,6 +30,7 @@
voice_name = "synthesized chirp"
languages = DRONE
mob_size = 0
has_unlimited_silicon_privilege = 1
var/picked = FALSE
var/list/drone_overlays[TOTAL_LAYERS]
var/laws = \
@@ -47,9 +47,9 @@ F
emote("me", 1, "nashes at [.]!")
/mob/living/simple_animal/hostile/carp/AttackingTarget()
. =..()
var/mob/living/carbon/L = .
if(istype(L))
..()
if(isliving(target))
var/mob/living/L = target
if(prob(15))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
@@ -40,9 +40,9 @@
emote("me", 1, "wails at [.]!")
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
. =..()
var/mob/living/L = .
if(istype(L))
..()
if(isliving(target))
var/mob/living/L = target
if(prob(12))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
L.visible_message("<span class='danger'>\The [src] knocks down \the [L]!</span>")
@@ -311,5 +311,6 @@
/mob/living/simple_animal/hostile/RangedAttack(var/atom/A, var/params) //Player firing
if(ranged && ranged_cooldown <= 0)
target = A
OpenFire(A)
..()
@@ -206,13 +206,13 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
..()
/mob/living/simple_animal/hostile/mimic/copy/AttackingTarget()
. =..()
..()
if(knockdown_people)
var/mob/living/L = .
if(istype(L))
if(isliving(target))
var/mob/living/L = target
if(prob(15))
L.Weaken(1)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
L.visible_message("<span class='danger'>\The [src] knocks down \the [L]!</span>")
//
// Machine Mimics (Made by Malf AI)
@@ -24,6 +24,7 @@
mouse_opacity = 1
speed = 1
ventcrawler = 2
robust_searching = 1
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
@@ -88,7 +88,11 @@
GiveTarget(watching)
/mob/living/simple_animal/hostile/statue/AttackingTarget()
if(!can_be_seen())
if(can_be_seen())
if(client)
src << "<span class='warning'>You cannot attack, there are eyes on you!</span>"
return
else
..()
/mob/living/simple_animal/hostile/statue/DestroySurroundings()
@@ -99,13 +103,6 @@
if(!can_be_seen())
..()
/mob/living/simple_animal/hostile/statue/UnarmedAttack()
if(can_be_seen())
if(client)
src << "<span class='warning'>You cannot attack, there are eyes on you!</span>"
return
..()
/mob/living/simple_animal/hostile/statue/proc/can_be_seen(var/turf/destination)
if(!cannot_be_seen)
return null
@@ -127,7 +124,7 @@
for(var/atom/check in check_list)
for(var/mob/living/M in viewers(world.view + 1, check) - src)
if(M.client && CanAttack(M) && !issilicon(M))
if(!M.blinded && !(sdisabilities & BLIND))
if(!M.eye_blind)
return M
return null
@@ -43,12 +43,12 @@
emote("me", 1, "growls at [.].")
/mob/living/simple_animal/hostile/tree/AttackingTarget()
. =..()
var/mob/living/L = .
if(istype(L))
..()
if(isliving(target))
var/mob/living/L = target
if(prob(15))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
L.visible_message("<span class='danger'>\The [src] knocks down \the [L]!</span>")
/mob/living/simple_animal/hostile/tree/Die()
..()
+34 -11
View File
@@ -54,19 +54,19 @@ var/next_mob_id = 0
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
if (type)
if(type & 1 && (sdisabilities & BLIND || blinded || paralysis) )//Vision related
if(type & 1 && (disabilities & BLIND || paralysis) )//Vision related
if (!( alt ))
return
else
msg = alt
type = alt_type
if (type & 2 && (sdisabilities & DEAF || ear_deaf))//Hearing related
if (type & 2 && ear_deaf)//Hearing related
if (!( alt ))
return
else
msg = alt
type = alt_type
if ((type & 1 && sdisabilities & BLIND))
if ((type & 1 && disabilities & BLIND))
return
// Added voice muffling for Issue 41.
if(stat == UNCONSCIOUS || sleeping > 0)
@@ -75,28 +75,52 @@ var/next_mob_id = 0
src << msg
return
// Show a message to all mobs in sight of this one
// Show a message to all mobs who sees the src mob and the src mob itself
// This would be for visible actions by the src mob
// message is the message output to anyone who can see e.g. "[src] does something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/mob/visible_message(var/message, var/self_message, var/blind_message)
for(var/mob/M in viewers(src))
var/list/atom_viewers = list()
for(var/atom/movable/A in view(src))
atom_viewers |= recursive_hear_check(A)
atom_viewers |= src
for(var/mob/M in atom_viewers)
if(M.see_invisible < invisibility)
continue //can't view the invisible
var/msg = message
if(self_message && M==src)
msg = self_message
M.show_message( msg, 1, blind_message, 2)
M.show_message( msg, 1)
if(blind_message)
var/list/atom_hearers = list()
for(var/atom/movable/O in get_hearers_in_view(7, src))
if(O in atom_viewers)
continue
atom_hearers |= O
for(var/mob/MOB in atom_hearers)
MOB.show_message(blind_message, 2)
// Show a message to all mobs in sight of this atom
// Show a message to all mobs who sees this atom
// Use for objects performing visible actions
// message is output to anyone who can see, e.g. "The [src] does something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/atom/proc/visible_message(var/message, var/blind_message)
for(var/mob/M in viewers(src))
M.show_message( message, 1, blind_message, 2)
var/list/atom_viewers = list()
for(var/atom/movable/A in view(src))
atom_viewers |= recursive_hear_check(A)
for(var/mob/M in atom_viewers)
M.show_message( message, 1)
if(blind_message)
var/list/atom_hearers = list()
for(var/atom/movable/O in get_hearers_in_view(7, src))
if(O in atom_viewers)
continue
atom_hearers |= O
for(var/mob/MOB in atom_hearers)
MOB.show_message(blind_message, 2)
// Show a message to all mobs in earshot of this one
// This would be for audible actions by the src mob
@@ -289,7 +313,6 @@ var/list/slot_equipment_priority = list( \
set name = "Examine"
set category = "IC"
// if( (sdisabilities & BLIND || blinded || stat) && !istype(src,/mob/dead/observer) )
if(is_blind(src))
src << "<span class='notice'>Something is there but you can't see it.</span>"
return
+2 -2
View File
@@ -42,7 +42,6 @@
var/obj/machinery/machine = null
var/other_mobs = null
var/memory = ""
var/sdisabilities = 0 //Carbon
var/disabilities = 0 //Carbon
var/atom/movable/pulling = null
var/next_move = null
@@ -54,7 +53,6 @@
var/ear_damage = null //Carbon
var/stuttering = null //Carbon
var/real_name = null
var/blinded = null
var/bhunger = 0 //Carbon
var/ajourn = 0
var/druggy = 0 //Carbon
@@ -155,6 +153,8 @@
var/digitalcamo = 0 // Can they be tracked by the AI?
var/has_unlimited_silicon_privilege = 0 // Can they interact with station electronics
var/list/radar_blips = list() // list of screen objects, radar blips
var/radar_open = 0 // nonzero is radar is open
+1 -1
View File
@@ -201,7 +201,7 @@
return
if(M == assailant && state >= GRAB_AGGRESSIVE)
if( (ishuman(user) && (FAT in user.mutations) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
if( (ishuman(user) && (user.disabilities & FAT) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
var/mob/living/carbon/attacker = user
user.visible_message("<span class='danger'>[user] is attempting to devour [affecting]!</span>")
if(istype(user, /mob/living/carbon/alien/humanoid/hunter))
+3 -4
View File
@@ -371,10 +371,9 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
hud_used.action_intent.icon_state = "help"
proc/is_blind(A)
if(istype(A, /mob/living/carbon))
var/mob/living/carbon/C = A
if(C.blinded != null)
return 1
if(ismob(A))
var/mob/B = A
return B.eye_blind
return 0
proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this.
+37 -17
View File
@@ -20,17 +20,14 @@
stunned = 1
icon = null
invisibility = 101
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc )
O.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("h2monkey", animation)
sleep(22)
//animation = null
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc )
qdel(animation)
// hash the original name?
if (tr_flags & TR_HASHNAME)
@@ -77,13 +74,22 @@
O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
if (tr_flags & TR_DEFAULTMSG)
O << "<B>You are now a monkey.</B>"
for(var/A in loc.vars)
if(loc.vars[A] == src)
loc.vars[A] = O
updateappearance(O)
. = O
if ( !(tr_flags & TR_KEEPSRC) ) //flag should be used if monkeyize() is called inside another proc of src so that one does not crash
qdel(src)
return
var/mob/deleted = src
src = O
qdel(deleted)
spawn(22)
//animation = null
O.invisibility = 0
qdel(animation)
////////////////////////// Humanize //////////////////////////////
//Could probably be merged with monkeyize but other transformations got their own procs, too
@@ -120,17 +126,13 @@
stunned = 1
icon = null
invisibility = 101
var/atom/movable/overlay/animation = new( loc )
var/mob/living/carbon/human/O = new( loc )
O.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("monkey2h", animation)
sleep(22)
var/mob/living/carbon/human/O = new( loc )
for(var/obj/item/C in O.loc)
O.equip_to_appropriate_slot(C)
qdel(animation)
O.gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE
O.dna = dna
@@ -185,10 +187,28 @@
O.a_intent = "help"
if (tr_flags & TR_DEFAULTMSG)
O << "<B>You are now a human.</B>"
for(var/obj/item/C in O.loc)
O.equip_to_appropriate_slot(C)
updateappearance(O)
. = O
for(var/A in loc.vars)
if(loc.vars[A] == src)
loc.vars[A] = O
if ( !(tr_flags & TR_KEEPSRC) ) //don't delete src yet if it's needed to finish calling proc
qdel(src)
var/mob/deleted = src
src = O
qdel(deleted)
spawn(22)
O.invisibility = 0
for(var/obj/item/C in O.loc)
O.equip_to_appropriate_slot(C)
qdel(animation)
return
/mob/new_player/AIize()
-3
View File
@@ -46,9 +46,6 @@
/mob/proc/update_inv_gloves()
return
/mob/proc/update_mutations()
return
/mob/proc/update_inv_wear_id()
return
+9 -5
View File
@@ -68,9 +68,13 @@
if(usr.stat || !usr.canmove || usr.restrained())
return
if((CLUMSY in usr.mutations) && prob(25))
usr << "<span class='warning'>You cut yourself on the paper! Ahhhh! Ahhhhh!</span>"
usr.damageoverlaytemp = 9001
if(!ishuman(usr))
return
var/mob/living/carbon/human/H = usr
if(H.disabilities & CLUMSY && prob(25))
H << "<span class='warning'>You cut yourself on the paper! Ahhhh! Ahhhhh!</span>"
H.damageoverlaytemp = 9001
return
var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text), 1, MAX_NAME_LEN)
if((loc == usr && usr.stat == 0))
@@ -263,14 +267,14 @@
update_icon()
/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/user)
/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/living/carbon/human/user)
..()
if(is_blind(user))
return
var/clown = 0
if(user && (CLUMSY in user.mutations))
if(user.disabilities & CLUMSY)
clown = 1
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
+6 -20
View File
@@ -489,22 +489,8 @@
make_terminal()
terminal.connect_to_network()
else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2)
if (src.loc:intact)
user << "<span class='warning'>You must remove the floor plating in front of the APC first.</span>"
return
user.visible_message("<span class='warning'>[user.name] dismantles the power terminal from [src].</span>", \
"You begin to cut the cables...")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if(terminal && opened && has_electronics!=2)
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
new /obj/item/stack/cable_coil(loc,10)
user << "<span class='notice'>You cut the cables and dismantle the power terminal.</span>"
qdel(terminal)
terminal.dismantle(user)
else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
user.visible_message("<span class='warning'>[user.name] inserts the power control board into [src].</span>", \
"You start to insert the power control board into the frame...")
@@ -690,7 +676,7 @@
"chargingStatus" = charging,
"totalLoad" = lastused_equip + lastused_light + lastused_environ,
"coverLocked" = coverlocked,
"siliconUser" = istype(user, /mob/living/silicon),
"siliconUser" = user.has_unlimited_silicon_privilege,
"malfStatus" = get_malf_status(user),
"powerChannels" = list(
@@ -778,7 +764,7 @@
if(user.lying)
user << "<span class='warning'>You must stand to use [src]!</span>"
return 0
if (istype(user, /mob/living/silicon))
if(user.has_unlimited_silicon_privilege)
var/mob/living/silicon/ai/AI = user
var/mob/living/silicon/robot/robot = user
if ( \
@@ -844,7 +830,7 @@
update()
else if (href_list["overload"])
if(istype(usr, /mob/living/silicon))
if(usr.has_unlimited_silicon_privilege)
src.overload_lighting()
else if (href_list["malfhack"])
@@ -881,7 +867,7 @@
malfvacate()
else if (href_list["toggleaccess"])
if(istype(usr, /mob/living/silicon))
if(usr.has_unlimited_silicon_privilege)
if(emagged || (stat & (BROKEN|MAINT)))
usr << "The APC does not respond to the command."
else
+17 -10
View File
@@ -622,37 +622,41 @@ obj/structure/cable/proc/avail()
var/path = "/obj/structure/cable" + (item_color == "red" ? "" : "/" + item_color)
return new path (location)
// called when cable_coil is clicked on a turf/simulated/floor
/obj/item/stack/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user)
// called when cable_coil is clicked on a turf
/obj/item/stack/cable_coil/proc/place_turf(turf/T, mob/user)
if(!isturf(user.loc))
return
if(!T.cancable)
user << "You can only lay cables on catwalks and plating!"
return
if(get_amount() < 1) // Out of cable
user << "There is no cable left."
return
if(get_dist(F,user) > 1) // Too far
if(get_dist(T,user) > 1) // Too far
user << "You can't lay cable at a place that far away."
return
if(F.intact) // Ff floor is intact, complain
if(T.intact) // Ff floor is intact, complain
user << "You can't lay cable there unless the floor tiles are removed."
return
else
var/dirn
if(user.loc == F)
if(user.loc == T)
dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing
else
dirn = get_dir(F, user)
dirn = get_dir(T, user)
for(var/obj/structure/cable/LC in F)
for(var/obj/structure/cable/LC in T)
if(LC.d2 == dirn && LC.d1 == 0)
user << "There's already a cable at that position."
return
var/obj/structure/cable/C = get_new_cable (F)
var/obj/structure/cable/C = get_new_cable(T)
//set up the new cable
C.d1 = 0 //it's a O-X node cable
@@ -695,14 +699,17 @@ obj/structure/cable/proc/avail()
if(U == T) //if clicked on the turf we're standing on, try to put a cable in the direction we're facing
turf_place(T,user)
place_turf(T,user)
return
var/dirn = get_dir(C, user)
// one end of the clicked cable is pointing towards us
if(C.d1 == dirn || C.d2 == dirn)
if(U.intact) // can't place a cable if the floor is complete
if(!U.cancable) //checking if it's a plating or catwalk
user << "You can only lay cables on catwalks and plating!"
return
if(U.intact) //can't place a cable if it's a plating with a tile on it
user << "You can't lay cable there unless the floor tiles are removed."
return
else
+1 -1
View File
@@ -321,7 +321,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1)
updateDialog()
if(prob(25)) // To help stop "Your clothes feel warm" spam.
if(prob(25)) // To help stop "Your clothes feel warm." spam.
pulse_radiation()
var/overlay_state = null
+5 -3
View File
@@ -370,6 +370,8 @@
else if(status != LIGHT_BROKEN && status != LIGHT_EMPTY)
user.do_attack_animation(src)
if(W.damtype == STAMINA)
return
if(prob(1+W.force * 5))
user.visible_message("<span class='danger'>[user.name] smashed the light!</span>", \
@@ -467,7 +469,7 @@
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player
/obj/machinery/light/attack_hand(mob/user)
/obj/machinery/light/attack_hand(mob/living/carbon/human/user)
add_fingerprint(user)
@@ -489,9 +491,9 @@
else
prot = 1
if(prot > 0 || (COLD_RESISTANCE in user.mutations))
if(prot > 0)
user << "You remove the light [fitting]"
else if(TK in user.mutations)
else if(istype(user) && user.dna.check_mutation(TK))
user << "You telekinetically remove the light [fitting]."
else
user << "You try to remove the light [fitting], but you burn your hand on it!"
+1 -1
View File
@@ -128,7 +128,7 @@
if(get_dist(src, user) > 1)
return
coil.turf_place(T, user)
coil.place_turf(T, user)
return
else
..()
+1 -23
View File
@@ -142,29 +142,7 @@
//disassembling the terminal
if(istype(I, /obj/item/weapon/wirecutters) && terminal && panel_open)
var/turf/T = get_turf(terminal)
if (T.intact) //is the floor plating removed ?
user << "<span class='alert'>You must first expose the power terminal!</span>"
return
user << "You begin to dismantle the power terminal..."
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
return
//give the wires back and delete the terminal
new /obj/item/stack/cable_coil(T,10)
user.visible_message(\
"<span class='alert'>[user.name] cuts the cables and dismantles the power terminal.</span>",\
"You cut the cables and dismantle the power terminal.")
inputting = 0 //stop inputting, since we have don't have a terminal anymore
qdel(terminal)
return
terminal.dismantle(user)
//crowbarring it !
default_deconstruction_crowbar(I)
+12 -6
View File
@@ -177,10 +177,10 @@
for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them.
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / min(1, get_dist(l, src)) ) ) )
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1, get_dist(l, src)) ) ) )
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
var/rads = (power / 10) * sqrt( 1 / min(get_dist(l, src),1) )
var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) )
l.apply_effect(rads, IRRADIATE)
power -= (power/500)**3
@@ -220,7 +220,9 @@
/obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob)
user << "<span class = \"warning\">You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update.</span>"
/obj/machinery/power/supermatter_shard/attack_hand(mob/user as mob)
/obj/machinery/power/supermatter_shard/attack_hand(mob/living/user as mob)
if(!istype(user))
return
user.visible_message("<span class=\"warning\">\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.</span>",\
"<span class=\"danger\">You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"</span>",\
"<span class=\"warning\">You hear an unearthly noise as a wave of heat washes over you.</span>")
@@ -235,7 +237,9 @@
R.receive_pulse(power/10)
return
/obj/machinery/power/supermatter_shard/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
/obj/machinery/power/supermatter_shard/attackby(obj/item/W as obj, mob/living/user as mob)
if(!istype(W) || (W.flags & ABSTRACT) || !istype(user))
return
if(user.drop_item(W))
Consume(W)
user.visible_message("<span class=\"warning\">As [user] touches \the [src] with \a [W], silence fills the room...</span>",\
@@ -252,9 +256,11 @@
AM.visible_message("<span class=\"warning\">\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
"<span class=\"danger\">You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
"<span class=\"warning\">You hear an unearthly noise as a wave of heat washes over you.</span>")
else
else if(isobj(AM) && !istype(AM, /obj/effect))
AM.visible_message("<span class=\"warning\">\The [AM] smacks into \the [src] and rapidly flashes to ash.</span>",\
"<span class=\"warning\">You hear a loud crack as you are washed with a wave of heat.</span>")
else
return
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
@@ -267,7 +273,7 @@
user.dust()
power += 200
message_admins("[src] has consumed [key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>(JMP)</a>.")
else
else if(isobj(AM) && !istype(AM, /obj/effect))
qdel(AM)
investigate_log("has consumed [AM].", "supermatter")
+45
View File
@@ -33,3 +33,48 @@
invisibility = 0
icon_state = "term"
/obj/machinery/power/proc/can_terminal_dismantle()
. = 0
/obj/machinery/power/apc/can_terminal_dismantle()
. = 0
if(opened && has_electronics != 2)
. = 1
/obj/machinery/power/smes/can_terminal_dismantle()
. = 0
if(panel_open)
. = 1
/obj/machinery/power/terminal/proc/dismantle(var/mob/living/user)
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
if(T.intact)
user << "<span class='alert'>You must first expose the power terminal!</span>"
return
if(master && master.can_terminal_dismantle())
user.visible_message("<span class='warning'>[user.name] dismantles the power terminal from [master].</span>", \
"You begin to cut the cables...")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if(master && master.can_terminal_dismantle())
if(prob(50) && electrocute_mob(user, powernet, src))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, master)
s.start()
return
new /obj/item/stack/cable_coil(loc, 10)
user << "<span class='notice'>You cut the cables and dismantle the power terminal.</span>"
qdel(src)
/obj/machinery/power/terminal/attackby(obj/item/W, mob/living/user)
if(istype(W, /obj/item/weapon/wirecutters))
dismantle(user)
return
..()
+11 -12
View File
@@ -67,7 +67,7 @@
for(var/obj/O in contents)
O.emp_act(severity)
/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)//TODO: go over this
/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/carbon/human/user as mob|obj, flag, params)//TODO: go over this
if(flag) //It's adjacent, is the user, or is on the user's person
if(istype(target, /mob/) && target != user && !(target in user.contents)) //We make sure that it is a mob, it's not us or part of us.
if(user.a_intent == "harm") //Flogging action
@@ -79,7 +79,7 @@
if(clumsy_check && can_shoot())
if(istype(user, /mob/living))
var/mob/living/M = user
if ((CLUMSY in M.mutations) && prob(40))
if (M.disabilities & CLUMSY && prob(40))
user << "<span class='danger'>You shoot yourself in the foot with \the [src]!</span>"
process_fire(user,user,0,params)
M.drop_item()
@@ -92,18 +92,17 @@
process_fire(target,user,flag,params)
/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/user)
/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/carbon/user)
if (!user.IsAdvancedToolUser())
user << "<span class='notice'>You don't have the dexterity to do this!</span>"
return 0
if(trigger_guard)
if (HULK in user.mutations)
user << "<span class='notice'>Your meaty finger is much too large for the trigger guard!</span>"
return 0
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna && NOGUNS in H.dna.species.specflags)
if(istype(user) && user.dna)
if(user.dna.check_mutation(HULK))
user << "<span class='notice'>Your meaty finger is much too large for the trigger guard!</span>"
return 0
if(NOGUNS in user.dna.species.specflags)
user << "<span class='notice'>Your fingers don't fit in the trigger guard!</span>"
return 0
return 1
@@ -117,7 +116,7 @@
for(var/i = 1 to burst_size)
if(!issilicon(user))
if(!(src in get_both_hands(user))) //for burst firing
if( i>1 && !(src in get_both_hands(user))) //for burst firing
break
if(chambered)
if(!chambered.fire(target, user, params, , suppressed))
@@ -127,9 +126,9 @@
if(!special_check(user))
return
if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
shoot_live_shot(user, 1, target)
shoot_live_shot(user, 1, target, message)
else
shoot_live_shot(user)
shoot_live_shot(user, 0, target, message)
else
shoot_with_empty_chamber(user)
break
@@ -105,3 +105,8 @@
update_charge()
update_reactor()
update_mode()
/obj/item/weapon/gun/energy/gun/turret
name = "hybrid turret gun"
desc = "A basic hybrid energy gun with two settings: Stun and kill."
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
@@ -152,7 +152,7 @@
. = 0
for(var/obj/item/ammo_casing/AC in magazine.stored_ammo)
if(AC.BB)
process_fire(user, user)
process_fire(user, user,0)
. = 1
/obj/item/weapon/gun/projectile/shotgun/blow_up(mob/user as mob)
@@ -160,21 +160,16 @@
if(chambered && chambered.BB)
process_fire(user, user,0)
. = 1
for(var/obj/item/ammo_casing/AC in magazine.stored_ammo)
if(AC.BB)
chambered = AC
process_fire(user, user,0)
. = 1
/obj/item/weapon/gun/projectile/proc/sawoff(mob/user as mob)
if(sawn_state == SAWN_OFF)
user << "<span class='notice'>\The [src] is already shorten.</span>"
user << "<span class='notice'>\The [src] is already shortened.</span>"
return
if(sawn_state == SAWN_SAWING)
return
user.visible_message("<span class='notice'>[user] begin to shorten \the [src].</span>", "<span class='notice'>You begin to shorten \the [src].</span>")
user.visible_message("<span class='notice'>[user] begins to shorten \the [src].</span>", "<span class='notice'>You begin to shorten \the [src].</span>")
//if there's any live ammo inside the gun, makes it go off
if(blow_up(user))
@@ -184,6 +179,7 @@
sawn_state = SAWN_SAWING
if(do_after(user, 30))
user.visible_message("<span class='warning'>[user] shortens \the [src]!</span>", "<span class='warning'>You shorten \the [src]!</span>")
name = "sawn-off [src.name]"
desc = sawn_desc
icon_state = initial(icon_state) + "-sawn"
@@ -192,7 +188,6 @@
slot_flags &= ~SLOT_BACK //you can't sling it on your back
slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
sawn_state = SAWN_OFF
user.visible_message("<span class='warning'>[user] shorten \the [src]!</span>", "<span class='warning'>You shorten \the [src]!</span>")
update_icon()
return
else
+2 -2
View File
@@ -91,8 +91,8 @@
if(hitsound)
var/volume = vol_by_damage()
playsound(loc, hitsound, volume, 1, -1)
M.visible_message("<span class='danger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!", \
"<span class='userdanger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
M.visible_message("<span class='danger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!</span>", \
"<span class='userdanger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!</span>") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
add_logs(firer, M, "shot", object="[src]", addition=reagent_note)
var/turf/new_loc = get_turf(A)
+2 -2
View File
@@ -39,9 +39,9 @@
/obj/item/projectile/beam/disabler
name = "disabler beam"
icon_state = "omnilaser"
damage = 33
damage = 36
damage_type = STAMINA
hitsound = null
hitsound = 'sound/weapons/tap.ogg'
eyeblur = 0
/obj/item/projectile/beam/pulse
+1 -1
View File
@@ -284,7 +284,7 @@ datum/reagents/proc/handle_reactions()
ME2.Uses--
if(ME2.Uses <= 0) // give the notification that the slime core is dead
for(var/mob/M in seen)
M << "<span class='notice'>\icon[my_atom] The [my_atom]'s power is consumed in the reaction.</span>"
M << "<span class='notice'>\icon[my_atom] \The [my_atom]'s power is consumed in the reaction.</span>"
ME2.name = "used slime extract"
ME2.desc = "This extract has been used up."
@@ -138,6 +138,7 @@
var/obj/item/weapon/reagent_containers/glass/B = beaker
B.loc = loc
beaker = null
overlays -= "disp_beaker"
add_fingerprint(usr)
return 1 // update UIs attached to this object
@@ -158,6 +159,7 @@
B.loc = src
user << "You add the beaker to the machine!"
nanomanager.update_uis(src) // update all UIs attached to src
overlays += "disp_beaker"
/obj/machinery/chem_dispenser/attack_ai(mob/user as mob)
return src.attack_hand(user)
@@ -854,5 +854,4 @@ datum/reagent/plantnutriment/robustharvestnutriment
// Undefine the alias for REAGENTS_EFFECT_MULTIPLER
#undef REM
#undef REM
@@ -60,7 +60,7 @@ datum/reagent/consumable/carrotjuice/on_mob_life(var/mob/living/M as mob)
//nothing
if(21 to INFINITY)
if (prob(data-10))
M.disabilities &= ~NEARSIGHTED
M.disabilities &= ~NEARSIGHT
data++
..()
return
@@ -1,5 +1,3 @@
///////////////////////////////////////////////////////////////////
//Food Reagents
//////////////////////////////////////////////////////////////////
@@ -385,4 +383,3 @@ datum/reagent/consumable/cherryjelly
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
color = "#801E28" // rgb: 128, 30, 40
@@ -92,18 +92,12 @@ datum/reagent/medicine/ryetalyn
reagent_state = SOLID
color = "#C8A5DC" // rgb: 200, 165, 220
datum/reagent/medicine/ryetalyn/on_mob_life(var/mob/living/M as mob)
var/needs_update = M.mutations.len > 0
M.mutations = list()
M.disabilities = 0
M.sdisabilities = 0
datum/reagent/medicine/ryetalyn/on_mob_life(mob/living/carbon/human/M)
M.jitteriness = 0
// Might need to update appearance for hulk etc.
if(needs_update && ishuman(M))
var/mob/living/carbon/human/H = M
H.update_mutations()
if(istype(M) && M.dna)
M.dna.remove_all_mutations()
..()
return
@@ -210,7 +204,6 @@ datum/reagent/medicine/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob
M.hallucination = 0
M.setBrainLoss(0)
M.disabilities = 0
M.sdisabilities = 0
M.eye_blurry = 0
M.eye_blind = 0
M.SetWeakened(0)
@@ -299,9 +292,8 @@ datum/reagent/medicine/imidazoline
datum/reagent/medicine/imidazoline/on_mob_life(var/mob/living/M as mob)
M.eye_blurry = max(M.eye_blurry-5 , 0)
M.eye_blind = max(M.eye_blind-5 , 0)
M.disabilities &= ~NEARSIGHTED
M.disabilities &= ~NEARSIGHT
M.eye_stat = max(M.eye_stat-5, 0)
// M.sdisabilities &= ~1 Replaced by eye surgery
..()
return
@@ -24,7 +24,7 @@
/obj/item/weapon/grenade/chem_grenade,
/obj/machinery/bot/medbot,
/obj/machinery/computer/pandemic,
/obj/item/weapon/storage/secure/safe,
/obj/structure/safe,
/obj/machinery/disposal,
/obj/machinery/hydroponics,
/obj/machinery/biogenerator,
@@ -289,6 +289,28 @@
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/anxiety
name = "Severe Anxiety culture bottle"
desc = "A small bottle. Contains a sample of Lepidopticides."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/anxiety(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/beesease
name = "Beesease culture bottle"
desc = "A small bottle. Contains a sample of invasive Apidae."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/beesease(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/pacid
name = "Polytrinic Acid Bottle"
desc = "A small bottle. Contains a small amount of Polytrinic Acid"
@@ -79,7 +79,7 @@
user << "<span class='notice'>You are unable to locate any blood.</span>"
return
if(target != user)
target.visible_message("<span class='danger'>[user] is trying to take a blood sample from [target]!</span>", \
target.visible_message("<span class='danger'>[user] is trying to take a blood sample from [target]!</span>", \
"<span class='userdanger'>[user] is trying to take a blood sample from [target]!</span>")
if(!do_mob(user, target))
return
+4 -3
View File
@@ -97,9 +97,10 @@
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
..()
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explosion(src.loc,-1,0,2, flame_range = 2)
if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explosion(src.loc,-1,0,2, flame_range = 2)
/obj/structure/reagent_dispensers/fueltank/blob_act()
+9 -4
View File
@@ -63,11 +63,16 @@
// attack by item places it in to disposal
/obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user)
if(stat & BROKEN || !I || !user || (I.flags & NODROP))
if(stat & BROKEN || !I || !user)
return
if(isrobot(user) && !istype(I, /obj/item/weapon/storage/bag/trash))
return
if(isrobot(user))
if(!istype(I, /obj/item/weapon/storage/bag/trash))
return
else
if(I.flags & NODROP)
return
src.add_fingerprint(user)
if(mode<=0) // It's off
if(istype(I, /obj/item/weapon/screwdriver))
@@ -507,7 +512,7 @@
AM.loc = src
if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(FAT in H.mutations) // is a human and fat?
if(H.disabilities & FAT) // is a human and fat?
has_fat_guy = 1 // set flag on holder
if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
var/obj/structure/bigDelivery/T = AM
+217 -221
View File
@@ -55,198 +55,6 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
return
///////////////////////////////////
/////Non-Board Computer Stuff//////
///////////////////////////////////
datum/design/intellicard
name = "Intellicard AI Transportation System"
desc = "Allows for the construction of an intellicard."
id = "intellicard"
req_tech = list("programming" = 4, "materials" = 4)
build_type = PROTOLATHE
materials = list("$glass" = 1000, "$gold" = 200)
build_path = /obj/item/device/aicard
datum/design/paicard
name = "Personal Artificial Intelligence Card"
desc = "Allows for the construction of a pAI Card."
id = "paicard"
req_tech = list("programming" = 2)
build_type = PROTOLATHE
materials = list("$glass" = 500, "$metal" = 500)
build_path = /obj/item/device/paicard
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
datum/design/design_disk
name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list("$metal" = 30, "$glass" = 10)
build_path = /obj/item/weapon/disk/design_disk
datum/design/tech_disk
name = "Technology Data Storage Disk"
desc = "Produce additional disks for storing technology data."
id = "tech_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list("$metal" = 30, "$glass" = 10)
build_path = /obj/item/weapon/disk/tech_disk
/////////////////////////////////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
id = "jackhammer"
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
build_path = /obj/item/weapon/pickaxe/jackhammer
datum/design/drill
name = "Mining Drill"
desc = "Yours is the drill that will pierce through the rock walls."
id = "drill"
req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners.
build_path = /obj/item/weapon/pickaxe/drill
datum/design/plasmacutter
name = "Plasma Cutter"
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
id = "plasmacutter"
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
reliability = 79
build_path = /obj/item/weapon/pickaxe/plasmacutter
datum/design/pick_diamond
name = "Diamond Pickaxe"
desc = "A pickaxe with a diamond pick head, this is just like minesim 2554!."
id = "pick_diamond"
req_tech = list("materials" = 6)
build_type = PROTOLATHE
materials = list("$diamond" = 3000)
build_path = /obj/item/weapon/pickaxe/diamond
datum/design/drill_diamond
name = "Diamond Mining Drill"
desc = "Yours is the drill that will pierce the heavens!"
id = "drill_diamond"
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
reliability = 79
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
/////////////////////////////////////////
//////////////Blue Space/////////////////
/////////////////////////////////////////
datum/design/beacon
name = "Tracking Beacon"
desc = "A blue space tracking beacon."
id = "beacon"
req_tech = list("bluespace" = 1)
build_type = PROTOLATHE
materials = list("$metal" = 20, "$glass" = 10)
build_path = /obj/item/device/radio/beacon
datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
id = "bag_holding"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
reliability = 80
build_path = /obj/item/weapon/storage/backpack/holding
datum/design/bluespace_crystal
name = "Artificial Bluespace Crystal"
desc = "A small blue crystal with mystical properties."
id = "bluespace_crystal"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
materials = list("$diamond" = 1500, "$plasma" = 1500)
reliability = 100
build_path = /obj/item/bluespace_crystal/artificial
datum/design/telesci_gps
name = "GPS Device"
desc = "Little thingie that can track its position at all times."
id = "telesci_gps"
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 500, "$glass" = 1000)
build_path = /obj/item/device/gps
/////////////////////////////////////////
/////////////////HUDs////////////////////
/////////////////////////////////////////
datum/design/health_hud
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
id = "health_hud"
req_tech = list("biotech" = 2, "magnets" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = /obj/item/clothing/glasses/hud/health
datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
id = "health_hud_night"
req_tech = list("biotech" = 4, "magnets" = 5)
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250)
build_path = /obj/item/clothing/glasses/hud/health/night
datum/design/security_hud
name = "Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
id = "security_hud"
req_tech = list("magnets" = 3, "combat" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = /obj/item/clothing/glasses/hud/security
datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
id = "security_hud_night"
req_tech = list("magnets" = 5, "combat" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350)
build_path = /obj/item/clothing/glasses/hud/security/night
/////////////////////////////////////////
//////////////////Test///////////////////
/////////////////////////////////////////
/* test
name = "Test Design"
desc = "A design to test the new protolathe."
id = "protolathe_test"
build_type = PROTOLATHE
req_tech = list("materials" = 1)
materials = list("$gold" = 3000, "iron" = 15, "copper" = 10, "$silver" = 2500)
build_path = /obj/item/weapon/banhammer" */
////////////////////////////////////////
//Disks for transporting design datums//
////////////////////////////////////////
@@ -266,28 +74,221 @@ datum/design/security_hud_night
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
///////////////////////////////////
/////Non-Board Computer Stuff//////
///////////////////////////////////
/datum/design/intellicard
name = "Intellicard AI Transportation System"
desc = "Allows for the construction of an intellicard."
id = "intellicard"
req_tech = list("programming" = 4, "materials" = 4)
build_type = PROTOLATHE
materials = list("$glass" = 1000, "$gold" = 200)
build_path = /obj/item/device/aicard
category = list("Electronics")
/datum/design/paicard
name = "Personal Artificial Intelligence Card"
desc = "Allows for the construction of a pAI Card."
id = "paicard"
req_tech = list("programming" = 2)
build_type = PROTOLATHE
materials = list("$glass" = 500, "$metal" = 500)
build_path = /obj/item/device/paicard
category = list("Electronics")
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
/datum/design/design_disk
name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list("$metal" = 30, "$glass" = 10)
build_path = /obj/item/weapon/disk/design_disk
category = list("Electronics")
/datum/design/tech_disk
name = "Technology Data Storage Disk"
desc = "Produce additional disks for storing technology data."
id = "tech_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list("$metal" = 30, "$glass" = 10)
build_path = /obj/item/weapon/disk/tech_disk
category = list("Electronics")
/////////////////////////////////////////
//////////////Borg Upgrades//////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
datum/design/borg_syndicate_module
name = "Borg Illegal Weapons Upgrade"
desc = "Allows for the construction of illegal upgrades for cyborgs"
id = "borg_syndicate_module"
build_type = MECHFAB
req_tech = list("combat" = 4, "syndicate" = 3)
build_path = /obj/item/borg/upgrade/syndicate
materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
id = "jackhammer"
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
build_path = /obj/item/weapon/pickaxe/jackhammer
category = list("Mining Designs")
/datum/design/drill
name = "Mining Drill"
desc = "Yours is the drill that will pierce through the rock walls."
id = "drill"
req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners.
build_path = /obj/item/weapon/pickaxe/drill
category = list("Mining Designs")
/datum/design/plasmacutter
name = "Plasma Cutter"
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
id = "plasmacutter"
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
reliability = 79
build_path = /obj/item/weapon/pickaxe/plasmacutter
category = list("Mining Designs")
/datum/design/pick_diamond
name = "Diamond Pickaxe"
desc = "A pickaxe with a diamond pick head, this is just like minesim 2554!."
id = "pick_diamond"
req_tech = list("materials" = 6)
build_type = PROTOLATHE
materials = list("$diamond" = 3000)
build_path = /obj/item/weapon/pickaxe/diamond
category = list("Mining Designs")
/datum/design/drill_diamond
name = "Diamond Mining Drill"
desc = "Yours is the drill that will pierce the heavens!"
id = "drill_diamond"
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
reliability = 79
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
category = list("Mining Designs")
/////////////////////////////////////////
//////////////Blue Space/////////////////
/////////////////////////////////////////
/datum/design/beacon
name = "Tracking Beacon"
desc = "A blue space tracking beacon."
id = "beacon"
req_tech = list("bluespace" = 1)
build_type = PROTOLATHE
materials = list("$metal" = 20, "$glass" = 10)
build_path = /obj/item/device/radio/beacon
category = list("Bluespace Designs")
/datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
id = "bag_holding"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
reliability = 80
build_path = /obj/item/weapon/storage/backpack/holding
category = list("Bluespace Designs")
/datum/design/bluespace_crystal
name = "Artificial Bluespace Crystal"
desc = "A small blue crystal with mystical properties."
id = "bluespace_crystal"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
materials = list("$diamond" = 1500, "$plasma" = 1500)
reliability = 100
build_path = /obj/item/bluespace_crystal/artificial
category = list("Bluespace Designs")
/datum/design/telesci_gps
name = "GPS Device"
desc = "Little thingie that can track its position at all times."
id = "telesci_gps"
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 500, "$glass" = 1000)
build_path = /obj/item/device/gps
category = list("Bluespace Designs")
/////////////////////////////////////////
/////////////////HUDs////////////////////
/////////////////////////////////////////
/datum/design/health_hud
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
id = "health_hud"
req_tech = list("biotech" = 2, "magnets" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = /obj/item/clothing/glasses/hud/health
category = list("Equipement")
/datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
id = "health_hud_night"
req_tech = list("biotech" = 4, "magnets" = 5)
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250)
build_path = /obj/item/clothing/glasses/hud/health/night
category = list("Equipement")
/datum/design/security_hud
name = "Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
id = "security_hud"
req_tech = list("magnets" = 3, "combat" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = /obj/item/clothing/glasses/hud/security
category = list("Equipement")
/datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
id = "security_hud_night"
req_tech = list("magnets" = 5, "combat" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350)
build_path = /obj/item/clothing/glasses/hud/security/night
category = list("Equipement")
/////////////////////////////////////////
//////////////////Test///////////////////
/////////////////////////////////////////
/* test
name = "Test Design"
desc = "A design to test the new protolathe."
id = "protolathe_test"
build_type = PROTOLATHE
req_tech = list("materials" = 1)
materials = list("$gold" = 3000, "iron" = 15, "copper" = 10, "$silver" = 2500)
build_path = /obj/item/weapon/banhammer"
category = list("Weapons") */
/////////////////////////////////////////
//////////////////Misc///////////////////
/////////////////////////////////////////
datum/design/welding_mask
/datum/design/welding_mask
name = "Welding Gas Mask"
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
id = "weldingmask"
@@ -295,8 +296,9 @@ datum/design/welding_mask
build_type = PROTOLATHE
materials = list("$metal" = 4000, "$glass" = 1000)
build_path = /obj/item/clothing/mask/gas/welding
category = list("Equipement")
datum/design/mesons
/datum/design/mesons
name = "Optical Meson Scanners"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
id = "mesons"
@@ -304,8 +306,9 @@ datum/design/mesons
build_type = PROTOLATHE
materials = list("$metal" = 200, "$glass" = 300, "$plasma" = 100)
build_path = /obj/item/clothing/glasses/meson
category = list("Equipement")
datum/design/night_vision_goggles
/datum/design/night_vision_goggles
name = "Night Vision Goggles"
desc = "Goggles that let you see through darkness unhindered."
id = "night_visision_goggles"
@@ -313,8 +316,9 @@ datum/design/night_vision_goggles
build_type = PROTOLATHE
materials = list("$metal" = 100, "$glass" = 100, "$uranium" = 1000)
build_path = /obj/item/clothing/glasses/night
category = list("Equipement")
datum/design/magboots
/datum/design/magboots
name = "Magnetic Boots"
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
id = "magboots"
@@ -322,23 +326,13 @@ datum/design/magboots
build_type = PROTOLATHE
materials = list("$metal" = 4500, "$silver" = 1500, "$gold" = 2500)
build_path = /obj/item/clothing/shoes/magboots
datum/design/drone_shell
name = "Drone Shell"
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
id = "drone_shell"
req_tech = list("programming" = 2, "biotech" = 4)
build_type = MECHFAB
materials = list("$metal" = 800, "$glass" = 350)
construction_time=150
build_path = /obj/item/drone_shell
category = list("Misc")
category = list("Equipement")
/////////////////////////////////////////
////////////Janitor Designs//////////////
/////////////////////////////////////////
datum/design/advmop
/datum/design/advmop
name = "Advanced Mop"
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
id = "advmop"
@@ -346,12 +340,14 @@ datum/design/advmop
build_type = PROTOLATHE
materials = list("$metal" = 2500, "$glass" = 200)
build_path = /obj/item/weapon/mop/advanced
category = list("Equipement")
datum/design/holosign
/datum/design/holosign
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
id = "holosign"
req_tech = list("magnets" = 3, "powerstorage" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 1000)
build_path = /obj/item/weapon/holosign_creator
build_path = /obj/item/weapon/holosign_creator
category = list("Equipement")
@@ -215,7 +215,7 @@
id = "retractor"
build_type = AUTOLATHE
materials = list("$metal" = 6000, "$glass" = 3000)
build_path = /obj/item/weapon/
build_path = /obj/item/weapon/retractor
category = list("initial", "Medical")
/datum/design/cautery
@@ -594,7 +594,10 @@
construction_time = 500
category = list("Exosuit Equipment")
//Cyborg Upgrade Modules
/////////////////////////////////////////
//////////////Borg Upgrades//////////////
/////////////////////////////////////////
/datum/design/borg_upgrade_reset
name = "Cyborg Upgrade Module (Reset Module)"
id = "borg_upgrade_reset"
@@ -649,6 +652,17 @@
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/borg_syndicate_module
name = "Borg Illegal Weapons Upgrade"
desc = "Allows for the construction of illegal upgrades for cyborgs"
id = "borg_syndicate_module"
build_type = MECHFAB
req_tech = list("combat" = 4, "syndicate" = 3)
build_path = /obj/item/borg/upgrade/syndicate
materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
//Misc
/datum/design/mecha_tracking
name = "Exosuit Tracking Beacon"
@@ -657,4 +671,15 @@
build_path =/obj/item/mecha_parts/mecha_tracking
materials = list("$metal"=500)
construction_time = 50
category = list("Misc")
/datum/design/drone_shell
name = "Drone Shell"
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
id = "drone_shell"
req_tech = list("programming" = 2, "biotech" = 4)
build_type = MECHFAB
materials = list("$metal" = 800, "$glass" = 350)
construction_time=150
build_path = /obj/item/drone_shell
category = list("Misc")
@@ -67,6 +67,7 @@ datum/design/pacman
reliability = 79
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pacman
category = list("Engineering Machinery")
datum/design/superpacman
name = "Machine Design (SUPERPACMAN-type Generator Board)"
@@ -77,6 +78,7 @@ datum/design/superpacman
reliability = 76
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pacman/super
category = list("Engineering Machinery")
datum/design/mrspacman
name = "Machine Design (MRSPACMAN-type Generator Board)"
@@ -87,3 +89,4 @@ datum/design/mrspacman
reliability = 74
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pacman/mrs
category = list("Engineering Machinery")

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