mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 09:05:11 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into Socks
Conflicts: config/admins.txt
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)])")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
else
|
||||
if (internals)
|
||||
internals.icon_state = "internal0"
|
||||
return
|
||||
return
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>", \
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -46,9 +46,6 @@
|
||||
/mob/proc/update_inv_gloves()
|
||||
return
|
||||
|
||||
/mob/proc/update_mutations()
|
||||
return
|
||||
|
||||
/mob/proc/update_inv_wear_id()
|
||||
return
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
if(get_dist(src, user) > 1)
|
||||
return
|
||||
|
||||
coil.turf_place(T, user)
|
||||
coil.place_turf(T, user)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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
Reference in New Issue
Block a user