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

Conflicts:
	code/modules/research/designs/mechfabricator_designs.dm
This commit is contained in:
Steelpoint
2015-02-06 13:19:15 +08:00
286 changed files with 4995 additions and 2291 deletions
+4 -1
View File
@@ -116,7 +116,10 @@ var/savefile/Banlist
Banlist["temp"] << temp
if (temp)
Banlist["minutes"] << bantimestamp
notes_add(ckey, "Banned for [minutes] minutes - [reason]")
if(!temp)
notes_add(ckey, "Permanently banned - [reason]")
else
notes_add(ckey, "Banned for [minutes] minutes - [reason]")
return 1
/proc/RemoveBan(foldername)
+2 -1
View File
@@ -50,7 +50,8 @@ var/global/floorIsLava = 0
body += "<A href='?_src_=holder;notes=show;ckey=[M.ckey]'>Notes</A> "
if(M.client)
body += "| <A HREF='?_src_=holder;sendtoprison=\ref[M]'>Prison</A> | "
body += "| <A href='?_src_=holder;sendtoprison=\ref[M]'>Prison</A> | "
body += "\ <A href='?_src_=holder;sendbacktolobby=\ref[M]'>Send back to Lobby</A> | "
var/muted = M.client.prefs.muted
body += "<br><b>Mute: </b> "
body += "\[<A href='?_src_=holder;mute=[M.ckey];mute_type=[MUTE_IC]'><font color='[(muted & MUTE_IC)?"red":"blue"]'>IC</font></a> | "
+1 -1
View File
@@ -49,7 +49,7 @@ var/list/admin_verbs_admin = list(
/client/proc/Getmob, /*teleports a mob to our location*/
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage
/client/proc/Jump,
/client/proc/jumptoarea,
/client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/
/client/proc/jumptomob, /*allows us to jump to a specific mob*/
/client/proc/jumptoturf, /*allows us to jump to a specific turf*/
+1
View File
@@ -20,4 +20,5 @@
H.hair_color = random_short_color()
H.facial_hair_color = H.hair_color
H.eye_color = random_eye_color()
H.dna.blood_type = random_blood_type()
H.update_icons()
+1 -1
View File
@@ -20,7 +20,7 @@
while(!notesfile.eof)
var/note
notesfile >> note
dat += note
dat += note + "<br>"
var/datum/browser/popup = new(usr, "player_notes", "Player Notes", 700, 400)
popup.set_content(dat)
popup.open()
+26 -1
View File
@@ -1050,6 +1050,31 @@
log_admin("[key_name(usr)] has sent [key_name(M)] to Prison!")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] Prison!")
else if(href_list["sendbacktolobby"])
if(!check_rights(R_ADMIN))
return
var/mob/M = locate(href_list["sendbacktolobby"])
if(!isobserver(M))
usr << "<span class='notice'>You can only send ghost players back to the Lobby.</span>"
return
if(!M.client)
usr << "<span class='warning'>[M] doesn't seem to have an active client.</span>"
return
if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes")
return
log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby.")
message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby.")
var/mob/new_player/NP = new()
NP.ckey = M.ckey
qdel(M)
else if(href_list["tdome1"])
if(!check_rights(R_FUN)) return
@@ -1555,7 +1580,7 @@
else if(!ispath(path, /obj) && !ispath(path, /turf) && !ispath(path, /mob))
removed_paths += dirty_path
continue
else if(ispath(path, /obj/item/weapon/gun/energy/pulse_rifle))
else if(ispath(path, /obj/item/weapon/gun/energy/pulse))
if(!check_rights(R_FUN,0))
removed_paths += dirty_path
continue
+32 -12
View File
@@ -1,11 +1,11 @@
/client/proc/Jump(area/A in returnSortedAreas())
/client/proc/jumptoarea(area/A in sortedAreas)
set name = "Jump to Area"
set desc = "Area to jump to"
set category = "Admin"
if(!src.holder)
src << "Only administrators may use this command."
return
if(!A)
return
@@ -19,8 +19,8 @@
var/turf/T = pick_n_take(turfs)
if(!T)
src << "Nowhere to jump to!"
return
usr.loc = T
return
admin_forcemove(usr, T)
log_admin("[key_name(usr)] jumped to [A]")
message_admins("[key_name_admin(usr)] jumped to [A]")
feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -53,7 +53,7 @@
var/turf/T = get_turf(M)
if(T && isturf(T))
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
A.loc = T
admin_forcemove(A, M.loc)
else
A << "This mob is not located in the game world."
@@ -91,7 +91,9 @@
var/mob/M = selection:mob
log_admin("[key_name(usr)] jumped to [key_name(M)]")
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]")
usr.loc = M.loc
admin_forcemove(usr, M.loc)
feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Getmob(var/mob/M in mob_list)
@@ -104,7 +106,7 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]")
M.loc = get_turf(usr)
admin_forcemove(M, get_turf(usr))
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Getkey()
@@ -129,7 +131,8 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name(M)]")
if(M)
M.loc = get_turf(usr)
admin_forcemove(M, get_turf(usr))
usr.loc = M.loc
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/sendmob(var/mob/M in sortmobs())
@@ -138,10 +141,27 @@
if(!src.holder)
src << "Only administrators may use this command."
return
var/area/A = input(usr, "Pick an area.", "Pick an area") in returnSortedAreas()
var/area/A = input(usr, "Pick an area.", "Pick an area") in sortedAreas
if(A)
M.loc = pick(get_area_turfs(A))
admin_forcemove(M, pick(get_area_turfs(A)))
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]")
/proc/admin_forcemove(var/mob/mover, var/atom/newloc)
var/startdensity = mover.density
var/startflags = mover.pass_flags
var/startincorporeal = 0
if(istype(mover, /mob/living))
var/mob/living/L = mover
startincorporeal = L.incorporeal_move
L.incorporeal_move = 1
mover.density = 0
mover.pass_flags = ALL
newloc.density = 0
. = mover.Move(newloc)
mover.density = startdensity
mover.pass_flags = startflags
if(istype(mover, /mob/living))
var/mob/living/L = mover
L.incorporeal_move = startincorporeal
+88 -18
View File
@@ -597,6 +597,7 @@ var/global/list/g_fancy_list_of_types = null
"assassin",
"mobster",
"death commando",
"emergency response officer",
"centcom official",
"centcom commander",
"special ops officer",
@@ -653,7 +654,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
@@ -748,7 +749,7 @@ var/global/list/g_fancy_list_of_types = null
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)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chaplain_hoodie(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/chaplain_hoodie(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store)
@@ -820,7 +821,15 @@ var/global/list/g_fancy_list_of_types = null
equip_deathsquad(M)
if("emergency response officer")
equip_emergencyresponsesquad(M)
switch(input("Which class?") in list("Commander","Security","Engineer","Medical"))
if("Commander")
equip_emergencyresponsesquad(M, "commander")
if("Security")
equip_emergencyresponsesquad(M, "sec")
if("Engineer")
equip_emergencyresponsesquad(M, "eng")
if("Medic")
equip_emergencyresponsesquad(M, "med")
if("centcom official")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
@@ -883,7 +892,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/M1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
@@ -1011,7 +1020,7 @@ var/global/list/g_fancy_list_of_types = null
for(var/obj/machinery/power/rad_collector/Rad in world)
if(Rad.anchored)
if(!Rad.P)
var/obj/item/weapon/tank/plasma/Plasma = new/obj/item/weapon/tank/plasma(Rad)
var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad)
Plasma.air_contents.toxins = 70
Rad.drainratio = 0
Rad.P = Plasma
@@ -1087,10 +1096,10 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/shield/energy(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(M), slot_r_hand)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)//Here you go Deuryn
@@ -1107,21 +1116,82 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(W, slot_wear_id)
//Emergency Response Team
/proc/equip_emergencyresponsesquad(var/mob/living/carbon/human/M, var/officer)
/proc/equip_emergencyresponsesquad(var/mob/living/carbon/human/M, var/ertrole)
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(M)
R.set_frequency(1441)
M.equip_to_slot_or_del(R, slot_ears)
if(officer)
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/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
// M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert(M), slot_wear_id)
else
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/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
switch(ertrole)
if("commander")
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/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert(M), slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
if("sec")
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/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert/sec(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Security(M), slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/handcuffs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert/sec(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/carbine/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt)
if("med")
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/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert/med(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Medical(M), slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert/med(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_r_hand)
if("eng")
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/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert/engi(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Engineer(M), slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert/engi(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/rcd/combat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/rcd_ammo/large(M), slot_l_store)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
L.imp_in = M
+13 -6
View File
@@ -467,12 +467,19 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/ERTOperative = new(spawnloc)
chosen_candidate.client.prefs.copy_to(ERTOperative)
ready_dna(ERTOperative)
if(numagents == 1) //If Squad Leader
ERTOperative.real_name = "Commander [pick(ERTOperative.real_name)]"
equip_emergencyresponsesquad(ERTOperative, 1)
else
ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
equip_emergencyresponsesquad(ERTOperative)
switch(numagents)
if(1)
ERTOperative.real_name = "Commander [pick(ERTOperative.real_name)]"
equip_emergencyresponsesquad(ERTOperative, "commander")
if(2 || 5)
ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
equip_emergencyresponsesquad(ERTOperative, "sec")
if(3 || 6)
ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
equip_emergencyresponsesquad(ERTOperative, "med")
if(4 || 7)
ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
equip_emergencyresponsesquad(ERTOperative, "eng")
ERTOperative.key = chosen_candidate.key
ERTOperative.mind.assigned_role = "ERT"
-7
View File
@@ -681,13 +681,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes") return
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
var/choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel")
if(choice == "Confirm")
SSshuttle.emergencyFakeRecall = rand(5,9) * 0.1
else
return
SSshuttle.emergency.request()
feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-called the emergency shuttle.")
+1 -3
View File
@@ -148,7 +148,7 @@
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
corpseback = /obj/item/weapon/tank/jetpack/oxygen
corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
corpsepocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
@@ -198,7 +198,6 @@
/obj/effect/landmark/corpse/engineer/rig
corpsesuit = /obj/item/clothing/suit/space/hardsuit
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit
/obj/effect/landmark/corpse/clown
name = "Clown"
@@ -236,7 +235,6 @@
/obj/effect/landmark/corpse/miner/rig
corpsesuit = /obj/item/clothing/suit/space/hardsuit/mining
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/mining
/////////////////Officers//////////////////////
+6 -6
View File
@@ -144,7 +144,7 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING
var/blood_overlay_type = "suit"
@@ -155,10 +155,10 @@ BLIND // can't see anything
// Meaning the the suit is defined directly after the corrisponding helmet. Just like below!
/obj/item/clothing/head/helmet/space
name = "space helmet"
icon_state = "space"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
icon_state = "spaceold"
desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays."
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
item_state = "space"
item_state = "spaceold"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
@@ -173,14 +173,14 @@ BLIND // can't see anything
/obj/item/clothing/suit/space
name = "space suit"
desc = "A suit that protects against low pressure environments. Has a big 13 on the back."
icon_state = "space"
icon_state = "spaceold"
item_state = "s_suit"
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals)
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -101,6 +101,14 @@
heat_protection = FEET|LEGS
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
/obj/item/clothing/shoes/workboots
name = "work boots"
desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar."
icon_state = "workboots"
item_state = "jackboots"
strip_delay = 40
put_on_delay = 40
/obj/item/clothing/shoes/cult
name = "cultist boots"
desc = "A pair of boots worn by the followers of Nar-Sie."
+22 -9
View File
@@ -9,6 +9,7 @@
var/on = 0
item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite)
action_button_name = "Toggle Helmet Light"
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
if(!isturf(user.loc))
@@ -41,8 +42,10 @@
item_state = "eng_hardsuit"
slowdown = 2
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
action_button_name = "Toggle Helmet"
var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit
//Atmospherics
/obj/item/clothing/head/helmet/space/hardsuit/atmos
@@ -63,6 +66,7 @@
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/atmos
//Chief Engineer's hardsuit
@@ -84,6 +88,7 @@
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/elite
//Mining hardsuit
@@ -93,7 +98,6 @@
icon_state = "hardsuit0-mining"
item_state = "mining_helm"
item_color = "mining"
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
/obj/item/clothing/suit/space/hardsuit/mining
@@ -102,7 +106,8 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating for wildlife encounters."
item_state = "mining_hardsuit"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
@@ -116,6 +121,7 @@
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
on = 1
action_button_name = "Toggle Helmet Mode"
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon()
icon_state = "hardsuit[on]-[item_color]"
@@ -157,7 +163,8 @@
var/on = 1
action_button_name = "Toggle Hardsuit Mode"
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
helmettype = null
/obj/item/clothing/suit/space/hardsuit/syndi/update_icon()
icon_state = "hardsuit[on]-[item_color]"
@@ -186,6 +193,7 @@
user.update_inv_wear_suit()
user.update_inv_w_uniform()
//Wizard hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/wizard
name = "gem-encrusted hardsuit helmet"
@@ -208,19 +216,22 @@
w_class = 3
unacidable = 1
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/internals)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
unacidable = 1
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard
//Medical hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/medical
name = "medical hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort."
desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort, but does not protect the eyes from intense light."
icon_state = "hardsuit0-medical"
item_state = "medical_helm"
item_color = "medical"
flash_protect = 0
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
/obj/item/clothing/suit/space/hardsuit/medical
@@ -229,8 +240,9 @@
desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement."
item_state = "medical_hardsuit"
slowdown = 1
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
//Security hardsuit
@@ -247,5 +259,6 @@
name = "security hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
item_state = "sec_hardsuit"
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /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)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /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)
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
@@ -14,7 +14,7 @@
icon_state = "caparmor"
item_state = "capspacesuit"
w_class = 4
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
allowed = list(/obj/item/weapon/tank/internals, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
slowdown = 1
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -35,7 +35,7 @@
desc = "A heavily armored, advanced space suit that protects against most forms of damage."
icon_state = "deathsquad"
item_state = "swat_suit"
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
armor = list(melee = 80, bullet = 80, laser = 50,energy = 50, bomb = 100, bio = 100, rad = 100)
slowdown = 1
strip_delay = 130
@@ -73,7 +73,7 @@
item_state = "void"
desc = "An old, NASA Centcom branch designed, dark red space suit."
slowdown = 1
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/multitool)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/multitool)
//Space santa outfit suit
@@ -110,7 +110,7 @@
icon_state = "pirate"
item_state = "pirate"
w_class = 3
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
slowdown = 0
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
strip_delay = 40
@@ -125,21 +125,22 @@
item_color = "ert_commander"
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
strip_delay = 130
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
/obj/item/clothing/head/helmet/space/hardsuit/ert/sec
desc = "Standard issue security helmet for the ERT"
desc = "Standard issue security helmet for the ERT."
icon_state = "hardsuit0-ert_security"
item_state = "hardsuit0-ert_security"
item_color = "ert_security"
/obj/item/clothing/head/helmet/space/hardsuit/ert/engi
desc = "Standard issue engineer helmet for the ERT"
desc = "Standard issue engineer helmet for the ERT."
icon_state = "hardsuit0-ert_engineer"
item_state = "hardsuit0-ert_engineer"
item_color = "ert_engineer"
/obj/item/clothing/head/helmet/space/hardsuit/ert/med
desc = "Standard issue medical helmet for the ERT"
desc = "Standard issue medical helmet for the ERT."
icon_state = "hardsuit0-ert_medical"
item_state = "hardsuit0-ert_medical"
item_color = "ert_medical"
@@ -149,9 +150,9 @@
desc = "Standard issue command suit for the ERT."
icon_state = "ert_command"
item_state = "ert_command"
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
slowdown = 1
slowdown = 0
strip_delay = 130
/obj/item/clothing/suit/space/ert/sec
@@ -167,4 +168,21 @@
/obj/item/clothing/suit/space/ert/med
desc = "Standard issue medical suit for the ERT."
icon_state = "ert_medical"
item_state = "ert_medical"
item_state = "ert_medical"
/obj/item/clothing/suit/space/eva
name = "EVA suit"
icon_state = "space"
item_state = "s_suit"
desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
/obj/item/clothing/head/helmet/space/eva
name = "EVA helmet"
icon_state = "space"
item_state = "space"
desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies."
flash_protect = 0
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
+1 -1
View File
@@ -13,7 +13,7 @@
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
icon_state = "s-ninja"
item_state = "s-ninja_suit"
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/stock_parts/cell)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals,/obj/item/weapon/stock_parts/cell)
slowdown = 0
unacidable = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
+1 -1
View File
@@ -13,7 +13,7 @@
item_state = "space_suit_syndicate"
desc = "Has a tag on it: Totally not property of of a hostile corporation, honest!"
w_class = 3
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
+2 -2
View File
@@ -112,7 +112,7 @@
name = "armor"
desc = "An armored vest with a detective's badge on it."
icon_state = "detective-armor"
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/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/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/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/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
@@ -165,7 +165,7 @@
item_state = "centcom"
w_class = 4//bulky item
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals/emergency_oxygen)
flags = THICKMATERIAL
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
+1 -1
View File
@@ -20,7 +20,7 @@
flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
strip_delay = 70
+15 -26
View File
@@ -20,20 +20,26 @@
item_state = "bio_suit"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/internals/emergency_oxygen)
//Chaplain
/obj/item/clothing/suit/toggle/chaplain_hoodie
/obj/item/clothing/suit/hooded/chaplain_hoodie
name = "chaplain hoodie"
desc = "This suit says to you 'hush'!"
icon_state = "chaplain_hoodie"
item_state = "chaplain_hoodie"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
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)
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/internals/emergency_oxygen)
hooded = 1
suittoggled = 0
action_button_name = "Toggle Hoodie"
togglename = "hood"
action_button_name = "Toggle Chaplain Hoodie"
hoodtype = /obj/item/clothing/head/chaplain_hood
/obj/item/clothing/head/chaplain_hood
name = "chaplain hood"
desc = "For protecting your identity when immolating demons."
icon_state = "chaplain_hood"
body_parts_covered = HEAD
flags = NODROP
//Chaplain
/obj/item/clothing/suit/nun
@@ -43,7 +49,7 @@
item_state = "nun"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
flags_inv = HIDESHOES|HIDEJUMPSUIT
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)
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/internals/emergency_oxygen)
//Chef
/obj/item/clothing/suit/toggle/chef
@@ -76,7 +82,7 @@
item_state = "det_suit"
blood_overlay_type = "coat"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/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/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/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/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
@@ -94,7 +100,7 @@
icon_state = "hazard"
item_state = "hazard"
blood_overlay_type = "armor"
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/t_scanner,)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,)
//Lawyer
/obj/item/clothing/suit/toggle/lawyer
@@ -119,23 +125,6 @@
icon_state = "suitjacket_black"
item_state = "ro_suit"
//Toggle exosuits for different aesthetic styles (hoodies, suit jacket buttons, etc)
/obj/item/clothing/suit/toggle/attack_self()
set src in usr
if(!can_use(usr))
return 0
usr << "You toggle [src]'s [togglename]."
if(src.suittoggled)
src.icon_state = "[initial(icon_state)]"
src.suittoggled = 0
else if(!src.suittoggled)
src.icon_state = "[initial(icon_state)]_t"
src.suittoggled = 1
usr.update_inv_wear_suit()
//Mime
/obj/item/clothing/suit/suspenders
+28 -20
View File
@@ -86,7 +86,7 @@
item_state = "syndicate-black-red"
desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -106,7 +106,7 @@
item_state = "imperium_monk"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT
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)
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/internals/emergency_oxygen)
/obj/item/clothing/suit/chickensuit
@@ -134,7 +134,7 @@
item_state = "w_suit"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
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)
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/internals/emergency_oxygen)
@@ -201,7 +201,7 @@
desc = "Aviators not included."
icon_state = "bomberjacket"
item_state = "brownjsuit"
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -221,65 +221,73 @@
// WINTER COATS
/obj/item/clothing/suit/toggle/wintercoat
/obj/item/clothing/suit/hooded/wintercoat
name = "winter coat"
desc = "A heavy jacket made from 'synthetic' animal furs."
icon_state = "coatwinter"
item_state = "labcoat"
body_parts_covered = CHEST|GROIN|ARMS|HEAD
cold_protection = CHEST|GROIN|ARMS|HEAD
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
hooded = 1
action_button_name = "Toggle Winter Hood"
togglename = "hood"
/obj/item/clothing/suit/toggle/wintercoat/captain
/obj/item/clothing/head/winterhood
name = "winter hood"
desc = "A hood attached to a heavy winter jacket."
icon_state = "generic_hood"
body_parts_covered = HEAD
cold_protection = HEAD
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
flags = NODROP
/obj/item/clothing/suit/hooded/wintercoat/captain
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/classic_baton/telescopic)
/obj/item/clothing/suit/toggle/wintercoat/security
/obj/item/clothing/suit/hooded/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/classic_baton/telescopic)
/obj/item/clothing/suit/toggle/wintercoat/medical
/obj/item/clothing/suit/hooded/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/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
/obj/item/clothing/suit/hooded/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/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
/obj/item/clothing/suit/hooded/wintercoat/engineering
name = "engineering winter coat"
icon_state = "coatengineer"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
/obj/item/clothing/suit/toggle/wintercoat/engineering/atmos
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
name = "atmospherics winter coat"
icon_state = "coatatmos"
/obj/item/clothing/suit/toggle/wintercoat/hydro
/obj/item/clothing/suit/hooded/wintercoat/hydro
name = "hydroponics winter coat"
icon_state = "coathydro"
allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
/obj/item/clothing/suit/toggle/wintercoat/cargo
/obj/item/clothing/suit/hooded/wintercoat/cargo
name = "cargo winter coat"
icon_state = "coatcargo"
/obj/item/clothing/suit/toggle/wintercoat/miner
/obj/item/clothing/suit/hooded/wintercoat/miner
name = "mining winter coat"
icon_state = "coatminer"
allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+131
View File
@@ -0,0 +1,131 @@
//Hoods for winter coats and chaplain hoodie etc
/obj/item/clothing/suit/hooded
var/obj/item/clothing/head/winterhood/hood
var/hoodtype = /obj/item/clothing/head/winterhood //so the chaplain hoodie or other hoodies can override this
/obj/item/clothing/suit/hooded/New()
MakeHood()
..()
/obj/item/clothing/suit/hooded/proc/MakeHood()
if(!hood)
var/obj/item/clothing/head/winterhood/W = new hoodtype(src)
hood = W
/obj/item/clothing/suit/hooded/ui_action_click()
ToggleHood()
/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
if(slot != slot_wear_suit)
RemoveHood()
..()
/obj/item/clothing/suit/hooded/proc/RemoveHood()
src.icon_state = "[initial(icon_state)]"
suittoggled = 0
if(ishuman(hood.loc))
var/mob/living/carbon/H = hood.loc
H.unEquip(hood, 1)
H.update_inv_wear_suit()
hood.loc = src
/obj/item/clothing/suit/hooded/dropped()
RemoveHood()
/obj/item/clothing/suit/hooded/proc/ToggleHood()
if(!suittoggled)
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
if(H.wear_suit != src)
H << "You must be wearing [src] to put up the hood."
return
if(H.head)
H << "You're already wearing something on your head."
return
else
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
suittoggled = 1
src.icon_state = "[initial(icon_state)]_t"
H.update_inv_wear_suit()
else
RemoveHood()
//Toggle exosuits for different aesthetic styles (hoodies, suit jacket buttons, etc)
/obj/item/clothing/suit/toggle/attack_self()
set src in usr
if(!can_use(usr))
return 0
usr << "You toggle [src]'s [togglename]."
if(src.suittoggled)
src.icon_state = "[initial(icon_state)]"
src.suittoggled = 0
else if(!src.suittoggled)
src.icon_state = "[initial(icon_state)]_t"
src.suittoggled = 1
usr.update_inv_wear_suit()
//Hardsuit toggle code
/obj/item/clothing/suit/space/hardsuit/New()
MakeHelmet()
..()
/obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet()
if(!helmettype)
return
if(!helmet)
var/obj/item/clothing/head/helmet/space/hardsuit/W = new helmettype(src)
helmet = W
/obj/item/clothing/suit/space/hardsuit/ui_action_click()
..()
ToggleHelmet()
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
if(!helmettype)
return
if(slot != slot_wear_suit)
RemoveHelmet()
..()
/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet()
if(!helmettype)
return
suittoggled = 0
if(ishuman(helmet.loc))
var/mob/living/carbon/H = helmet.loc
if(helmet.on)
helmet.attack_self(H)
H.unEquip(helmet, 1)
H.update_inv_wear_suit()
helmet.loc = src
/obj/item/clothing/suit/space/hardsuit/dropped()
RemoveHelmet()
/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet()
var/mob/living/carbon/human/H = src.loc
if(!helmettype)
return
if(!suittoggled)
if(ishuman(src.loc))
if(H.wear_suit != src)
H << "You must be wearing [src] to engage the helmet."
return
if(H.head)
H << "You're already wearing something on your head."
return
else
H << "You engage the helmet on the hardsuit."
H.equip_to_slot_if_possible(helmet,slot_head,0,0,1)
suittoggled = 1
H.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
else
H << "You disengage the helmet on the hardsuit."
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
RemoveHelmet()
+2 -2
View File
@@ -18,7 +18,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
@@ -121,7 +121,7 @@
permeability_coefficient = 0.50
flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
strip_delay = 60
+5 -1
View File
@@ -24,4 +24,8 @@
/obj/item/clothing/under/shorts/grey
icon_state = "greyshorts"
item_color = "greyshorts"
item_color = "greyshorts"
/obj/item/clothing/under/shorts/purple
icon_state = "purpleshorts"
item_color = "purpleshorts"
@@ -8,26 +8,6 @@
var/mob/living/carbon/human/bloody_hands_mob
/proc/blood_incompatible(donor,receiver)
var/donor_antigen = copytext(donor,1,lentext(donor))
var/receiver_antigen = copytext(receiver,1,lentext(receiver))
var/donor_rh = findtext("+",donor)
var/receiver_rh = findtext("+",receiver)
if(donor_rh && !receiver_rh) return 1
switch(receiver_antigen)
if("A")
if(donor_antigen != "A" && donor_antigen != "O") return 1
if("B")
if(donor_antigen != "B" && donor_antigen != "O") return 1
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
return 0
/obj/item/weapon/reagent_containers/glass/rag
name = "damp rag"
desc = "For cleaning up messes, you suppose."
+2 -2
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/falsealarm
name = "False Alarm"
typepath = /datum/round_event/falsealarm
weight = 9
weight = 20
max_occurrences = 5
/datum/round_event/falsealarm
@@ -11,7 +11,7 @@
/datum/round_event/falsealarm/announce()
var/list/events_list = list()
for(var/datum/round_event_control/E in SSevent.control)
if(!E.holidayID) //No holiday cheer allowed during non-holidays. Not even fake holiday cheer.
if(!E.wizardevent && !E.holidayID) //No holiday cheer allowed during non-holidays. Not even fake holiday cheer.
events_list += E //No holiday cheer allowed during non-holidays. Not even fake holiday cheer.
var/datum/round_event_control/event_control = pick(events_list)
if(event_control)
+1 -1
View File
@@ -119,7 +119,7 @@
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/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/weapon/tank/internals/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.
+1 -1
View File
@@ -375,7 +375,7 @@ ________________________________________________________________________________
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt)
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_r_store)
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_l_store)
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(src), slot_s_store)
equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/carbondioxide(src), slot_back)
var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(src)
@@ -25,7 +25,7 @@
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
..()
extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "coco", "slimejelly", "banana", "berryjuice", "omnizine")
reagents.add_reagent("[extra_reagent]" = 3)
reagents.add_reagent("[extra_reagent]", 3)
if(prob(30))
icon_state = "donut2"
name = "frosted chaos donut"
@@ -40,7 +40,7 @@
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
..()
reagents.add_reagent("[extra_reagent]" = 5)
reagents.add_reagent("[extra_reagent]", 5)
if(prob(30))
icon_state = "jdonut2"
name = "frosted jelly Donut"
@@ -267,7 +267,7 @@
return
start()
if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
if (!wzhzhzh(10))
if (!microwave_operate(10))
abort()
return
stop()
@@ -278,17 +278,17 @@
if (!recipe)
dirty += 1
if (prob(max(10,dirty*5)))
if (!wzhzhzh(4))
if (!microwave_operate(4))
abort()
return
muck_start()
wzhzhzh(4)
microwave_operate(4)
muck_finish()
cooked = fail()
cooked.loc = src.loc
return
else if (has_extra_item())
if (!wzhzhzh(4))
if (!microwave_operate(4))
abort()
return
broke()
@@ -296,7 +296,7 @@
cooked.loc = src.loc
return
else
if (!wzhzhzh(10))
if (!microwave_operate(10))
abort()
return
stop()
@@ -305,10 +305,10 @@
return
else
var/halftime = round(recipe.time/10/2)
if (!wzhzhzh(halftime))
if (!microwave_operate(halftime))
abort()
return
if (!wzhzhzh(halftime))
if (!microwave_operate(halftime))
abort()
cooked = fail()
cooked.loc = src.loc
@@ -321,7 +321,7 @@
cooked = new cooked.type(loc)
return
/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num)
/obj/machinery/microwave/proc/microwave_operate(var/seconds as num)
for (var/i=1 to seconds)
if (stat & (NOPOWER|BROKEN))
return 0
+9 -2
View File
@@ -138,7 +138,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/harebell
seed = /obj/item/seeds/harebell
name = "harebell"
desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweetend not thy breath.\""
desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweetend not thy breath.\""
icon_state = "harebell"
slot_flags = SLOT_HEAD
@@ -478,6 +478,13 @@
reagents.add_reagent("vitamin", 1 + round((potency / 20), 1))
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1)
sleep(15)
user.visible_message("<B>[user]</B> laughs so hard they begin to suffocate!")
return (OXYLOSS)
/obj/item/weapon/reagent_containers/food/snacks/grown/chili
seed = /obj/item/seeds/chiliseed
name = "chili"
@@ -1130,4 +1137,4 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra/add_juice()
..()
reagents.add_reagent("salglu_solution", 1 + round((potency / 20), 1))
reagents.add_reagent("salglu_solution", 1 + round((potency / 20), 1))
@@ -257,6 +257,11 @@
throw_speed = 3
throw_range = 7
/obj/item/weapon/grown/bananapeel/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/grown/bananapeel/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
+3 -5
View File
@@ -475,8 +475,7 @@
/obj/item/weapon/resonator/proc/CreateResonance(var/target, var/creator)
if(cooldown <= 0)
playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
var/obj/effect/resonance/R = new /obj/effect/resonance(get_turf(target))
R.creator = creator
new /obj/effect/resonance(get_turf(target), creator)
cooldown = 1
spawn(20)
cooldown = 0
@@ -498,16 +497,15 @@
layer = 4.1
mouse_opacity = 0
var/resonance_damage = 20
var/creator = null
/obj/effect/resonance/New()
/obj/effect/resonance/New(loc, var/creator = null)
var/turf/proj_turf = get_turf(src)
if(!istype(proj_turf))
return
if(istype(proj_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = proj_turf
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
M.gets_drilled()
M.gets_drilled(creator)
spawn(5)
qdel(src)
else
+27 -17
View File
@@ -23,12 +23,12 @@
switch(severity)
if(3.0)
if (prob(75))
src.gets_drilled()
src.gets_drilled(null, 1)
if(2.0)
if (prob(90))
src.gets_drilled()
src.gets_drilled(null, 1)
if(1.0)
src.gets_drilled()
src.gets_drilled(null, 1)
return
/turf/simulated/mineral/New()
@@ -208,12 +208,9 @@
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) && stage == 1)
user.visible_message("<span class='notice'>You use [I] to locate where to cut off the chain reaction and attempt to stop it...</span>")
defuse()
if(istype(I, /obj/item/weapon/pickaxe))
src.activated_ckey = "[user.ckey]"
src.activated_name = "[user.name]"
..()
/turf/simulated/mineral/gibtonite/proc/explosive_reaction()
/turf/simulated/mineral/gibtonite/proc/explosive_reaction(var/mob/user = null, triggered_by_explosion = 0)
if(stage == 0)
icon_state = "rock_Gibtonite_active"
name = "gibtonite deposit"
@@ -222,13 +219,26 @@
visible_message("<span class='warning'>There was gibtonite inside! It's going to explode!</span>")
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
var/log_str = "[src.activated_ckey]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> [src.activated_name] has triggered a gibtonite deposit reaction <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
if(z != 5)
message_admins(log_str)
log_game("[src.activated_ckey] ([src.activated_name]) has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).")
countdown()
/turf/simulated/mineral/gibtonite/proc/countdown()
if(user)
activated_ckey = "[user.ckey]"
activated_name = "[user.name]"
var/notify_admins = 0
if(z != 5)
notify_admins = 1
if(!triggered_by_explosion)
message_admins("[src.activated_ckey]/([src.activated_name])<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has triggered a gibtonite deposit reaction at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
else
message_admins("An explosion has triggered a gibtonite deposit reaction at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
if(!triggered_by_explosion)
log_game("[src.activated_ckey] ([src.activated_name]) has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).")
else
log_game("An explosion has triggered a gibtonite deposit reaction at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
countdown(notify_admins)
/turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0)
spawn(0)
while(stage == 1 && det_time > 0 && mineralAmt >= 1)
det_time--
@@ -236,7 +246,7 @@
if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
var/turf/bombturf = get_turf(src)
mineralAmt = 0
explosion(bombturf,1,3,5, adminlog = 0)
explosion(bombturf,1,3,5, adminlog = notify_admins)
if(stage == 0 || stage == 2)
return
@@ -249,10 +259,10 @@
det_time = 0
visible_message("<span class='notice'>The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!</span>")
/turf/simulated/mineral/gibtonite/gets_drilled()
/turf/simulated/mineral/gibtonite/gets_drilled(var/mob/user, triggered_by_explosion = 0)
if(stage == 0 && mineralAmt >= 1) //Gibtonite deposit is activated
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
explosive_reaction()
explosive_reaction(user, triggered_by_explosion)
return
if(stage == 1 && mineralAmt >= 1) //Gibtonite deposit goes kaboom
var/turf/bombturf = get_turf(src)
@@ -397,7 +407,7 @@
if(do_after(user,P.digspeed))
user << "<span class='notice'>You finish cutting into the rock.</span>"
gets_drilled()
gets_drilled(user)
else
return attack_hand(user)
return
+3 -3
View File
@@ -132,7 +132,7 @@
..()
/obj/item/weapon/twohanded/required/gibtonite/ex_act()
GibtoniteReaction(triggered_by_explosive = 1)
GibtoniteReaction(null, 1)
/obj/item/weapon/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by_explosive = 0)
if(!primed)
@@ -148,12 +148,12 @@
if(triggered_by_explosive)
message_admins("An explosion has triggered a [name] to detonate at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
else
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has triggered a [name] to detonate at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
message_admins("[key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> has triggered a [name] to detonate at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
if(triggered_by_explosive)
log_game("An explosion has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
else
user.visible_message("<span class='warning'>[user] strikes \the [src], causing a chain reaction!</span>")
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
log_game("[key_name(user)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
spawn(det_time)
if(primed)
if(quality == 3)
@@ -53,6 +53,8 @@
verbs -= /mob/dead/observer/verb/boo
verbs -= /mob/dead/observer/verb/possess
animate(src, pixel_y = 2, time = 10, loop = -1)
..()
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0)
@@ -28,3 +28,14 @@
/mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
return
/mob/living/carbon/brain/Move(var/atom/newloc)
if(container)
container.Move(newloc)
else //something went very wrong.
CRASH("Brainmob without container")
. = ..()
loc = container
/mob/living/carbon/brain/UnarmedAttack(var/atom/A)//Stops runtimes due to attack_animal being the default
return
@@ -62,7 +62,7 @@
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)))
if(M.stat == DEAD && (M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT)) && !(M in viewers(src,null)))
M.show_message(message)
+5 -3
View File
@@ -168,6 +168,8 @@
if(status == "")
status = "OK"
src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]."
if(H.blood_max)
src << "<span class='danger'>You are bleeding!</span>"
if(staminaloss)
if(staminaloss > 30)
src << "<span class='info'>You're completely exhausted.</span>"
@@ -361,7 +363,7 @@
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[slot_back]'> [back ? back : "Nothing"]</A>"
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank/internals))
dat += "<BR><A href='?src=\ref[src];internal=1'>[internal ? "Disable Internals" : "Set Internals"]</A>"
if(handcuffed)
@@ -383,7 +385,7 @@
if(href_list["internal"])
var/slot = text2num(href_list["internal"])
var/obj/item/ITEM = get_item_by_slot(slot)
if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
visible_message("<span class='danger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].</span>", \
"<span class='userdanger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].</span>")
if(do_mob(usr, src, POCKET_STRIP_DELAY))
@@ -391,7 +393,7 @@
internal = null
if(internals)
internals.icon_state = "internal0"
else if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
else if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
internal = ITEM
if(internals)
internals.icon_state = "internal1"
@@ -12,6 +12,6 @@
//inventory slots
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
var/obj/item/weapon/tank/internal = null
var/obj/item/weapon/tank/internals/internal = null
var/datum/dna/dna = null//Carbon
+1 -1
View File
@@ -188,7 +188,7 @@
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)))
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
M.show_message(message)
@@ -0,0 +1,318 @@
/****************************************************
BLOOD SYSTEM
****************************************************/
//Blood levels
var/const/BLOOD_VOLUME_SAFE = 501
var/const/BLOOD_VOLUME_OKAY = 336
var/const/BLOOD_VOLUME_BAD = 224
var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here.
/mob/living/carbon/human/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't.
//Initializes blood vessels
/mob/living/carbon/human/proc/make_blood()
if(vessel)
return
vessel = new/datum/reagents(600)
vessel.my_atom = src
if(NOBLOOD in dna.species.specflags)
return
vessel.add_reagent("blood",560)
spawn(1)
fixblood()
//Resets blood data
/mob/living/carbon/human/proc/fixblood()
for(var/datum/reagent/blood/B in vessel.reagent_list)
if(B.id == "blood")
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
/mob/living/carbon/human/proc/suppress_bloodloss(var/amount)
if(bleedsuppress)
return
else
bleedsuppress = 1
spawn(amount)
bleedsuppress = 0
if(stat != DEAD && blood_max)
src << "<span class='warning'>The blood soaks through your bandage.</span>"
// Takes care blood loss and regeneration
/mob/living/carbon/human/proc/handle_blood()
if(NOBLOOD in dna.species.specflags)
return
if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
var/blood_volume = round(vessel.get_reagent_amount("blood"))
//Blood regeneration if there is some space
if(blood_volume < 560 && blood_volume)
var/datum/reagent/blood/B = locate() in vessel.reagent_list //Grab some blood
if(B) // Make sure there's some blood at all
if(B.data["donor"] != src) //If it's not theirs, then we look for theirs
for(var/datum/reagent/blood/D in vessel.reagent_list)
if(D.data["donor"] == src)
B = D
break
B.volume += 0.1 // regenerate blood VERY slowly
if (reagents.has_reagent("nutriment")) //Getting food speeds it up
B.volume += 0.4
reagents.remove_reagent("nutriment", 0.1)
if (reagents.has_reagent("iron")) //Hematogen candy anyone?
B.volume += 0.4
reagents.remove_reagent("iron", 0.1)
//Effects of bloodloss
switch(blood_volume)
if(BLOOD_VOLUME_SAFE to 10000)
if(pale)
pale = 0
update_body()
if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
if(!pale)
pale = 1
update_body()
var/word = pick("dizzy","woozy","faint")
src << "<span class='warning'>You feel [word].</span>"
if(oxyloss < 20)
oxyloss += 3
if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
if(!pale)
pale = 1
update_body()
if(oxyloss < 50)
oxyloss += 10
oxyloss += 1
if(prob(5))
eye_blurry += 6
var/word = pick("dizzy","woozy","faint")
src << "<span class='warning'>You feel very [word].</span>"
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
oxyloss += 5
if(prob(15))
Paralyse(rand(1,3))
var/word = pick("dizzy","woozy","faint")
src << "<span class='warning'>You feel extremely [word].</span>"
if(0 to BLOOD_VOLUME_SURVIVE)
death()
//Bleeding out
blood_max = 0
for(var/obj/item/organ/limb/org in organs)
var/brutedamage = org.brute_dam
if(brutedamage > 30)
blood_max += 0.5
if(brutedamage > 50)
blood_max += 1
if(brutedamage > 70)
blood_max += 2
if(bleedsuppress)
blood_max = 0
drip(blood_max)
//Makes a blood drop, leaking amt units of blood from the mob
/mob/living/carbon/human/proc/drip(var/amt as num)
if(!amt)
return
vessel.remove_reagent("blood",amt)
blood_splatter(src,src)
/****************************************************
BLOOD TRANSFERS
****************************************************/
//Gets blood from mob to the container, preserving all data in it.
/mob/living/carbon/proc/take_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/B = get_blood(container.reagents)
if(!B) B = new /datum/reagent/blood
B.holder = container
B.volume += amount
//set reagent data
B.data["donor"] = src
/*
if(T.virus && T.virus.spread_type != SPECIAL)
B.data["virus"] = new T.virus.type(0)
*/
for(var/datum/disease/D in src.viruses)
if(!B.data["viruses"])
B.data["viruses"] = list()
B.data["viruses"] += new D.type(0, D, 1)
B.data["blood_DNA"] = copytext(src.dna.unique_enzymes,1,0)
if(src.resistances&&src.resistances.len)
B.data["resistances"] = src.resistances.Copy()
var/list/temp_chem = list()
for(var/datum/reagent/R in src.reagents.reagent_list)
temp_chem += R.name
temp_chem[R.name] = R.volume
B.data["trace_chem"] = list2params(temp_chem)
if(mind)
B.data["mind"] = src.mind
if(ckey)
B.data["ckey"] = src.ckey
if(!suiciding)
B.data["cloneable"] = 1
B.data["blood_type"] = copytext(src.dna.blood_type,1,0)
B.data["gender"] = src.gender
B.data["real_name"] = src.real_name
B.data["factions"] = src.faction
return B
//For humans, blood does not appear from blue, it comes from vessels.
/mob/living/carbon/human/take_blood(obj/item/weapon/reagent_containers/container, var/amount)
if(NOBLOOD in dna.species.specflags)
return null
if(vessel.get_reagent_amount("blood") < amount)
return null
. = ..()
vessel.remove_reagent("blood",amount) // Removes blood if human
//Transfers blood from container to vessels
/mob/living/carbon/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/blood/injected = get_blood(container.reagents)
if(!injected)
return
for(var/datum/disease/D in injected.data["viruses"])
var/datum/disease/new_virus = D.Copy(1)
injected.data["viruses"] += new_virus
var/list/chems = list()
chems = params2list(injected.data["trace_chem"])
for(var/C in chems)
src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * amount)//adds trace chemicals to owner's blood
reagents.update_total()
container.reagents.remove_reagent("blood", amount)
//Transfers blood from container to vessels, respecting blood types compatability.
/mob/living/carbon/human/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/blood/injected = get_blood(container.reagents)
if(NOBLOOD in dna.species.specflags)
reagents.add_reagent("blood", amount, injected.data)
reagents.update_total()
return
var/datum/reagent/blood/our = get_blood(vessel)
if (!injected || !our)
return
if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) )
reagents.add_reagent("toxin",amount * 0.5)
reagents.update_total()
else
vessel.add_reagent("blood", amount, injected.data)
vessel.update_total()
..()
//Gets human's own blood.
/mob/living/carbon/proc/get_blood(datum/reagents/container)
var/datum/reagent/blood/res = locate() in container.reagent_list //Grab some blood
if(res) // Make sure there's some blood at all
if(res.data["donor"] != src) //If it's not theirs, then we look for theirs
for(var/datum/reagent/blood/D in container.reagent_list)
if(D.data["donor"] == src)
return D
return res
proc/blood_incompatible(donor,receiver,donor_species,receiver_species)
if(!donor || !receiver) return 0
if(donor_species && receiver_species)
if(donor_species != receiver_species)
return 1
var/donor_antigen = copytext(donor,1,lentext(donor))
var/receiver_antigen = copytext(receiver,1,lentext(receiver))
var/donor_rh = (findtext(donor,"+")>0)
var/receiver_rh = (findtext(receiver,"+")>0)
if(donor_rh && !receiver_rh) return 1
switch(receiver_antigen)
if("A")
if(donor_antigen != "A" && donor_antigen != "O") return 1
if("B")
if(donor_antigen != "B" && donor_antigen != "O") return 1
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
return 0
proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
var/obj/effect/decal/cleanable/blood/B
var/decal_type = /obj/effect/decal/cleanable/blood/splatter
var/turf/T = get_turf(target)
if(istype(source,/mob/living/carbon/human))
var/mob/living/carbon/human/M = source
source = M.get_blood(M.vessel)
else if(istype(source,/mob/living/carbon/monkey))
var/mob/living/carbon/monkey/donor = source
if(donor.dna)
source = new()
source.data["blood_DNA"] = donor.dna.unique_enzymes
source.data["blood_type"] = donor.dna.blood_type
// Are we dripping or splattering?
var/list/drips = list()
// Only a certain number of drips (or one large splatter) can be on a given turf.
for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
drips |= drop.drips
del(drop)
if(!large && drips.len < 3)
decal_type = /obj/effect/decal/cleanable/blood/drip
// Find a blood decal or create a new one.
B = locate(decal_type) in T
if(!B)
B = new decal_type(T)
var/obj/effect/decal/cleanable/blood/drip/drop = B
if(istype(drop) && drips && drips.len && !large)
drop.overlays |= drips
drop.drips |= drips
// If there's no data to copy, call it quits here.
if(!source)
return B
// Update blood information.
if(source.data["blood_DNA"])
B.blood_DNA = list()
if(source.data["blood_type"])
B.blood_DNA[source.data["blood_DNA"]] = source.data["blood_type"]
else
B.blood_DNA[source.data["blood_DNA"]] = "O+"
/* // Update virus information.
for(var/datum/disease/D in source.data["viruses"])
var/datum/disease/new_virus = D.Copy(1)
source.data["viruses"] += new_virus
new_virus.holder = B
*/
return B
@@ -322,7 +322,7 @@
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)))
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
M.show_message(message)
+37 -13
View File
@@ -230,6 +230,14 @@
else
msg += "[t_He] [t_is] quite chubby.\n"
if(pale)
msg += "[t_He] [t_has] pale skin.\n"
if(bleedsuppress)
msg += "[t_He] [t_is] bandaged with something.\n"
else if(blood_max)
msg += "<B>[t_He] [t_is] bleeding!</B>\n"
msg += "</span>"
if(!appears_dead)
@@ -252,21 +260,37 @@
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
if(!user.stat && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
var/criminal = "None"
var/perpname = get_face_name(get_id_name(""))
if(perpname)
var/datum/data/record/R = find_record("name", perpname, data_core.security)
if(istype(H.glasses, /obj/item/clothing/glasses/hud))
var/perpname = get_face_name(get_id_name(""))
if(perpname)
var/datum/data/record/R = find_record("name", perpname, data_core.general)
if(R)
msg += "<span class = 'deptradio'>Rank:</span> [R.fields["rank"]]<br>"
msg += "<a href='?src=\ref[src];hud=1;photo_front=1'>\[Front photo\]</a> "
msg += "<a href='?src=\ref[src];hud=1;photo_side=1'>\[Side photo\]</a><br>"
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
if(R)
criminal = R.fields["criminal"]
var/health = R.fields["p_stat"]
msg += "<a href='?src=\ref[src];hud=m;p_stat=1'>\[[health]\]</a>"
health = R.fields["m_stat"]
msg += "<a href='?src=\ref[src];hud=m;m_stat=1'>\[[health]\]</a><br>"
R = find_record("name", perpname, data_core.medical)
if(R)
msg += "<a href='?src=\ref[src];hud=m;evaluation=1'>\[Medical evaluation\]</a><br>"
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1;status=1'>\[[criminal]\]</a>\n"
msg += "<span class = 'deptradio'>Security record:</span> <a href='?src=\ref[src];criminal=1;view=1'>\[View\]</a> "
msg += "<a href='?src=\ref[src];criminal=1;add_crime=1'>\[Add crime\]</a> "
msg += "<a href='?src=\ref[src];criminal=1;view_comment=1'>\[View comment log\]</a> "
msg += "<a href='?src=\ref[src];criminal=1;add_comment=1'>\[Add comment\]</a>\n"
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
if(!user.stat && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
var/criminal = "None"
R = find_record("name", perpname, data_core.security)
if(R)
criminal = R.fields["criminal"]
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];hud=s;status=1'>\[[criminal]\]</a>\n"
msg += "<span class = 'deptradio'>Security record:</span> <a href='?src=\ref[src];hud=s;view=1'>\[View\]</a> "
msg += "<a href='?src=\ref[src];hud=s;add_crime=1'>\[Add crime\]</a> "
msg += "<a href='?src=\ref[src];hud=s;view_comment=1'>\[View comment log\]</a> "
msg += "<a href='?src=\ref[src];hud=s;add_comment=1'>\[Add comment\]</a>\n"
msg += "*---------*</span>"
+184 -102
View File
@@ -30,6 +30,8 @@
ready_dna(src)
randomize_human(src)
make_blood()
..()
var/mob/M = src
faction |= "\ref[M]"
@@ -158,7 +160,7 @@
<tr><td>&nbsp;</td></tr>"}
dat += "<tr><td><B>Back:</B></td><td><A href='?src=\ref[src];item=[slot_back]'>[(back && !(back.flags&ABSTRACT)) ? back : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(back, /obj/item/weapon/tank))
if(has_breathable_mask && istype(back, /obj/item/weapon/tank/internals))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr><tr><td>&nbsp;</td></tr>"
@@ -185,7 +187,7 @@
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=\ref[src];item=[slot_wear_suit]'>[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
if(wear_suit)
dat += "<tr><td>&nbsp;&#8627;<B>Suit Storage:</B></td><td><A href='?src=\ref[src];item=[slot_s_store]'>[(s_store && !(s_store.flags&ABSTRACT)) ? s_store : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank))
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank/internals))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_s_store]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
else
@@ -212,7 +214,7 @@
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Belt:</B></font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Belt:</B></td><td><A href='?src=\ref[src];item=[slot_belt]'>[(belt && !(belt.flags&ABSTRACT)) ? belt : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank))
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank/internals))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
dat += "<tr><td>&nbsp;&#8627;<B>Pockets:</B></td><td><A href='?src=\ref[src];pockets=left'>[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
@@ -247,7 +249,6 @@
siemens_coeff = G.siemens_coefficient
return ..(shock_damage,source,siemens_coeff)
/mob/living/carbon/human/Topic(href, href_list)
if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
if(href_list["item"])
@@ -293,113 +294,194 @@
..()
if(href_list["criminal"])
///////HUDs///////
if(href_list["hud"])
if(istype(usr, /mob/living/carbon/human))
var/mob/living/carbon/human/H = usr
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
var/allowed_access = null
var/obj/item/clothing/glasses/G = H.glasses
if (!G.emagged)
if(H.wear_id)
var/list/access = H.wear_id.GetAccess()
if(access_sec_doors in access)
allowed_access = H.get_authentification_name()
else
allowed_access = "@%&ERROR_%$*"
if(!allowed_access)
H << "<span class='warning'>ERROR: Invalid Access</span>"
return
var/perpname = get_face_name(get_id_name(""))
if(perpname)
var/datum/data/record/R = find_record("name", perpname, data_core.security)
var/perpname = get_face_name(get_id_name(""))
if(istype(H.glasses, /obj/item/clothing/glasses/hud))
var/datum/data/record/R = find_record("name", perpname, data_core.general)
if(href_list["photo_front"] || href_list["photo_side"])
if(R)
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(!H.canUseHUD()) return
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud)) return
var/obj/item/weapon/photo/P = null
if(href_list["photo_front"])
P = R.fields["photo_front"]
else if(href_list["photo_side"])
P = R.fields["photo_side"]
if(P)
P.show(H)
if(href_list["hud"] == "m")
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
if(href_list["p_stat"])
var/health = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel")
if(R)
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
if(!H.canUseHUD()) return
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return
if(health && health != "Cancel")
R.fields["p_stat"] = health
return
if(href_list["m_stat"])
var/health = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel")
if(R)
if(!H.canUseHUD()) return
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return
if(health && health != "Cancel")
R.fields["m_stat"] = health
return
if(href_list["evaluation"])
if(!getBruteLoss() && !getFireLoss() && !getOxyLoss() && getToxLoss() < 20)
usr << "<span class='notice'>No external injuries detected.</span><br>"
return
var/span = "notice"
var/status = ""
if(getBruteLoss())
usr << "<b>Physical trauma analysis:</b>"
for(var/obj/item/organ/limb/org in organs)
var/brutedamage = org.brute_dam
if(brutedamage > 0)
status = "received minor physical injuries."
span = "notice"
if(brutedamage > 20)
status = "been seriously damaged."
span = "danger"
if(brutedamage > 40)
status = "sustained major trauma!"
span = "userdanger"
if(brutedamage)
usr << "<span class='[span]'>The [org.getDisplayName()] appears to have [status]</span>"
if(getFireLoss())
usr << "<b>Analysis of skin burns:</b>"
for(var/obj/item/organ/limb/org in organs)
var/burndamage = org.burn_dam
if(burndamage > 0)
status = "signs of minor burns."
span = "notice"
if(burndamage > 20)
status = "serious burns."
span = "danger"
if(burndamage > 40)
status = "major burns!"
span = "userdanger"
if(burndamage)
usr << "<span class='[span]'>The [org.getDisplayName()] appears to have [status]</span>"
if(getOxyLoss())
usr << "<span class='danger'>Patient has signs of suffocation, emergency treatment may be required!</span>"
if(getToxLoss() > 20)
usr << "<span class='danger'>Gathered data is inconsistent with the analysis, possible cause: poisoning.</span>"
if(href_list["hud"] == "s")
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
var/allowed_access = null
var/obj/item/clothing/glasses/G = H.glasses
if (!G.emagged)
if(H.wear_id)
var/list/access = H.wear_id.GetAccess()
if(access_sec_doors in access)
allowed_access = H.get_authentification_name()
else
allowed_access = "@%&ERROR_%$*"
if(!allowed_access)
H << "<span class='warning'>ERROR: Invalid Access</span>"
return
if(perpname)
R = find_record("name", perpname, data_core.security)
if(R)
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(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
sec_hud_set_security_status()
return
if(href_list["view"])
if(R)
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>"
for(var/datum/data/crime/c in R.fields["mi_crim"])
usr << "<b>Crime:</b> [c.crimeName]"
usr << "<b>Details:</b> [c.crimeDetails]"
usr << "Added by [c.author] at [c.time]"
usr << "----------"
usr << "<b>Major Crimes:</b>"
for(var/datum/data/crime/c in R.fields["ma_crim"])
usr << "<b>Crime:</b> [c.crimeName]"
usr << "<b>Details:</b> [c.crimeDetails]"
usr << "Added by [c.author] at [c.time]"
usr << "----------"
usr << "<b>Notes:</b> [R.fields["notes"]]"
return
if(href_list["add_crime"])
switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
if("Minor Crime")
if(R)
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))
return
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
data_core.addMinorCrime(R.fields["id"], crime)
usr << "<span class='notice'>Successfully added a minor crime.</span>"
return
if("Major Crime")
if(R)
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))
return
var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
data_core.addMajorCrime(R.fields["id"], crime)
usr << "<span class='notice'>Successfully added a major crime.</span>"
return
else return
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))
if(H.canUseHUD())
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
R.fields["criminal"] = setcriminal
sec_hud_set_security_status()
return
usr << "<b>Comments/Log:</b>"
var/counter = 1
while(R.fields[text("com_[]", counter)])
usr << R.fields[text("com_[]", counter)]
usr << "----------"
counter++
return
if(href_list["add_comment"])
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))
if(href_list["view"])
if(R)
if(!H.canUseHUD()) return
else if(!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>"
for(var/datum/data/crime/c in R.fields["mi_crim"])
usr << "<b>Crime:</b> [c.crimeName]"
usr << "<b>Details:</b> [c.crimeDetails]"
usr << "Added by [c.author] at [c.time]"
usr << "----------"
usr << "<b>Major Crimes:</b>"
for(var/datum/data/crime/c in R.fields["ma_crim"])
usr << "<b>Crime:</b> [c.crimeName]"
usr << "<b>Details:</b> [c.crimeDetails]"
usr << "Added by [c.author] at [c.time]"
usr << "----------"
usr << "<b>Notes:</b> [R.fields["notes"]]"
return
if(href_list["add_crime"])
switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
if("Minor Crime")
if(R)
var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null)
var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null)
if(R)
if (!t1 || !t2 || !allowed_access) return
else if(!H.canUseHUD()) return
else if(!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)
usr << "<span class='notice'>Successfully added a minor crime.</span>"
return
if("Major Crime")
if(R)
var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null)
var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null)
if(R)
if (!t1 || !t2 || !allowed_access) return
else if (!H.canUseHUD()) return
else if (!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)
usr << "<span class='notice'>Successfully added a major crime.</span>"
return
if(href_list["view_comment"])
if(R)
if(!H.canUseHUD()) return
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
usr << "<b>Comments/Log:</b>"
var/counter = 1
while(R.fields[text("com_[]", counter)])
usr << R.fields[text("com_[]", counter)]
usr << "----------"
counter++
return
var/counter = 1
while(R.fields[text("com_[]", counter)])
counter++
R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []<BR>[]", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
usr << "<span class='notice'>Successfully added comment.</span>"
return
usr << "<span class='warning'>Unable to locate a data core entry for this person.</span>"
if(href_list["add_comment"])
if(R)
var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
if(R)
if (!t1 || !allowed_access) return
else if(!H.canUseHUD()) return
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
var/counter = 1
while(R.fields[text("com_[]", counter)])
counter++
R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []<BR>[]", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
usr << "<span class='notice'>Successfully added comment.</span>"
return
usr << "<span class='warning'>Unable to locate a data core entry for this person.</span>"
/mob/living/carbon/human/proc/canUseHUD()
return !(src.stat || src.weakened || src.stunned || src.restrained())
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
@@ -140,6 +140,10 @@ mob/living/carbon/human/proc/hat_fall_prob()
if(update) update_damage_overlays(0)
/mob/living/carbon/human/proc/restore_blood()
if(!NOBLOOD in dna.species.specflags)
var/blood_volume = vessel.get_reagent_amount("blood")
vessel.add_reagent("blood",560.0-blood_volume)
////////////////////////////////////////////
@@ -17,7 +17,7 @@
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
var/age = 30 //Player's age (pure fluff)
var/blood_type = "A+" //Player's bloodtype (Not currently used, just character fluff)
var/blood_type = "A+" //Player's bloodtype
var/underwear = "Nude" //Which underwear the player wants
var/undershirt = "Nude" //Which undershirt the player wants
@@ -49,3 +49,6 @@
var/xylophone = 0 //For the spoooooooky xylophone cooldown
var/gender_ambiguous = 0 //if something goes wrong during gender reassignment this generates a line in examine
var/blood_max = 0 //how much are we bleeding
var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding
@@ -84,6 +84,9 @@
//Disabilities
handle_disabilities()
//Blud
handle_blood()
//Random events (vomiting etc)
handle_random_events()
+2 -3
View File
@@ -21,8 +21,6 @@
/mob/living/carbon/human/treat_message(message)
if(dna)
message = dna.species.handle_speech(message,src)
message = dna.mutations_say_mods(message)
if(viruses.len)
for(var/datum/disease/pierrot_throat/D in viruses)
var/list/temp_message = text2list(message, " ") //List each word in the message
@@ -37,7 +35,8 @@
pick_list -= H //Make sure that you dont HONK the same word twice
message = list2text(temp_message, " ")
message = ..(message)
if(dna)
message = dna.mutations_say_mods(message)
return message
/mob/living/carbon/human/GetVoice()
@@ -697,8 +697,8 @@
if((H.disabilities & FAT) && grav)
mspeed += 1.5
if(H.bodytemperature < 283.222 && grav)
mspeed += (283.222 - H.bodytemperature) / 10 * 1.75
if(H.bodytemperature < 283.222)
mspeed += (283.222 - H.bodytemperature) / 10 * (grav+0.5)
mspeed += speedmod
@@ -731,7 +731,7 @@
return 0
if(H.cpr_time < world.time + 30)
add_logs(H, M, "CPRed")
add_logs(M, H, "CPRed")
M.visible_message("<span class='notice'>[M] is trying to perform CPR on [H]!</span>", \
"<span class='notice'>You try to perform CPR on [H]. Hold still!</span>")
if(!do_mob(M, H))
@@ -127,6 +127,7 @@
sexes = 0
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/shadow
specflags = list(NOBREATH,NOBLOOD,RADIMMUNE)
/datum/species/shadow/spec_life(mob/living/carbon/human/H)
var/light_amount = 0
@@ -152,7 +153,7 @@
default_color = "00FFFF"
darksight = 3
invis_sight = SEE_INVISIBLE_LEVEL_ONE
specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
hair_color = "mutcolor"
hair_alpha = 150
ignored_by = list(/mob/living/carbon/slime)
@@ -169,7 +170,7 @@
default_color = "00FF90"
say_mod = "chirps"
eyes = "jelleyes"
specflags = list(MUTCOLORS,EYECOLOR)
specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/slime
/*
@@ -228,6 +229,7 @@
id = "skeleton"
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/skeleton
specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
/*
ZOMBIES
*/
@@ -239,6 +241,7 @@
say_mod = "moans"
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/zombie
specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
/datum/species/zombie/handle_speech(message)
var/list/message_list = text2list(message, " ")
@@ -46,7 +46,7 @@
var/list/listening_dead = list()
for(var/mob/M in player_list)
if(M.stat == DEAD && ((M.client.prefs.toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7)))
if(M.stat == DEAD && M.client && ((M.client.prefs.toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7)))
listening_dead |= M
var/list/listening = get_hearers_in_view(1, src)
+18 -7
View File
@@ -204,6 +204,12 @@
updatehealth()
return
/mob/living/carbon/slime/MouseDrop(var/atom/movable/A as mob|obj)
if(isliving(A) && A != src && usr == src)
var/mob/living/Food = A
if(Food.Adjacent(src) && !stat && Food.stat != DEAD) //messy
Feedon(Food)
..()
/mob/living/carbon/slime/unEquip(obj/item/W as obj)
return
@@ -216,14 +222,19 @@
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
..()
var/damage = rand(1, 3)
if(src.Victim)
src.Victim = null
visible_message("<span class='danger'>[M] pulls [src] off!</span>")
return
attacked += 5
if(M.is_adult)
damage = rand(1, 6)
else
damage = rand(1, 3)
adjustBruteLoss(damage)
updatehealth()
if(src.nutrition >= 100) //steal some nutrition. negval handled in life()
src.nutrition -= (50 + (5 * M.amount_grown))
M.add_nutrition(50 + (5 * M.amount_grown))
if(src.health > 0)
src.adjustBruteLoss(4 + (2 * M.amount_grown)) //amt_grown isn't very linear but it works
src.updatehealth()
M.adjustBruteLoss(-4 + (-2 * M.amount_grown))
M.updatehealth()
return
/mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob)
+1 -1
View File
@@ -268,7 +268,7 @@
if(!M.client || istype(M, /mob/new_player))
continue //skip monkeys, leavers and new players
var/T = get_turf(src)
if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null)))
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null)))
M.show_message(message)
+36 -27
View File
@@ -74,7 +74,7 @@ Sorry Giacom. Please don't be mad :(
//okay, so we didn't switch. but should we push?
//not if he's not CANPUSH of course
if(!(M.status_flags & CANPUSH) )
if(!(M.status_flags & CANPUSH))
return 1
//anti-riot equipment is also anti-push
if(M.r_hand && istype(M.r_hand, /obj/item/weapon/shield/riot))
@@ -410,6 +410,9 @@ Sorry Giacom. Please don't be mad :(
dead_mob_list -= src
living_mob_list += src
if(!isanimal(src)) stat = CONSCIOUS
if(ishuman(src))
var/mob/living/carbon/human/human_mob = src
human_mob.restore_blood()
update_fire()
regenerate_icons()
..()
@@ -492,30 +495,8 @@ Sorry Giacom. Please don't be mad :(
M.stop_pulling()
//this is the gay blood on floor shit -- Added back -- Skie
if (M.lying && (prob(M.getBruteLoss() / 2)))
var/blood_exists = 0
var/trail_type = M.getTrail()
for(var/obj/effect/decal/cleanable/trail_holder/C in M.loc) //checks for blood splatter already on the floor
blood_exists = 1
if (istype(M.loc, /turf/simulated) && trail_type != null)
var/newdir = get_dir(T, M.loc)
if(newdir != M.dir)
newdir = newdir | M.dir
if(newdir == 3) //N + S
newdir = NORTH
else if(newdir == 12) //E + W
newdir = EAST
if((newdir in list(1, 2, 4, 8)) && (prob(50)))
newdir = turn(get_dir(T, M.loc), 180)
if(!blood_exists)
new /obj/effect/decal/cleanable/trail_holder(M.loc)
for(var/obj/effect/decal/cleanable/trail_holder/H in M.loc)
if((!(newdir in H.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && H.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled)
H.existing_dirs += newdir
H.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir))
if(check_dna_integrity(M)) //blood DNA
var/mob/living/carbon/DNA_helper = pulling
H.blood_DNA[DNA_helper.dna.unique_enzymes] = DNA_helper.dna.blood_type
if(M.lying && (prob(M.getBruteLoss() / 2)))
makeTrail(T, M)
pulling.Move(T, get_dir(pulling, T))
if(M)
M.start_pulling(t)
@@ -532,6 +513,35 @@ Sorry Giacom. Please don't be mad :(
for(var/mob/living/carbon/slime/M in view(1,src))
M.UpdateFeed(src)
/mob/living/proc/makeTrail(var/turf/T, var/mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if((NOBLOOD in H.dna.species.specflags) || (!H.blood_max) || (H.bleedsuppress))
return
var/blood_exists = 0
var/trail_type = M.getTrail()
for(var/obj/effect/decal/cleanable/trail_holder/C in M.loc) //checks for blood splatter already on the floor
blood_exists = 1
if (istype(M.loc, /turf/simulated) && trail_type != null)
var/newdir = get_dir(T, M.loc)
if(newdir != M.dir)
newdir = newdir | M.dir
if(newdir == 3) //N + S
newdir = NORTH
else if(newdir == 12) //E + W
newdir = EAST
if((newdir in list(1, 2, 4, 8)) && (prob(50)))
newdir = turn(get_dir(T, M.loc), 180)
if(!blood_exists)
new /obj/effect/decal/cleanable/trail_holder(M.loc)
for(var/obj/effect/decal/cleanable/trail_holder/H in M.loc)
if((!(newdir in H.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && H.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled)
H.existing_dirs += newdir
H.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir))
if(check_dna_integrity(M)) //blood DNA
var/mob/living/carbon/DNA_helper = pulling
H.blood_DNA[DNA_helper.dna.unique_enzymes] = DNA_helper.dna.blood_type
/mob/living/proc/getTrail() //silicon and simple_animals don't get blood trails
return null
@@ -667,8 +677,7 @@ Sorry Giacom. Please don't be mad :(
var/mob/living/carbon/CM = L
if(CM.on_fire && CM.canmove)
CM.fire_stacks -= 5
CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
CM.update_canmove()
CM.Weaken(3,1)
CM.spin(32,2)
CM.visible_message("<span class='danger'>[CM] rolls on the floor, trying to put themselves out!</span>", \
"<span class='notice'>You stop, drop, and roll!</span>")
+1 -1
View File
@@ -161,7 +161,7 @@ var/list/department_radio_keys = list(
var/list/listening = get_hearers_in_view(message_range, source)
var/list/listening_dead = list()
for(var/mob/M in player_list)
if(M.stat == DEAD && ((M.client.prefs.toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7))&& client) // client is so that ghosts don't have to listen to mice
if(M.stat == DEAD && M.client && ((M.client.prefs.toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice
listening_dead |= M
listening -= listening_dead //so ghosts dont hear stuff twice
+1 -2
View File
@@ -34,7 +34,6 @@ var/list/ai_list = list()
radiomod = ";" //AIs will, by default, state their laws on the internal radio.
var/obj/item/device/pda/ai/aiPDA = null
var/obj/item/device/multitool/aiMulti = null
var/obj/item/device/camera/siliconcam/aicamera = null
var/obj/machinery/bot/Bot
//MALFUNCTION
@@ -318,7 +317,7 @@ var/list/ai_list = list()
return 0
/mob/living/silicon/ai/proc/ai_cancel_call()
set category = "AI Commands"
set category = "Malfunction"
if(src.stat == 2)
src << "You can't send the shuttle back because you are dead!"
return
@@ -673,7 +673,6 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg',
"vox" = 'sound/vox_fem/vox.ogg',
"vox_login" = 'sound/vox_fem/vox_login.ogg',
"voxtest" = 'sound/vox_fem/voxtest.ogg',
"voxtest2" = 'sound/vox_fem/voxtest2.ogg',
"w" = 'sound/vox_fem/w.ogg',
"walk" = 'sound/vox_fem/walk.ogg',
"wall" = 'sound/vox_fem/wall.ogg',
@@ -178,6 +178,14 @@
/mob/living/silicon/pai/UnarmedAttack(var/atom/A)//Stops runtimes due to attack_animal being the default
return
/mob/living/silicon/pai/Move(var/atom/newloc)
if(card)
card.Move(newloc)
else //something went very wrong.
CRASH("pAI without card")
. = ..()
loc = card
//Addition by Mord_Sith to define AI's network change ability
/*
/mob/living/silicon/pai/proc/pai_network_change()
+29 -4
View File
@@ -30,7 +30,7 @@
else
message = "<B>[src]</B> beeps."
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 1
m_type = 2
if ("bow")
if (!src.buckled)
@@ -63,7 +63,17 @@
else
message = "<B>[src]</B> buzzes."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 1
m_type = 2
if ("buzz2")
message = "<B>[src]</B> buzzes twice."
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
m_type = 2
if ("chime") //You have mail!
message = "<B>[src]</B> chimes."
playsound(loc, 'sound/machines/chime.ogg', 50, 0)
m_type = 2
if ("clap")
if (!src.restrained())
@@ -107,6 +117,11 @@
else
message = "<B>[src]</B> glares."
if ("honk") //Honk!
message = "<B>[src]</B> honks!"
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
m_type = 2
if ("look")
var/M = null
if (param)
@@ -153,7 +168,12 @@
else
message = "<B>[src]</B> pings."
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
m_type = 1
m_type = 2
if ("sad") //When words cannot express...
message = "<B>[src]</B> plays a sad trombone."
playsound(loc, 'sound/misc/sadtrombone.ogg', 50, 0)
m_type = 2
if ("salute")
if (!src.buckled)
@@ -194,8 +214,13 @@
message = "<B>[src]</B> twitches."
m_type = 1
if ("warn") //HUMAN HARM DETECTED. PLEASE DIE IN AN ORDERLY FASHION.
message = "<B>[src]</B> blares an alarm!"
playsound(loc, 'sound/machines/warning-buzzer.ogg', 50, 0)
m_type = 2
if ("help")
src << "Help for cyborg emotes. You can use these emotes with say \"*emote\":\n\naflap, beep-(none)/mob, bow-(none)/mob, buzz-(none)/mob, clap, custom, deathgasp, flap, glare-(none)/mob, look-(none)/mob, me, nod, ping-(none)/mob, \nsalute-(none)/mob, twitch, twitch_s,"
src << "Help for cyborg emotes. You can use these emotes with say \"*emote\":\n\naflap, beep-(none)/mob, bow-(none)/mob, buzz-(none)/mob,buzz2,chime, clap, custom, deathgasp, flap, glare-(none)/mob, honk, look-(none)/mob, me, nod, ping-(none)/mob, sad, \nsalute-(none)/mob, twitch, twitch_s, warn,"
else
src << "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>"
@@ -56,7 +56,6 @@
var/obj/item/weapon/tank/internal = null //Hatred. Used if a borg has a jetpack.
var/obj/item/robot_parts/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of..
var/obj/item/device/camera/siliconcam/aicamera = null //photography
var/toner = 0
var/tonermax = 40
@@ -253,6 +253,7 @@
modules += new /obj/item/weapon/card/emag(src)
modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
modules += new /obj/item/weapon/crowbar(src)
modules += new /obj/item/weapon/pinpointer/operative(src)
emag = null
fix_modules()
+6 -1
View File
@@ -9,6 +9,7 @@
var/list/alarms_to_clear = list()
var/designation = ""
var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all.
var/obj/item/device/camera/siliconcam/aicamera = null //photography
var/obj/item/device/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say()
@@ -413,4 +414,8 @@
return
/mob/living/silicon/setEarDamage()
return
return
/mob/living/silicon/proc/GetPhoto()
if (aicamera)
return aicamera.selectpicture(aicamera)
@@ -110,7 +110,7 @@
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
corpseback = /obj/item/weapon/tank/jetpack/oxygen
corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
corpsepocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
@@ -153,8 +153,8 @@
/obj/item/device/radio,
/obj/item/device/radio/off,
/obj/item/clothing/suit/cardborg,
/obj/item/weapon/tank/oxygen,
/obj/item/weapon/tank/air,
/obj/item/weapon/tank/internals/oxygen,
/obj/item/weapon/tank/internals/air,
/obj/item/weapon/extinguisher
)
@@ -11,6 +11,7 @@
response_harm = "hits"
speed = 0
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
skin_type = /obj/item/stack/sheet/animalhide/xeno
meat_amount = 3
maxHealth = 100
health = 100
@@ -21,6 +21,7 @@
melee_damage_upper = 12
attacktext = "attacks"
attack_sound = 'sound/weapons/bite.ogg'
var/Attackemote = "growls at"
min_oxy = 0
max_oxy = 0
@@ -38,7 +39,7 @@
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
emote("me", 1, "growls at [.].")
emote("me", 1, "[Attackemote] [.].")
/mob/living/simple_animal/hostile/mimic/Die()
..()
@@ -232,3 +233,116 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
return 0
return ..()
//
//animated blasters, wands, etc
//
/mob/living/simple_animal/hostile/mimic/copy/ranged
name = "animated shooty gun"
desc = "there's something fishy here."
environment_smash = 0 //needed? seems weird for them to do so
ranged = 1
retreat_distance = 1 //just enough to shoot
minimum_distance = 6
projectiletype = /obj/item/projectile/magic/
projectilesound = 'sound/items/bikehorn.ogg'
casingtype = null
Attackemote = "aims menacingly at"
var/obj/item/weapon/gun/TrueGun = null
var/obj/item/weapon/gun/magic/Zapstick = list()
var/obj/item/weapon/gun/projectile/Pewgun = list()
var/obj/item/weapon/gun/energy/Zapgun = list()
/mob/living/simple_animal/hostile/mimic/copy/ranged/New(loc, var/obj/copy, var/mob/living/creator, var/destroy_original = 0)
..()
/mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(var/obj/O, var/mob/living/creator, var/destroy_original = 0)
if(destroy_original || CheckObject(O))
O.loc = src
name = O.name
desc = O.desc
icon = O.icon
icon_state = O.icon_state
icon_living = icon_state
if(istype(O, /obj/item/weapon/gun)) //leaving for sanity i guess
var/obj/item/weapon/gun/G = O
health = 15 * G.w_class
melee_damage_upper = G.force
melee_damage_lower = G.force - max(0, (G.force / 2))
move_to_delay = 2 * G.w_class + 1
projectilesound = G.fire_sound
TrueGun = G
if(istype(G, /obj/item/weapon/gun/magic))
Zapstick = G
var/obj/item/ammo_casing/magic/Zapshot = new Zapstick.ammo_type //this is done because ammo_type.proj_type can't be directly checked
projectiletype = Zapshot.projectile_type
qdel(Zapshot) //is this needed? i dare not risk piles of nullspace bullets
if(istype(G, /obj/item/weapon/gun/projectile))
Pewgun = G
var/obj/item/ammo_box/magazine/Pewmag = new Pewgun.mag_type //same problem, mag_type.ammo_type.proj_type can't be checked directly
var/obj/item/ammo_casing/Pewshot = new Pewmag.ammo_type
projectiletype = Pewshot.projectile_type
casingtype = Pewmag.ammo_type
qdel(Pewshot)
qdel(Pewmag)
if(istype(G, /obj/item/weapon/gun/energy))
Zapgun = G
var/selectfiresetting = Zapgun.select
var/obj/item/ammo_casing/energy/Energyammotype = Zapgun.ammo_type[selectfiresetting]
projectiletype = Energyammotype.projectile_type
maxHealth = health
if(creator)
src.creator = creator
faction += "\ref[creator]"
if(destroy_original)
qdel(O)
return 1
return
/mob/living/simple_animal/hostile/mimic/copy/ranged/OpenFire(var/the_target)
if(Zapgun)
if(Zapgun.power_supply) //sanity
var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.select]
if(Zapgun.power_supply.charge >= shot.e_cost) //if she can zap
Zapgun.power_supply.use(shot.e_cost)
Zapgun.update_icon()
..() //zap 'em
if(Zapstick)
if(Zapstick.charges)
Zapstick.charges--
Zapstick.update_icon()
..()
if(Pewgun)
if(Pewgun.chambered)
if(Pewgun.chambered.BB)
qdel(Pewgun.chambered.BB)
Pewgun.chambered.BB = null //because qdel takes too long, ensures icon update
Pewgun.chambered.update_icon()
..()
else
visible_message("<span class='danger'>The <b>[src]</b> clears a jam!</span>")
Pewgun.chambered.loc = src.loc //rip revolver immersions, blame shotgun snowflake procs
Pewgun.chambered = null
if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len)
Pewgun.chambered = Pewgun.magazine.get_round(0)
Pewgun.chambered.loc = Pewgun
Pewgun.update_icon()
else if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) //only true for pumpguns i think
Pewgun.chambered = Pewgun.magazine.get_round(0)
Pewgun.chambered.loc = Pewgun
visible_message("<span class='danger'>The <b>[src]</b> cocks itself!</span>")
else //if somehow the mimic has no weapon
src.ranged = 0 //BANZAIIII
src.retreat_distance = 0
src.minimum_distance = 1
src.icon_state = TrueGun.icon_state
src.icon_living = TrueGun.icon_state
return
@@ -20,6 +20,7 @@
var/turns_since_move = 0
var/meat_amount = 0
var/meat_type
var/skin_type
var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals.
var/wander = 1 // Does the mob wander around when idle?
var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it.
@@ -219,6 +220,8 @@
if(meat_amount && meat_type)
for(var/i = 0; i < meat_amount; i++)
new meat_type(src.loc)
if(skin_type)
new skin_type(src.loc)
..()
@@ -347,7 +350,7 @@
else
user << "<span class='notice'> [src] is dead, medical items won't bring it back to life.</span>"
return
if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if((meat_type || skin_type) && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if(istype(O, /obj/item/weapon/kitchenknife))
harvest()
+4 -2
View File
@@ -705,6 +705,8 @@ var/list/slot_equipment_priority = list( \
ETA = "ETD"
if(SHUTTLE_ESCAPE)
ETA = "ESC"
if(SHUTTLE_STRANDED)
ETA = "ERR"
if(ETA)
var/timeleft = SSshuttle.emergency.timeLeft()
stat(null, "[ETA]-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
@@ -867,8 +869,8 @@ var/list/slot_equipment_priority = list( \
update_canmove()
return
/mob/proc/Weaken(amount)
if(status_flags & CANWEAKEN)
/mob/proc/Weaken(amount, var/ignore_canweaken = 0)
if(status_flags & CANWEAKEN || ignore_canweaken)
weakened = max(max(weakened,amount),0)
update_canmove() //updates lying, canmove and icons
return
@@ -68,7 +68,7 @@
var/icon/clothes_s = null
if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high'
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
else if(backbag == 3)
@@ -78,7 +78,7 @@
switch(job_civilian_high)
if(HOP)
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hopcap"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -86,7 +86,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(BARTENDER)
clothes_s = new /icon('icons/mob/uniform.dmi', "bar_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armoralt"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -94,7 +94,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(BOTANIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY)
if(backbag == 2)
@@ -103,7 +103,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(COOK)
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "chef"), ICON_OVERLAY)
if(backbag == 2)
@@ -112,22 +112,22 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(JANITOR)
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(LIBRARIAN)
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(QUARTERMASTER)
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -135,21 +135,21 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CARGOTECH)
clothes_s = new /icon('icons/mob/uniform.dmi', "cargo_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(MINER)
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(LAWYER)
clothes_s = new /icon('icons/mob/uniform.dmi', "bluesuit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "briefcase"), ICON_OVERLAY)
if(backbag == 2)
@@ -158,7 +158,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CHAPLAIN)
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "bible"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -166,12 +166,12 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CLOWN)
clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY)
if(MIME)
clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY)
@@ -185,7 +185,7 @@
switch(job_medsci_high)
if(RD)
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY)
if(backbag == 2)
@@ -194,7 +194,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(SCIENTIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -202,7 +202,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CHEMIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -210,7 +210,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CMO)
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY)
if(backbag == 2)
@@ -219,7 +219,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(DOCTOR)
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY)
if(backbag == 2)
@@ -228,7 +228,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(GENETICIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -236,7 +236,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(VIROLOGIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir"), ICON_OVERLAY)
if(backbag == 2)
@@ -245,7 +245,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(ROBOTICIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "toolbox_blue"), ICON_OVERLAY)
if(backbag == 2)
@@ -257,9 +257,9 @@
switch(job_engsec_high)
if(CAPTAIN)
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "captainpack"), ICON_OVERLAY)
@@ -267,10 +267,10 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY)
if(HOS)
clothes_s = new /icon('icons/mob/uniform.dmi', "hos_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberetblack"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
@@ -278,10 +278,10 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(WARDEN)
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "policehelm"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
@@ -289,7 +289,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(DETECTIVE)
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY)
@@ -300,9 +300,9 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(OFFICER)
clothes_s = new /icon('icons/mob/uniform.dmi', "security_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret_badge"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
@@ -310,7 +310,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(CHIEF)
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
@@ -321,7 +321,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(ENGINEER)
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "workboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY)
if(backbag == 2)
@@ -330,7 +330,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(ATMOSTECH)
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
+7 -9
View File
@@ -27,10 +27,6 @@
var/rigged = 0
var/spam_flag = 0
var/const/deffont = "Verdana"
var/const/signfont = "Times New Roman"
var/const/crayonfont = "Comic Sans MS"
/obj/item/weapon/paper/New()
..()
@@ -148,8 +144,8 @@
info_links = info
var/i = 0
for(i=1,i<=fields,i++)
addtofield(i, "<font face=\"[deffont]\"><A href='?src=\ref[src];write=[i]'>write</A></font>", 1)
info_links = info_links + "<font face=\"[deffont]\"><A href='?src=\ref[src];write=end'>write</A></font>"
addtofield(i, "<font face=\"[PEN_FONT]\"><A href='?src=\ref[src];write=[i]'>write</A></font>", 1)
info_links = info_links + "<font face=\"[PEN_FONT]\"><A href='?src=\ref[src];write=end'>write</A></font>"
/obj/item/weapon/paper/proc/clearpaper()
@@ -178,7 +174,7 @@
t = replacetext(t, "\[/u\]", "</U>")
t = replacetext(t, "\[large\]", "<font size=\"4\">")
t = replacetext(t, "\[/large\]", "</font>")
t = replacetext(t, "\[sign\]", "<font face=\"[signfont]\"><i>[user.real_name]</i></font>")
t = replacetext(t, "\[sign\]", "<font face=\"[SIGNFONT]\"><i>[user.real_name]</i></font>")
t = replacetext(t, "\[field\]", "<span class=\"paper_field\"></span>")
if(!iscrayon)
@@ -189,7 +185,7 @@
t = replacetext(t, "\[list\]", "<ul>")
t = replacetext(t, "\[/list\]", "</ul>")
t = "<font face=\"[deffont]\" color=[P.colour]>[t]</font>"
t = "<font face=\"[PEN_FONT]\" color=[P.colour]>[t]</font>"
else // If it is a crayon, and he still tries to use these, make them empty!
t = replacetext(t, "\[*\]", "")
t = replacetext(t, "\[hr\]", "")
@@ -198,7 +194,7 @@
t = replacetext(t, "\[list\]", "")
t = replacetext(t, "\[/list\]", "")
t = "<font face=\"[crayonfont]\" color=[P.colour]><b>[t]</b></font>"
t = "<font face=\"[CRAYON_FONT]\" color=[P.colour]><b>[t]</b></font>"
// t = replacetext(t, "#", "") // Junk converted to nothing!
@@ -244,6 +240,8 @@
if(href_list["write"])
var/id = href_list["write"]
var/t = stripped_multiline_input("Enter what you want to write:", "Write")
if(!t)
return
var/obj/item/i = usr.get_active_hand() //Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/iscrayon = 0
if(!istype(i, /obj/item/weapon/pen))
+1 -1
View File
@@ -49,7 +49,7 @@
P = new /obj/item/weapon/paper
if(SSevent.holiday == "April Fool's Day")
if(prob(30))
P.info = "<font face=\"[P.crayonfont]\" color=\"red\"><b>HONK HONK HONK HONK HONK HONK HONK<br>HOOOOOOOOOOOOOOOOOOOOOONK<br>APRIL FOOLS</b></font>"
P.info = "<font face=\"[CRAYON_FONT]\" color=\"red\"><b>HONK HONK HONK HONK HONK HONK HONK<br>HOOOOOOOOOOOOOOOOOOOOOONK<br>APRIL FOOLS</b></font>"
P.rigged = 1
P.updateinfolinks()
+3 -3
View File
@@ -70,8 +70,8 @@
else //no toner? shitty copies for you!
c.info = "<font color = #808080>"
var/copied = copy.info
copied = replacetext(copied, "<font face=\"[c.deffont]\" color=", "<font face=\"[c.deffont]\" nocolor=") //state of the art techniques in action
copied = replacetext(copied, "<font face=\"[c.crayonfont]\" color=", "<font face=\"[c.crayonfont]\" nocolor=") //This basically just breaks the existing color tag, which we need to do because the innermost tag takes priority.
copied = replacetext(copied, "<font face=\"[PEN_FONT]\" color=", "<font face=\"[PEN_FONT]\" nocolor=") //state of the art techniques in action
copied = replacetext(copied, "<font face=\"[CRAYON_FONT]\" color=", "<font face=\"[CRAYON_FONT]\" nocolor=") //This basically just breaks the existing color tag, which we need to do because the innermost tag takes priority.
c.info += copied
c.info += "</font>"
c.name = copy.name
@@ -188,7 +188,7 @@
var/datum/picture/selection
var/mob/living/silicon/ai/tempAI = usr
if(tempAI.aicamera.aipictures.len == 0)
usr << "<spanclass='userdanger'>No images saved</span>"
usr << "<span class='userdanger'>No images saved</span>"
return
for(var/datum/picture/t in tempAI.aicamera.aipictures)
nametemp += t.fields["name"]
+6 -6
View File
@@ -332,22 +332,22 @@
else
injectaialbum(icon, img, desc, pixel_x, pixel_y, blueprintsinject)
obj/item/device/camera/siliconcam/proc/viewpichelper(var/obj/item/device/camera/siliconcam/targetloc)
obj/item/device/camera/siliconcam/proc/selectpicture(var/obj/item/device/camera/siliconcam/targetloc)
var/list/nametemp = list()
var/find
var/datum/picture/selection
if(targetloc.aipictures.len == 0)
usr << "<span class='userdanger'>No images saved</span>"
return
for(var/datum/picture/t in targetloc.aipictures)
nametemp += t.fields["name"]
find = input("Select image (numbered in order taken)") in nametemp
var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
for(var/datum/picture/q in targetloc.aipictures)
if(q.fields["name"] == find)
selection = q
break // just in case some AI decides to take 10 thousand pictures in a round
return q
obj/item/device/camera/siliconcam/proc/viewpichelper(var/obj/item/device/camera/siliconcam/targetloc)
var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
var/datum/picture/selection = selectpicture(targetloc)
P.photocreate(selection.fields["icon"], selection.fields["img"], selection.fields["desc"])
P.pixel_x = selection.fields["pixel_x"]
P.pixel_y = selection.fields["pixel_y"]
+4
View File
@@ -13,6 +13,10 @@
pressure_resistance = 2
attack_verb = list("stamped")
/obj/item/weapon/stamp/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] stamps 'VOID' on \his forehead, then promptly falls over, dead.</span>")
return (OXYLOSS)
/obj/item/weapon/stamp/qm
name = "quartermaster's rubber stamp"
icon_state = "stamp-qm"
+3 -3
View File
@@ -10,7 +10,7 @@ var/global/list/rad_collectors = list()
density = 1
req_access = list(access_engine_equip)
// use_power = 0
var/obj/item/weapon/tank/plasma/P = null
var/obj/item/weapon/tank/internals/plasma/P = null
var/last_power = 0
var/active = 0
var/locked = 0
@@ -57,7 +57,7 @@ var/global/list/rad_collectors = list()
return 1
else if(istype(W, /obj/item/device/analyzer) && P)
atmosanalyzer_scan(P.air_contents, user)
else if(istype(W, /obj/item/weapon/tank/plasma))
else if(istype(W, /obj/item/weapon/tank/internals/plasma))
if(!src.anchored)
user << "<span class='danger'>The [src] needs to be secured to the floor first.</span>"
return 1
@@ -115,7 +115,7 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/proc/eject()
locked = 0
var/obj/item/weapon/tank/plasma/Z = src.P
var/obj/item/weapon/tank/internals/plasma/Z = src.P
if (!Z)
return
Z.loc = get_turf(src)
@@ -38,24 +38,6 @@
select_name = "DESTROY"
fire_sound = 'sound/weapons/pulse.ogg'
/obj/item/ammo_casing/energy/laser/pulse/carbine
e_cost = 50
/obj/item/ammo_casing/energy/laser/carbine
e_cost = 50
/obj/item/ammo_casing/energy/electrode/carbine
e_cost = 50
/obj/item/ammo_casing/energy/laser/pulse/pistol
e_cost = 100
/obj/item/ammo_casing/energy/laser/pistol
e_cost = 50
/obj/item/ammo_casing/energy/electrode/pistol
e_cost = 50
/obj/item/ammo_casing/energy/laser/bluetag
projectile_type = /obj/item/projectile/lasertag/bluetag
select_name = "bluetag"
+2 -3
View File
@@ -123,6 +123,8 @@
user << "<span class='notice'>You don't have the dexterity to do this!</span>"
return 0
if(!handle_pins(user))
return 0
if(trigger_guard)
if(istype(user) && user.dna)
@@ -150,9 +152,6 @@
/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params)
add_fingerprint(user)
if(!handle_pins(user))
return 0
for(var/i = 1 to burst_size)
if(!issilicon(user))
if( i>1 && !(src in get_both_hands(user))) //for burst firing
+11 -1
View File
@@ -89,4 +89,14 @@
return
/obj/item/weapon/gun/energy/ui_action_click()
toggle_gunlight()
toggle_gunlight()
/obj/item/weapon/gun/energy/suicide_act(mob/user)
if (src.can_shoot())
user.visible_message("<span class='suicide'>[user] is trying to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, fire_sound, 50, 1, -1)
return(FIRELOSS)
else
user.visible_message("<span class='suicide'>[user] is pretending to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide!</b></span>")
playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
return (OXYLOSS)
@@ -23,6 +23,7 @@ obj/item/weapon/gun/energy/laser/retro
/obj/item/weapon/gun/energy/laser/captain
icon_state = "caplaser"
item_state = "caplaser"
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
force = 10
origin_tech = null
+30 -28
View File
@@ -1,58 +1,60 @@
/obj/item/weapon/gun/energy/pulse_rifle
/obj/item/weapon/gun/energy/pulse
name = "pulse rifle"
desc = "A heavy-duty, multifaceted energy rifle with three modes. Preferred by front-line combat personnel."
icon_state = "pulse"
item_state = "pulse"
w_class = 4.0
item_state = null
w_class = 4
force = 10
flags = CONDUCT
slot_flags = SLOT_BACK
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
cell_type = "/obj/item/weapon/stock_parts/cell/super"
cell_type = "/obj/item/weapon/stock_parts/cell/pulse"
/obj/item/weapon/gun/energy/pulse_rifle/attack_self(mob/living/user as mob)
/obj/item/weapon/gun/energy/pulse/attack_self(mob/living/user as mob)
select_fire(user)
/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine
/obj/item/weapon/gun/energy/pulse/emp_act(severity)
return
/obj/item/weapon/gun/energy/pulse/loyalpin
pin = /obj/item/device/firing_pin/implant/loyalty
/obj/item/weapon/gun/energy/pulse/carbine
name = "pulse carbine"
desc = "A ligther weight varient of the pulse rifle, a multifaceted energy carbine with three modes."
w_class = 3.0
desc = "A compact variant of the pulse rifle with less firepower but easier storage."
w_class = 3
slot_flags = SLOT_BELT
icon_state = "pulse_carbine"
item_state = "pulse"
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse/carbine, /obj/item/ammo_casing/energy/electrode/carbine, /obj/item/ammo_casing/energy/laser/carbine)
cell_type = "/obj/item/weapon/stock_parts/cell"
cell_type = "/obj/item/weapon/stock_parts/cell/pulse/carbine"
/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine/loyalpin
/obj/item/weapon/gun/energy/pulse/carbine/loyalpin
pin = /obj/item/device/firing_pin/implant/loyalty
/obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol
/obj/item/weapon/gun/energy/pulse/pistol
name = "pulse pistol"
desc = "A ligther weight varient of the pulse rifle, a multifaceted energy pistol with three modes."
w_class = 2.0
desc = "A pulse rifle in an easily concealed handgun package with low capacity."
w_class = 2
slot_flags = SLOT_BELT
icon_state = "pulse_pistol"
item_state = "pulse"
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse/pistol, /obj/item/ammo_casing/energy/electrode/pistol, /obj/item/ammo_casing/energy/laser/pistol)
cell_type = "/obj/item/weapon/stock_parts/cell"
item_state = "gun"
cell_type = "/obj/item/weapon/stock_parts/cell/pulse/pistol"
/obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol/loyalpin
/obj/item/weapon/gun/energy/pulse/pistol/loyalpin
pin = /obj/item/device/firing_pin/implant/loyalty
/obj/item/weapon/gun/energy/pulse_rifle/destroyer
/obj/item/weapon/gun/energy/pulse/destroyer
name = "pulse destroyer"
desc = "A heavy-duty energy rifle built for pure destruction."
cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse)
/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob)
/obj/item/weapon/gun/energy/pulse/destroyer/attack_self(mob/living/user as mob)
user << "<span class='danger'>[src.name] has three settings, and they are all DESTROY.</span>"
/obj/item/weapon/gun/energy/pulse_rifle/M1911
name = "m1911-P"
/obj/item/weapon/gun/energy/pulse/pistol/m1911
name = "\improper M1911-P"
desc = "A compact pulse core in a classic handgun frame for Nanotrasen officers. It's not the size of the gun, it's the size of the hole it puts through people."
icon_state = "m1911-p"
cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
item_state = "gun"
cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
@@ -122,6 +122,8 @@
overheat = 0
recent_reload = 0
..()
/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity)
return
/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user)
if(overheat || recent_reload)
@@ -245,6 +247,7 @@
name = "cyborg lmg"
desc = "A machinegun that fires 3d-printed flachettes slowly regenerated using a cyborg's internal power source."
icon_state = "l6closed0"
icon = 'icons/obj/guns/projectile.dmi'
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet)
var/charge_tick = 0
+6 -1
View File
@@ -70,4 +70,9 @@
/obj/item/weapon/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
user << "<span class='warning'>The [name] whizzles quietly.<span>"
return
return
/obj/item/weapon/gun/magic/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is casting a spell on themself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, fire_sound, 50, 1, -1)
return (FIRELOSS)
@@ -132,6 +132,16 @@
boolets += magazine.ammo_count()
return boolets
/obj/item/weapon/gun/projectile/suicide_act(mob/user)
if (src.chambered)
user.visible_message("<span class='suicide'>[user] is trying to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, fire_sound, 50, 1, -1)
return(BRUTELOSS)
else
user.visible_message("<span class='suicide'>[user] is pretending to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide!</b></span>")
playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
return (OXYLOSS)
/obj/item/weapon/suppressor
name = "suppressor"
desc = "A universal syndicate small-arms suppressor for maximum espionage."
@@ -26,6 +26,9 @@
return
/obj/item/weapon/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob)
. = ..()
if(.)
return
if(istype(A, /obj/item/ammo_box/magazine))
var/obj/item/ammo_box/magazine/AM = A
if(istype(AM, mag_type))
+19 -10
View File
@@ -94,14 +94,18 @@
/obj/item/projectile/magic/door/on_hit(var/atom/target)
var/atom/T = target.loc
if(isturf(target))
if(target.density)
new /obj/structure/mineral_door/wood(target)
target:ChangeTurf(/turf/simulated/floor/plating)
else if (isturf(T))
if(T.density)
new /obj/structure/mineral_door/wood(T)
T:ChangeTurf(/turf/simulated/floor/plating)
if(isturf(target) && target.density)
CreateDoor(target)
else if (isturf(T) && T.density)
CreateDoor(T)
/obj/item/projectile/magic/door/proc/CreateDoor(var/turf/T)
new /obj/structure/mineral_door/wood(T)
if(istype(T,/turf/simulated/shuttle/wall))
T.ChangeTurf(/turf/simulated/shuttle/plating)
else
T.ChangeTurf(/turf/simulated/floor/plating)
/obj/item/projectile/magic/change
name = "bolt of change"
@@ -196,7 +200,7 @@ proc/wabbajack(mob/living/M)
if("magicarp") new_mob = new /mob/living/simple_animal/hostile/carp/ranged(M.loc)
if("chaosmagicarp") new_mob = new /mob/living/simple_animal/hostile/carp/ranged/chaos(M.loc)
else
var/animal = pick("parrot","corgi","crab","pug","cat","mouse","chicken","cow","lizard","chick","fox")
var/animal = pick("parrot","corgi","crab","pug","cat","mouse","chicken","cow","lizard","chick","fox","butterfly")
switch(animal)
if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc)
if("corgi") new_mob = new /mob/living/simple_animal/corgi(M.loc)
@@ -208,6 +212,7 @@ proc/wabbajack(mob/living/M)
if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc)
if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc)
if("fox") new_mob = new /mob/living/simple_animal/fox(M.loc)
if("butterfly") new_mob = new /mob/living/simple_animal/butterfly(M.loc)
else new_mob = new /mob/living/simple_animal/chick(M.loc)
new_mob.languages |= HUMAN
if("human")
@@ -265,7 +270,11 @@ proc/wabbajack(mob/living/M)
return
else
var/obj/O = change
new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer)
if(istype(O, /obj/item/weapon/gun))
new /mob/living/simple_animal/hostile/mimic/copy/ranged(O.loc, O, firer)
else
new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer)
else if(istype(change, /mob/living/simple_animal/hostile/mimic/copy))
// Change our allegiance!
var/mob/living/simple_animal/hostile/mimic/copy/C = change
@@ -127,7 +127,7 @@ obj/item/projectile/kinetic/New()
var/turf/target_turf= get_turf(target)
if(istype(target_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = target_turf
M.gets_drilled()
M.gets_drilled(firer)
new /obj/item/effect/kinetic_blast(target_turf)
..()
@@ -14,7 +14,7 @@ datum/reagent/silver_sulfadiazine
datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
if(method == TOUCH)
M.adjustFireLoss((volume-(volume*2))*REM)
M.adjustFireLoss(-volume)
M << "<span class='notice'>You feel your burns healing!</span>"
M.emote("scream")
if(method == INGEST)
@@ -25,8 +25,7 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth
datum/reagent/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(55))
M.adjustFireLoss(-2*REM)
M.adjustFireLoss(-2*REM)
..()
return
@@ -40,7 +39,7 @@ datum/reagent/styptic_powder
datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
if(method == TOUCH)
M.heal_organ_damage(volume*REM,0)
M.adjustBruteLoss(-volume)
M << "<span class='notice'>You feel your wounds knitting back together!</span>"
M.emote("scream")
if(method == INGEST)
@@ -52,7 +51,7 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO
datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(55))
M.adjustBruteLoss(-2*REM)
M.adjustBruteLoss(-8*REM)
..()
return
@@ -81,8 +80,8 @@ datum/reagent/synthflesh
datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if(!M) M = holder.my_atom
if(method == TOUCH)
M.adjustBruteLoss(-(1*volume)*REM)
M.adjustFireLoss(-(1*volume)*REM)
M.adjustBruteLoss(-1.5*volume)
M.adjustFireLoss(-1.5*volume)
M << "<span class='notice'>You feel your burns healing and your flesh knitting together!</span>"
..()
return
@@ -496,7 +495,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
name = "Oculine"
id = "oculine"
result = "oculine"
required_reagents = list("atropine" = 1, "spaceacillin" = 1, "salglu_solution" = 1)
required_reagents = list("charcoal" = 1, "carbon" = 1, "hydrogen" = 1)
result_amount = 3
mix_message = "The mixture sputters loudly and becomes a pale pink color."
@@ -601,24 +600,23 @@ datum/reagent/strange_reagent
metabolization_rate = 0.2
datum/reagent/strange_reagent/reaction_mob(var/mob/living/carbon/human/M as mob, var/method=TOUCH, var/volume)
if(M.bruteloss > 80 || M.fireloss > 80)
if(ishuman(M) || ismonkey(M))
var/mob/living/carbon/C_target = M
var/obj/item/organ/brain/B = C_target.getorgan(/obj/item/organ/brain)
if(B)
B.loc = get_turf(C_target)
B.transfer_identity(C_target)
C_target.internal_organs -= B
M.gib()
else if(M.stat == DEAD)
if(M.stat == DEAD)
if(M.getBruteLoss() >= 80 || M.getFireLoss() >= 80)
if(ishuman(M) || ismonkey(M))
var/mob/living/carbon/C_target = M
var/obj/item/organ/brain/B = C_target.getorgan(/obj/item/organ/brain)
if(B)
B.loc = get_turf(C_target)
B.transfer_identity(C_target)
C_target.internal_organs -= B
M.gib(M)
return
var/mob/dead/observer/ghost = M.get_ghost()
M.visible_message("<span class='warning'>[M]'s body convulses a bit.</span>")
if(M.health <= config.health_threshold_dead && !M.suiciding && !ghost && !(NOCLONE in M.mutations))
if(!M.suiciding && !ghost && !(NOCLONE in M.mutations))
M.stat = 1
M.adjustBruteLoss(-10)
M.adjustFireLoss(-10)
M.adjustOxyLoss(-10)
M.adjustToxLoss(-10)
M.adjustOxyLoss(-20)
M.adjustToxLoss(-20)
dead_mob_list -= M
living_mob_list |= list(M)
M.emote("gasp")
@@ -814,4 +812,4 @@ datum/reagent/stimulants/overdose_process(var/mob/living/M as mob)
M.adjustToxLoss(2*REM)
M.losebreath++
..()
return
return
@@ -118,8 +118,8 @@ datum/reagent/colorful_reagent
required_reagents = list("stable_plasma" = 1, "radium" = 1, "space_drugs" = 1, "cryoxadone" = 1, "triple_citrus" = 1)
result_amount = 5
datum/reagent/colorful_reagent/reaction_mob(var/mob/M, var/volume)
if(M)
datum/reagent/colorful_reagent/reaction_mob(var/mob/living/M, var/volume)
if(M && isliving(M))
M.color = pick(potential_colors)
..()
return
@@ -147,4 +147,4 @@ datum/reagent/triple_citrus
id = "triple_citrus"
result = "triple_citrus"
required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1)
result_amount = 5
result_amount = 5
@@ -140,4 +140,5 @@ proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull
for(var/i = 0, i < pull_times, i++)
step_away(X,T)
else
X.throw_at(T)
for(var/i = 0, i < pull_times, i++)
step_towards(X,T)
@@ -103,12 +103,11 @@ datum/reagent/neurotoxin2
datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob)
cycle_count++
if(!M) M = holder.my_atom
if(M.brainloss + M.toxloss <= 60)
M.adjustBrainLoss(1*REM)
M.adjustToxLoss(1*REM)
if(cycle_count == 17)
M.sleeping += 1
M.sleeping += 10 // buffed so it works
..()
return
+37 -1
View File
@@ -107,9 +107,13 @@ datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var
var/part = amount / src.total_volume
var/trans_data = null
for (var/datum/reagent/current_reagent in src.reagent_list)
if (current_reagent.id == "blood" && ishuman(target))
var/mob/living/carbon/human/H = target
H.inject_blood(my_atom, amount)
continue
var/current_reagent_transfer = current_reagent.volume * part
if(preserve_data)
trans_data = current_reagent.data
trans_data = copy_data(current_reagent)
R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer)
@@ -524,6 +528,38 @@ datum/reagents/proc/delete()
if(my_atom)
my_atom.reagents = null
//two helper functions to preserve data across reactions (needed for xenoarch)
datum/reagents/proc/get_data(var/reagent_id)
for(var/datum/reagent/D in reagent_list)
if(D.id == reagent_id)
//world << "proffering a data-carrying reagent ([reagent_id])"
return D.data
datum/reagents/proc/set_data(var/reagent_id, var/new_data)
for(var/datum/reagent/D in reagent_list)
if(D.id == reagent_id)
//world << "reagent data set ([reagent_id])"
D.data = new_data
datum/reagents/proc/copy_data(var/datum/reagent/current_reagent)
if (!current_reagent || !current_reagent.data) return null
if (!istype(current_reagent.data, /list)) return current_reagent.data
var/list/trans_data = current_reagent.data.Copy()
// We do this so that introducing a virus to a blood sample
// doesn't automagically infect all other blood samples from
// the same donor.
//
// Technically we should probably copy all data lists, but
// that could possibly eat up a lot of memory needlessly
// if most data lists are read-only.
if (trans_data["viruses"])
var/list/v = trans_data["viruses"]
trans_data["viruses"] = v.Copy()
return trans_data
///////////////////////////////////////////////////////////////////////////////////
+142 -116
View File
@@ -20,7 +20,7 @@
var/image/icon_beaker = null //cached overlay
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron",
"copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","fluorine","stable_plasma")
"copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","stable_plasma")
/obj/machinery/chem_dispenser/proc/recharge()
if(stat & (BROKEN|NOPOWER)) return
@@ -189,9 +189,9 @@
amount = 5
recharge_delay = 30
dispensable_reagents = list()
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen"),
list("lithium", "sugar", "sacid", "water", "copper", "mercury", "sodium"),
list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron"))
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"),
list("lithium", "sugar", "sacid", "copper", "mercury", "sodium","iodine","bromine"),
list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron", "fuel","silver","stable_plasma"))
/obj/machinery/chem_dispenser/constructable/New()
..()
@@ -251,12 +251,13 @@
icon_state = "mixer0"
use_power = 1
idle_power_usage = 20
var/beaker = null
var/obj/item/weapon/reagent_containers/glass/beaker = null
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
var/mode = 0
var/condi = 0
var/useramount = 30 // Last used amount
/obj/machinery/chem_master/New()
create_reagents(100)
overlays += "waitlight"
@@ -277,15 +278,14 @@
stat |= NOPOWER
/obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
/obj/machinery/chem_master/attackby(var/obj/item/B as obj, var/mob/user as mob)
if(default_unfasten_wrench(user, B))
return
if(istype(B, /obj/item/weapon/reagent_containers/glass))
if(src.beaker)
user << "A beaker is already loaded into the machine."
user << "<span class='alert'>A beaker is already loaded into the machine.</span>"
return
src.beaker = B
user.drop_item()
@@ -294,17 +294,16 @@
src.updateUsrDialog()
icon_state = "mixer1"
else if(istype(B, /obj/item/weapon/storage/pill_bottle))
else if(!condi && istype(B, /obj/item/weapon/storage/pill_bottle))
if(src.loaded_pill_bottle)
user << "A pill bottle is already loaded into the machine."
user << "<span class='alert'>A pill bottle is already loaded into the machine.</span>"
return
src.loaded_pill_bottle = B
user.drop_item()
B.loc = src
user << "You add the pill bottle into the dispenser slot!"
src.updateUsrDialog()
return
/obj/machinery/chem_master/Topic(href, href_list)
@@ -313,44 +312,63 @@
usr.set_machine(src)
if (href_list["ejectp"])
if(href_list["ejectp"])
if(loaded_pill_bottle)
loaded_pill_bottle.loc = src.loc
loaded_pill_bottle = null
else if(href_list["close"])
usr << browse(null, "window=chem_master")
usr.unset_machine()
return
else if(href_list["toggle"])
mode = !mode
else if(href_list["createbottle"])
if(!condi)
var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
if(!name)
return
var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
P.name = trim("[name] bottle")
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P, 30)
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to(P, 50)
if(beaker)
var/datum/reagents/R = beaker:reagents
var/datum/reagents/R = beaker.reagents
if (href_list["analyze"])
var/dat = ""
if(!condi)
dat += "<TITLE>Chemmaster 3000</TITLE>Chemical infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>"
else
dat += "<TITLE>Condimaster 3000</TITLE>Condiment infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>"
usr << browse(dat, "window=chem_master;size=575x400")
dat += "<B>[condi ? "Condiment" : "Chemical"] information:</B><BR><BR>"
dat += "<B>Name:</B><BR>[href_list["name"]]<BR><BR>"
dat += "<B>Description:</B><BR>[href_list["desc"]]<BR><BR><BR>"
dat += "<A href='?src=\ref[src];main=1'>Back</A>"
var/datum/browser/popup = new(usr, "chem_master", name)
popup.set_content(dat)
popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state))
popup.open(1)
return
else if (href_list["add"])
else if(href_list["add"])
if(href_list["amount"])
var/id = href_list["add"]
var/amount = text2num(href_list["amount"])
if (amount < 0) return
R.trans_id_to(src, id, amount)
else if (href_list["addcustom"])
else if(href_list["addcustom"])
var/id = href_list["addcustom"]
useramount = input("Select the amount to transfer.", 30, useramount) as num
useramount = isgoodnumber(useramount)
var/amt_temp = isgoodnumber(input(usr, "Select the amount to transfer.", "Transfer how much?", useramount) as num|null)
if(!amt_temp)
return
useramount = amt_temp
src.Topic(null, list("amount" = "[useramount]", "add" = "[id]"))
else if (href_list["remove"])
else if(href_list["remove"])
if(href_list["amount"])
var/id = href_list["remove"]
var/amount = text2num(href_list["amount"])
@@ -360,35 +378,38 @@
else
reagents.remove_reagent(id, amount)
else if (href_list["removecustom"])
else if(href_list["removecustom"])
var/id = href_list["removecustom"]
useramount = input("Select the amount to transfer.", 30, useramount) as num
useramount = isgoodnumber(useramount)
var/amt_temp = isgoodnumber(input(usr, "Select the amount to transfer.", "Transfer how much?", useramount) as num|null)
if(!amt_temp)
return
useramount = amt_temp
src.Topic(null, list("amount" = "[useramount]", "remove" = "[id]"))
else if (href_list["toggle"])
mode = !mode
else if (href_list["main"])
else if(href_list["main"])
attack_hand(usr)
return
else if (href_list["eject"])
else if(href_list["eject"])
if(beaker)
beaker:loc = src.loc
beaker.loc = src.loc
beaker = null
reagents.clear_reagents()
icon_state = "mixer0"
else if (href_list["createpill"]) //Also used for condiment packs.
else if(href_list["createpill"]) //Also used for condiment packs.
if(reagents.total_volume == 0) return
if(!condi)
var/amount = 1
var/vol_each = min(reagents.total_volume, 50)
if(text2num(href_list["many"]))
amount = min(max(round(input(usr, "Amount:", "How many pills?") as num), 1), 10)
vol_each = min(reagents.total_volume/amount, 50)
var/name = reject_bad_text(input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)"))
amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many pills?", amount) as num|null), 0), 10)
if(!amount)
return
vol_each = min(reagents.total_volume / amount, 50)
var/name = stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
if(!name || !reagents.total_volume)
return
var/obj/item/weapon/reagent_containers/pill/P
for(var/i = 0; i < amount; i++)
@@ -396,47 +417,38 @@
P = new/obj/item/weapon/reagent_containers/pill(loaded_pill_bottle)
else
P = new/obj/item/weapon/reagent_containers/pill(src.loc)
if(!name) name = reagents.get_master_reagent_name()
P.name = "[name] pill"
P.name = trim("[name] pill")
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P,vol_each)
else
var/name = reject_bad_text(input(usr,"Name:","Name your bag!",reagents.get_master_reagent_name()))
var/name = stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN)
if(!name || !reagents.total_volume)
return
var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(src.loc)
if(!name) name = reagents.get_master_reagent_name()
P.originalname = name
P.name = "[name] pack"
P.name = trim("[name] pack")
P.desc = "A small condiment pack. The label says it contains [name]."
reagents.trans_to(P,10)
else if (href_list["createbottle"])
if(!condi)
var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))
var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
if(!name) name = reagents.get_master_reagent_name()
P.name = "[name] bottle"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P,30)
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to(P,50)
else if(href_list["createpatch"])
if(reagents.total_volume == 0) return
var/amount = 1
var/vol_each = min(reagents.total_volume, 50)
if(text2num(href_list["many"]))
amount = min(max(round(input(usr, "Amount:", "How many patches?") as num), 1), 10)
vol_each = min(reagents.total_volume/amount, 50)
var/name = reject_bad_text(input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)"))
amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many patches?", amount) as num|null), 0), 10)
if(!amount)
return
vol_each = min(reagents.total_volume / amount, 50)
var/name = stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
if(!name || !reagents.total_volume)
return
var/obj/item/weapon/reagent_containers/pill/P
for(var/i = 0; i < amount; i++)
P = new/obj/item/weapon/reagent_containers/pill/patch(src.loc)
if(!name) name = reagents.get_master_reagent_name()
P.name = "[name] patch"
P.name = trim("[name] patch")
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P,vol_each)
@@ -453,61 +465,76 @@
/obj/machinery/chem_master/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
user.set_machine(src)
var/dat = ""
if(!beaker)
if(beaker)
dat += "Beaker \[[beaker.reagents.total_volume]/[beaker.volume]\] <A href='?src=\ref[src];eject=1'>Eject and Clear Buffer</A><BR>"
else
dat = "Please insert beaker.<BR>"
if(src.loaded_pill_bottle)
dat += "<A href='?src=\ref[src];ejectp=1'>Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]</A><BR><BR>"
else
dat += "No pill bottle inserted.<BR><BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</A>"
else
var/datum/reagents/R = beaker:reagents
dat += "<A href='?src=\ref[src];eject=1'>Eject beaker and Clear Buffer</A><BR>"
if(src.loaded_pill_bottle)
dat += "<A href='?src=\ref[src];ejectp=1'>Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]</A><BR><BR>"
else
dat += "No pill bottle inserted.<BR><BR>"
if(!R.total_volume)
dat += "Beaker is empty."
else
dat += "Add to buffer:<BR>"
for(var/datum/reagent/G in R.reagent_list)
dat += "[G.name] , [G.volume] Units - "
dat += "<A href='?src=\ref[src];analyze=1;desc=[G.description];name=[G.name]'>(Analyze)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=1'>(1)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=5'>(5)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=10'>(10)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=[G.volume]'>(All)</A> "
dat += "<A href='?src=\ref[src];addcustom=[G.id]'>(Custom)</A><BR>"
dat += "<HR>Transfer to <A href='?src=\ref[src];toggle=1'>[(!mode ? "disposal" : "beaker")]:</A><BR>"
if(reagents.total_volume)
for(var/datum/reagent/N in reagents.reagent_list)
dat += "[N.name] , [N.volume] Units - "
dat += "<A href='?src=\ref[src];analyze=1;desc=[N.description];name=[N.name]'>(Analyze)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=1'>(1)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=5'>(5)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=10'>(10)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=[N.volume]'>(All)</A> "
dat += "<A href='?src=\ref[src];removecustom=[N.id]'>(Custom)</A><BR>"
dat += "<HR><B>Add to buffer:</B><UL>"
if(beaker)
if(beaker.reagents.total_volume)
for(var/datum/reagent/G in beaker.reagents.reagent_list)
dat += "<LI>[G.name], [G.volume] Units - "
dat += "<A href='?src=\ref[src];analyze=1;desc=[G.description];name=[G.name]'>Analyze</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=1'>1</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=5'>5</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=10'>10</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=[G.volume]'>All</A> "
dat += "<A href='?src=\ref[src];addcustom=[G.id]'>Custom</A>"
else
dat += "Empty<BR>"
if(!condi)
dat += "<HR><BR><A href='?src=\ref[src];createpill=1;many=0'>Create pill (50 units max)</A><BR>"
dat += "<A href='?src=\ref[src];createpill=1;many=1'>Create pills (10 pills max)</A><BR><BR>"
dat += "<HR><BR><A href='?src=\ref[src];createpatch=1;many=0'>Create patch (50 units max)</A><BR>"
dat += "<A href='?src=\ref[src];createpatch=1;many=1'>Create patches (10 patches max)</A><BR><BR>"
dat += "<A href='?src=\ref[src];createbottle=1'>Create bottle (30 units max)</A>"
else
dat += "<HR><BR><A href='?src=\ref[src];createpill=1'>Create pack (10 units max)</A><BR>"
dat += "<A href='?src=\ref[src];createbottle=1'>Create bottle (50 units max)</A>"
if(!condi)
user << browse("<TITLE>Chemmaster 3000</TITLE>Chemmaster menu:<BR><BR>[dat]", "window=chem_master;size=575x400")
dat += "<LI>Beaker is empty."
else
user << browse("<TITLE>Condimaster 3000</TITLE>Condimaster menu:<BR><BR>[dat]", "window=chem_master;size=575x400")
onclose(user, "chem_master")
dat += "<LI>No beaker."
dat += "</UL><HR><B>Transfer to <A href='?src=\ref[src];toggle=1'>[(!mode ? "disposal" : "beaker")]</A>:</B><UL>"
if(reagents.total_volume)
for(var/datum/reagent/N in reagents.reagent_list)
dat += "<LI>[N.name], [N.volume] Units - "
dat += "<A href='?src=\ref[src];analyze=1;desc=[N.description];name=[N.name]'>Analyze</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=1'>1</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=5'>5</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=10'>10</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=[N.volume]'>All</A> "
dat += "<A href='?src=\ref[src];removecustom=[N.id]'>Custom</A>"
else
dat += "<LI>Buffer is empty."
dat += "</UL><HR>"
if(!condi)
if(src.loaded_pill_bottle)
dat += "Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\] <A href='?src=\ref[src];ejectp=1'>Eject</A>"
else
dat += "No pill bottle inserted."
else
dat += "<BR>"
dat += "<UL>"
if(!condi)
if(beaker && reagents.total_volume)
dat += "<LI><A href='?src=\ref[src];createpill=1;many=0'>Create pill</A> (50 units max)"
dat += "<LI><A href='?src=\ref[src];createpill=1;many=1'>Create multiple pills</A><BR>"
dat += "<LI><A href='?src=\ref[src];createpatch=1;many=0'>Create patch</A> (50 units max)"
dat += "<LI><A href='?src=\ref[src];createpatch=1;many=1'>Create multiple patches</A><BR>"
else
dat += "<LI><span class='linkOff'>Create pill</span> (50 units max)"
dat += "<LI><span class='linkOff'>Create multiple pills</span><BR>"
dat += "<LI><span class='linkOff'>Create patch</span> (50 units max)"
dat += "<LI><span class='linkOff'>Create multiple patches</span><BR>"
else
if(beaker && reagents.total_volume)
dat += "<LI><A href='?src=\ref[src];createpill=1'>Create pack</A> (10 units max)<BR>"
else
dat += "<LI><span class='linkOff'>Create pack</span> (10 units max)<BR>"
dat += "<LI><A href='?src=\ref[src];createbottle=1'>Create bottle</A> ([condi ? "50" : "30"] units max)"
dat += "</UL>"
dat += "<BR><A href='?src=\ref[src];close=1'>Close</A>"
var/datum/browser/popup = new(user, "chem_master", name, 470, 500)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open(1)
return
/obj/machinery/chem_master/proc/isgoodnumber(var/num)
@@ -515,7 +542,7 @@
if(num > 200)
num = 200
else if(num < 0)
num = 1
num = 0
else
num = round(num)
return num
@@ -523,7 +550,6 @@
return 0
/obj/machinery/chem_master/condimaster
name = "CondiMaster 3000"
desc = "Used to create condiments and other cooking supplies."
@@ -75,7 +75,7 @@ datum/reagent/blob/acid
datum/reagent/blob/acid/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
if(method == TOUCH)
M.acid_act(20,1,10)
M.acid_act(10,1,5)
M.apply_damage(10, BRUTE)
M << "<span class = 'userdanger'>The blob's tendrils melt though your equipment!</span>"
@@ -148,4 +148,4 @@ datum/reagent/blob/explosive/reaction_mob(var/mob/living/M as mob, var/method=TO
step_away(X,pull)
step_away(X,pull)
else
X.throw_at(pull)
X.throw_at(pull)
@@ -166,7 +166,6 @@ datum/reagent/blood/on_merge(var/list/data)
src.data["viruses"] = preserve
return 1
datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
if(!istype(T)) return
var/datum/reagent/blood/self = src
+1 -1
View File
@@ -1066,7 +1066,7 @@ datum/chemical_reaction/pestkiller
required_other = 1
/datum/chemical_reaction/slimecell/on_reaction(var/datum/reagents/holder, var/created_volume)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
var/obj/item/weapon/stock_parts/cell/high/slime/P = new /obj/item/weapon/stock_parts/cell/high/slime
P.loc = get_turf(holder.my_atom)
/datum/chemical_reaction/slimeglow
@@ -0,0 +1,52 @@
/obj/item/weapon/reagent_containers/blood
name = "blood pack"
desc = "Contains blood used for transfusion. Must be attached to an IV drip."
icon = 'icons/obj/bloodpack.dmi'
icon_state = "empty"
volume = 200
var/blood_type = null
/obj/item/weapon/reagent_containers/blood/New()
..()
if(blood_type != null)
name = "blood pack [blood_type]"
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
/obj/item/weapon/reagent_containers/blood/on_reagent_change()
update_icon()
/obj/item/weapon/reagent_containers/blood/update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) icon_state = "empty"
if(10 to 50) icon_state = "half"
if(51 to INFINITY) icon_state = "full"
/obj/item/weapon/reagent_containers/blood/random/New()
blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-")
..()
/obj/item/weapon/reagent_containers/blood/APlus
blood_type = "A+"
/obj/item/weapon/reagent_containers/blood/AMinus
blood_type = "A-"
/obj/item/weapon/reagent_containers/blood/BPlus
blood_type = "B+"
/obj/item/weapon/reagent_containers/blood/BMinus
blood_type = "B-"
/obj/item/weapon/reagent_containers/blood/OPlus
blood_type = "O+"
/obj/item/weapon/reagent_containers/blood/OMinus
blood_type = "O-"
/obj/item/weapon/reagent_containers/blood/empty
name = "empty blood pack"
desc = "Seems pretty useless... Maybe if there were a way to fill it?"
icon_state = "empty"
@@ -115,7 +115,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/traitor/New()
..()
extra_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "neurotoxin2", "cyanide")
reagents.add_reagent("[extra_reagent]" = 3)
reagents.add_reagent("[extra_reagent]", 3)
/obj/item/weapon/reagent_containers/glass/bottle/polonium
name = "polonium bottle"
@@ -139,7 +139,7 @@
name = "formaldehyde bottle"
desc = "A small bottle. Contains Formaldehyde."
icon_state = "bottle16"
list_reagents = list("formaldehye" = 30)
list_reagents = list("formaldehyde" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/histamine
name = "histamine bottle"
@@ -50,7 +50,7 @@
ignore_flags = 1 // So they can heal their comrades.
list_reagents = list("epinephrine" = 15, "salglu_solution" = 15)
obj/item/weapon/reagent_containers/hypospray/combat/nanites
/obj/item/weapon/reagent_containers/hypospray/combat/nanites
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with expensive medical nanites for rapid healing."
volume = 100
list_reagents = list("nanites" = 80, "synaptizine" = 20)
@@ -66,6 +66,7 @@ obj/item/weapon/reagent_containers/hypospray/combat/nanites
volume = 10
ignore_flags = 1 //so you can medipen through hardsuits
flags = null
list_reagents = list("epinephrine" = 10)
/obj/item/weapon/reagent_containers/hypospray/medipen/New()
..()
@@ -105,4 +106,4 @@ obj/item/weapon/reagent_containers/hypospray/combat/nanites
/obj/item/weapon/reagent_containers/hypospray/medipen/morphine
name = "morphine medipen"
desc = "A rapid way to get you out of a tight situation and fast! You'll feel rather drowsy, though."
list_reagents = list("morphine" = 10)
list_reagents = list("morphine" = 10)
@@ -8,11 +8,14 @@
volume = 50
var/apply_type = INGEST
var/apply_method = "swallow"
var/roundstart = 0
/obj/item/weapon/reagent_containers/pill/New()
..()
if(!icon_state)
icon_state = "pill[rand(1,20)]"
if(reagents.total_volume && roundstart)
name += " ([reagents.total_volume]u)"
/obj/item/weapon/reagent_containers/pill/attack_self(mob/user)
@@ -70,63 +73,64 @@
desc = "Highly toxic."
icon_state = "pill5"
list_reagents = list("toxin" = 50)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/cyanide
name = "cyanide pill"
desc = "Don't swallow this."
icon_state = "pill5"
list_reagents = list("cyanide" = 50)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/adminordrazine
name = "adminordrazine pill"
desc = "It's magic. We don't have to explain it."
icon_state = "pill16"
list_reagents = list("adminordrazine" = 50)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/morphine
name = "morphine pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
list_reagents = list("morphine" = 30)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/stimulant
name = "stimulant pill"
desc = "Often taken by overworked employees, athletes, and the inebriated. You'll snap to attention immediately!"
icon_state = "pill19"
list_reagents = list("ephedrine" = 10, "ethylredoxrazine" = 10, "coffee" = 30)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/salbutamol
name = "salbutamol pill"
desc = "Used to treat oxygen deprivation."
icon_state = "pill18"
list_reagents = list("salbutamol" = 30)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/charcoal
name = "antitoxin pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
list_reagents = list("charcoal" = 50)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/epinephrine
name = "epinephrine pill"
desc = "Used to stabilize patients."
icon_state = "pill5"
list_reagents = list("epinephrine" = 50)
list_reagents = list("epinephrine" = 15)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/mannitol
name = "mannitol pill"
desc = "Used to treat brain damage."
icon_state = "pill17"
list_reagents = list("mannitol" = 50)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/mutadone
name = "mutadone pill"
desc = "Used to treat genetic damage."
icon_state = "pill20"
list_reagents = list("mutadone" = 50)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/salicyclic
name = "salicyclic acid pill"
name = "salicylic acid pill"
desc = "Used to dull pain."
icon_state = "pill5"
list_reagents = list("sal_acid" = 50)
list_reagents = list("sal_acid" = 24)
roundstart = 1

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