Merge branch 'master' of https://github.com/ParadiseSS13/Paradise
Conflicts: code/game/jobs/job/support.dm code/setup.dm
@@ -580,10 +580,22 @@ datum/mind
|
||||
new_objective.target_amount = target_number
|
||||
|
||||
if("identity theft")
|
||||
var/list/possible_targets = list("Free objective")
|
||||
for(var/datum/mind/possible_target in ticker.minds)
|
||||
if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
|
||||
possible_targets += possible_target.current
|
||||
|
||||
var/new_target = input("Select target:", "Objective target") as null|anything in possible_targets
|
||||
if (!new_target)
|
||||
return
|
||||
var/datum/mind/targ = new_target
|
||||
if(!istype(targ))
|
||||
log_debug("Invalid target for identity theft objective, cancelling")
|
||||
return
|
||||
new_objective = new /datum/objective/escape/escape_with_identity
|
||||
new_objective.owner = src
|
||||
new_objective.find_target()
|
||||
|
||||
new_objective.target = new_target
|
||||
new_objective.explanation_text = "Escape on the shuttle or an escape pod with the identity of [targ.current.real_name], the [targ.assigned_role] while wearing their identification card."
|
||||
if ("custom")
|
||||
var/expl = sanitize(copytext(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null,1,MAX_MESSAGE_LEN))
|
||||
if (!expl) return
|
||||
|
||||
@@ -146,7 +146,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/pen/paralysis,
|
||||
/obj/item/weapon/pen/sleepy,
|
||||
/obj/item/weapon/grenade/chem_grenade/incendiary)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate
|
||||
|
||||
@@ -323,18 +323,18 @@ var/list/uplink_items = list()
|
||||
cost = 18
|
||||
gamemodes = list("nuclear emergency")
|
||||
|
||||
/datum/uplink_item/ammo/bullstun
|
||||
name = "Drum Magazine - 12g Stun Slug"
|
||||
desc = "An additional 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're non-lethal would be lying."
|
||||
/datum/uplink_item/ammo/bullbuck
|
||||
name = "Drum Magazine - 12g buckshot"
|
||||
desc = "An additional 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy."
|
||||
item = /obj/item/ammo_box/magazine/m12g
|
||||
cost = 2
|
||||
gamemodes = list("nuclear emergency")
|
||||
|
||||
/datum/uplink_item/ammo/bullbuck
|
||||
name = "Drum Magazine - 12g Buckshot"
|
||||
desc = "An alternative 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy."
|
||||
item = /obj/item/ammo_box/magazine/m12g/buckshot
|
||||
cost = 2
|
||||
/datum/uplink_item/ammo/bullstun
|
||||
name = "Drum Magazine - 12g Stun Slug"
|
||||
desc = "An alternative 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're completely non-lethal would be lying."
|
||||
item = /obj/item/ammo_box/magazine/m12g/stun
|
||||
cost = 3
|
||||
gamemodes = list("nuclear emergency")
|
||||
|
||||
/datum/uplink_item/ammo/bulldragon
|
||||
@@ -371,10 +371,11 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item/stealthy_weapons
|
||||
category = "Stealthy and Inconspicuous Weapons"
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/para_pen
|
||||
name = "Paralysis Pen"
|
||||
desc = "A syringe disguised as a functional pen, filled with a neuromuscular-blocking drug that renders a target mute on injection that will eventually cause them to pass out. The pen holds one dose of paralyzing agent,though it can be refilled."
|
||||
item = /obj/item/weapon/pen/paralysis
|
||||
/datum/uplink_item/stealthy_weapons/sleepy_pen
|
||||
name = "Sleepy Pen"
|
||||
desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a strong anaesthetic and a chemical that is capable of blocking the movement of the vocal chords. \
|
||||
The pen holds one dose of the mixture. The pen can be refilled."
|
||||
item = /obj/item/weapon/pen/sleepy
|
||||
cost = 8
|
||||
excludefrom = list("nuclear emergency")
|
||||
|
||||
|
||||
@@ -148,4 +148,14 @@
|
||||
block=LISPBLOCK
|
||||
|
||||
OnSay(var/mob/M, var/message)
|
||||
return replacetext(message,"s","th")
|
||||
return replacetext(message,"s","th")
|
||||
|
||||
/datum/dna/gene/disability/comic
|
||||
name = "Comic"
|
||||
desc = "This will only bring death and destruction."
|
||||
activation_message = "<span class='sans'>Uh oh!</span>"
|
||||
deactivation_message = "Well thank god that's over with."
|
||||
mutation=COMIC
|
||||
|
||||
New()
|
||||
block = COMICBLOCK
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
message = replacetext(message,"!","!!")
|
||||
return uppertext(message)
|
||||
|
||||
|
||||
/* BROKEN WITH NEW SAYCODE
|
||||
/datum/dna/gene/disability/speech/whisper
|
||||
name = "Quiet"
|
||||
desc = "Damages the subjects vocal cords"
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
OnSay(var/mob/M, var/message)
|
||||
M.whisper(message)
|
||||
|
||||
*/
|
||||
|
||||
/datum/dna/gene/disability/dizzy
|
||||
name = "Dizzy"
|
||||
|
||||
@@ -120,9 +120,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
var/datum/objective/escape/escape_with_identity/identity_theft = new
|
||||
identity_theft.owner = changeling
|
||||
identity_theft.target = kill_objective.target
|
||||
identity_theft.target_real_name = kill_objective.target.current.real_name //Whoops, forgot this.
|
||||
if(identity_theft.target && identity_theft.target.current)
|
||||
var/target_real_name = identity_theft.target.current.real_name
|
||||
identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [identity_theft.target.assigned_role] while wearing their identification card."
|
||||
identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [identity_theft.target_real_name], the [identity_theft.target.assigned_role] while wearing their identification card."
|
||||
else
|
||||
identity_theft.explanation_text = "Free objective"
|
||||
changeling.objectives += identity_theft
|
||||
@@ -310,4 +310,4 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
user << "<span class='warning'>We already have this DNA in storage!</span>"
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
/obj/item/weapon/storage/box/emps:3:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/paralysis:3:Paralysis Pen;
|
||||
/obj/item/weapon/pen/sleepy:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
|
||||
@@ -278,9 +278,6 @@ proc/issyndicate(mob/living/M as mob)
|
||||
U.hidden_uplink.uses = 20
|
||||
synd_mob.equip_to_slot_or_del(U, slot_in_backpack)
|
||||
|
||||
var/obj/item/clothing/suit/space/rig/syndi/new_suit = new(synd_mob)
|
||||
var/obj/item/clothing/head/helmet/space/rig/syndi/new_helmet = new(synd_mob)
|
||||
|
||||
if(synd_mob.species)
|
||||
|
||||
/*
|
||||
@@ -293,28 +290,12 @@ proc/issyndicate(mob/living/M as mob)
|
||||
var/race = synd_mob.species.name
|
||||
|
||||
switch(race)
|
||||
if("Unathi")
|
||||
new_suit.species_restricted = list("Unathi")
|
||||
new_helmet.species_restricted = list("Unathi")
|
||||
if("Tajaran")
|
||||
new_suit.species_restricted = list("Tajaran")
|
||||
new_helmet.species_restricted = list("Tajaran")
|
||||
if("Skrell")
|
||||
new_suit.species_restricted = list("Skrell")
|
||||
new_helmet.species_restricted = list("Skrell")
|
||||
if("Vox" || "Vox Armalis")
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(synd_mob), slot_wear_mask)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(synd_mob), slot_wear_mask)
|
||||
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(synd_mob), slot_l_hand)
|
||||
synd_mob.internal = synd_mob.l_hand
|
||||
if (synd_mob.internals)
|
||||
synd_mob.internals.icon_state = "internal1"
|
||||
new_suit.species_restricted = list ("Vox", "Vox Armalis")
|
||||
new_helmet.species_restricted = list ("Vox", "Vox Armalis")
|
||||
|
||||
|
||||
synd_mob.equip_to_slot_or_del(new_suit, slot_wear_suit)
|
||||
synd_mob.equip_to_slot_or_del(new_helmet, slot_head)
|
||||
|
||||
|
||||
var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(synd_mob)
|
||||
E.imp_in = synd_mob
|
||||
|
||||
@@ -749,12 +749,14 @@ datum/objective/absorb
|
||||
return 0
|
||||
|
||||
datum/objective/destroy
|
||||
var/target_real_name
|
||||
find_target()
|
||||
var/list/possible_targets = active_ais(1)
|
||||
var/mob/living/silicon/ai/target_ai = pick(possible_targets)
|
||||
target = target_ai.mind
|
||||
if(target && target.current)
|
||||
explanation_text = "Destroy [target.current.real_name], the experimental AI."
|
||||
target_real_name = target.current.real_name
|
||||
explanation_text = "Destroy [target_real_name], the AI."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
TOXICFARTBLOCK = getAssignedBlock("TOXICFART", numsToAssign, good=1)
|
||||
STRONGBLOCK = getAssignedBlock("STRONG", numsToAssign, good=1)
|
||||
HORNSBLOCK = getAssignedBlock("HORNS", numsToAssign)
|
||||
COMICBLOCK = getAssignedBlock("COMIC", numsToAssign)
|
||||
|
||||
// Powers
|
||||
SOBERBLOCK = getAssignedBlock("SOBER", numsToAssign, good=1)
|
||||
@@ -97,7 +98,7 @@
|
||||
|
||||
// Disabilities
|
||||
LOUDBLOCK = getAssignedBlock("LOUD", numsToAssign)
|
||||
WHISPERBLOCK = getAssignedBlock("WHISPER", numsToAssign)
|
||||
//WHISPERBLOCK = getAssignedBlock("WHISPER", numsToAssign) BROKEN WITH NEW SAYCODE
|
||||
DIZZYBLOCK = getAssignedBlock("DIZZY", numsToAssign)
|
||||
|
||||
|
||||
|
||||
@@ -227,6 +227,8 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/fancy/crayons(H), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/reagent_containers/spray/waterflower(H), slot_in_backpack)
|
||||
H.mutations.Add(CLUMSY)
|
||||
H.dna.SetSEState(COMICBLOCK,1,1)
|
||||
genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -179,75 +179,6 @@
|
||||
/obj/machinery/autolathe/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if (!busy)
|
||||
if(href_list["menu"])
|
||||
screen = text2num(href_list["menu"])
|
||||
|
||||
if(href_list["category"])
|
||||
selected_category = href_list["category"]
|
||||
|
||||
if(href_list["make"])
|
||||
|
||||
var/turf/T = get_step(src.loc, get_dir(src,usr))
|
||||
|
||||
/////////////////
|
||||
//href protection
|
||||
being_built = files.FindDesignByID(href_list["make"]) //check if it's a valid design
|
||||
if(!being_built)
|
||||
return
|
||||
|
||||
//multiplier checks : only stacks can have one and its value is 1, 10 ,25 or max_multiplier
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
var/max_multiplier = min(50, being_built.materials["$metal"] ?round(m_amount/being_built.materials["$metal"]):INFINITY,being_built.materials["$glass"]?round(g_amount/being_built.materials["$glass"]):INFINITY)
|
||||
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
|
||||
|
||||
if(!is_stack && (multiplier > 1))
|
||||
return
|
||||
if (!(multiplier in list(1,10,25,max_multiplier))) //"enough materials ?" is checked further down
|
||||
return
|
||||
/////////////////
|
||||
|
||||
var/coeff = (is_stack ? 1 : 2 ** prod_coeff) //stacks are unaffected by production coefficient
|
||||
var/metal_cost = being_built.materials["$metal"]
|
||||
var/glass_cost = being_built.materials["$glass"]
|
||||
|
||||
var/power = max(2000, (metal_cost+glass_cost)*multiplier/5)
|
||||
|
||||
if((m_amount >= metal_cost*multiplier/coeff) && (g_amount >= glass_cost*multiplier/coeff))
|
||||
busy = 1
|
||||
use_power(power)
|
||||
icon_state = "autolathe"
|
||||
flick("autolathe_n",src)
|
||||
spawn(32/coeff)
|
||||
use_power(power)
|
||||
if(is_stack)
|
||||
m_amount -= metal_cost*multiplier
|
||||
g_amount -= glass_cost*multiplier
|
||||
var/obj/item/stack/S = new being_built.build_path(T)
|
||||
S.amount = multiplier
|
||||
else
|
||||
m_amount -= metal_cost/coeff
|
||||
g_amount -= glass_cost/coeff
|
||||
var/obj/item/new_item = new being_built.build_path(T)
|
||||
new_item.m_amt /= coeff
|
||||
new_item.g_amt /= coeff
|
||||
if(m_amount < 0)
|
||||
m_amount = 0
|
||||
if(g_amount < 0)
|
||||
g_amount = 0
|
||||
busy = 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
if(href_list["search"])
|
||||
matching_designs.Cut()
|
||||
|
||||
for(var/datum/design/D in files.known_designs)
|
||||
if(findtext(D.name,href_list["to_search"]))
|
||||
matching_designs.Add(D)
|
||||
|
||||
else
|
||||
usr << "<span class=\"alert\">The autolathe is busy. Please wait for completion of previous operation.</span>"
|
||||
|
||||
if(href_list["menu"])
|
||||
screen = text2num(href_list["menu"])
|
||||
|
||||
|
||||
@@ -19,17 +19,13 @@
|
||||
user << "<span class='danger'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.display_name == "head")
|
||||
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
|
||||
user << "<span class='danger'>You can't apply [src] through [H.head]!</span>"
|
||||
return 1
|
||||
else
|
||||
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
|
||||
user << "<span class='danger'>You can't apply [src] through [H.wear_suit]!</span>"
|
||||
if(isliving(M))
|
||||
if(!M.can_inject(user, 1))
|
||||
return 1
|
||||
|
||||
if(affecting.status & ORGAN_ROBOT)
|
||||
@@ -48,7 +44,7 @@
|
||||
use(1)
|
||||
|
||||
M.updatehealth()
|
||||
|
||||
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "roll of gauze"
|
||||
singular_name = "gauze length"
|
||||
@@ -82,12 +78,12 @@
|
||||
user.visible_message( "\blue [user] places a bandaid over \the [W.desc] on [M]'s [affecting.display_name].", \
|
||||
"\blue You place a bandaid over \the [W.desc] on [M]'s [affecting.display_name]." )
|
||||
|
||||
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
|
||||
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
|
||||
use(1)
|
||||
else
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
use(1)
|
||||
|
||||
|
||||
/obj/item/stack/medical/ointment
|
||||
name = "ointment"
|
||||
desc = "Used to treat those nasty burns."
|
||||
@@ -112,7 +108,7 @@
|
||||
else
|
||||
user.visible_message( "\blue [user] salves the wounds on [M]'s [affecting.display_name].", \
|
||||
"\blue You salve the wounds on [M]'s [affecting.display_name]." )
|
||||
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
|
||||
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
|
||||
use(1)
|
||||
else
|
||||
if (can_operate(H)) //Checks if mob is lying down on table for surgery
|
||||
|
||||
@@ -673,7 +673,7 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<iframe width='100%' height='97%' src="http://nanotrasen.se/wiki/index.php?title=Space_law&printable=yes" frameborder="0" id="main_frame"></iframe> </body>
|
||||
<iframe width='100%' height='97%' src="http://nanotrasen.se/wiki/index.php?title=Space_Law&printable=yes" frameborder="0" id="main_frame"></iframe> </body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/cyborg
|
||||
var/hitcost = 500
|
||||
var/hitcost = 250
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
|
||||
if(R.cell)
|
||||
|
||||
@@ -119,3 +119,19 @@
|
||||
rating = 3
|
||||
m_amt = 0
|
||||
g_amt = 0
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/emproof
|
||||
name = "\improper EMP-proof cell"
|
||||
desc = "An EMP-proof cell."
|
||||
maxcharge = 5000
|
||||
rating = 2
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/emproof/empty/New()
|
||||
..()
|
||||
charge = 0
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/emproof/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/emproof/corrupt()
|
||||
return
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
if("stealth")
|
||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
|
||||
new /obj/item/weapon/pen/paralysis(src)
|
||||
new /obj/item/weapon/pen/sleepy(src)
|
||||
new /obj/item/device/chameleon(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -13,8 +13,7 @@
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/syndicate(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/head/helmet/swat/syndicate(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
new /obj/item/weapon/storage/belt/military(src)
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
@@ -26,8 +25,10 @@
|
||||
/obj/structure/closet/syndicate/suits/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/weapon/tank/jetpack/oxygen/harness(src)
|
||||
new /obj/item/clothing/head/helmet/space/rig/syndi(src)
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
new /obj/item/clothing/suit/space/rig/syndi(src)
|
||||
new /obj/item/weapon/tank/jetpack/oxygen/harness(src)
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
|
||||
/obj/structure/closet/syndicate/nuclear
|
||||
|
||||
@@ -81,6 +81,7 @@ var/SCRAMBLEBLOCK = 0
|
||||
var/TOXICFARTBLOCK = 0
|
||||
var/STRONGBLOCK = 0
|
||||
var/HORNSBLOCK = 0
|
||||
var/COMICBLOCK = 0
|
||||
|
||||
// Powers
|
||||
var/SOBERBLOCK = 0
|
||||
@@ -100,7 +101,7 @@ var/POLYMORPHBLOCK = 0
|
||||
// /vg/ Mutations
|
||||
///////////////////////////////
|
||||
var/LOUDBLOCK = 0
|
||||
var/WHISPERBLOCK = 0
|
||||
//var/WHISPERBLOCK = 0
|
||||
var/DIZZYBLOCK = 0
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
var/list/admin_verbs_default = list(
|
||||
// /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
|
||||
/client/proc/deadmin_self /*destroys our own admin datum so we can play as a regular player*/
|
||||
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
|
||||
// /client/proc/check_antagonists, /*shows all antags*/
|
||||
// /client/proc/deadchat /*toggles deadchat on/off*/
|
||||
/client/proc/cmd_mentor_check_new_players
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
/client/proc/check_antagonists, /*shows all antags*/
|
||||
@@ -176,8 +177,7 @@ var/list/admin_verbs_mod = list(
|
||||
var/list/admin_verbs_mentor = list(
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||
/client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/
|
||||
/client/proc/cmd_mentor_check_new_players
|
||||
/client/proc/cmd_admin_pm_by_key_panel /*admin-pm list by key*/
|
||||
)
|
||||
|
||||
/client/proc/add_admin_verbs()
|
||||
|
||||
@@ -15,23 +15,9 @@
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
var/list/eventholders = list()
|
||||
var/list/banholders = list()
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
eventholders += X
|
||||
if(R_BAN & X.holder.rights)
|
||||
banholders += X
|
||||
|
||||
if(eventholders.len)
|
||||
for(var/client/C in eventholders)
|
||||
if(C.prefs.toggles & CHAT_PRAYER)
|
||||
C << msg
|
||||
else if (banholders.len)
|
||||
for(var/client/C in banholders)
|
||||
if(C.prefs.toggles & CHAT_PRAYER)
|
||||
C << msg
|
||||
X << msg
|
||||
|
||||
usr << "Your prayers have been received by the gods."
|
||||
|
||||
@@ -42,64 +28,22 @@
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "\blue <b><font color=orange>CENTCOMM:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
|
||||
var/list/eventholders = list()
|
||||
var/list/banholders = list()
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
eventholders += X
|
||||
if(R_BAN & X.holder.rights)
|
||||
banholders += X
|
||||
|
||||
if(eventholders.len)
|
||||
for(var/client/C in eventholders)
|
||||
C << msg
|
||||
return
|
||||
else if (banholders.len)
|
||||
for(var/client/C in banholders)
|
||||
C << msg
|
||||
return
|
||||
X << msg
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "\blue <b><font color='#DC143C'>SYNDICATE:</font> [key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>REPLY</A>):</b> [msg]"
|
||||
|
||||
var/list/eventholders = list()
|
||||
var/list/banholders = list()
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
eventholders += X
|
||||
if(R_BAN & X.holder.rights)
|
||||
banholders += X
|
||||
|
||||
if(eventholders.len)
|
||||
for(var/client/C in eventholders)
|
||||
C << msg
|
||||
return
|
||||
else if (banholders.len)
|
||||
for(var/client/C in banholders)
|
||||
C << msg
|
||||
return
|
||||
X << msg
|
||||
|
||||
/proc/HONK_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "\blue <b><font color=pink>HONK:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;HONKReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
|
||||
var/list/eventholders = list()
|
||||
var/list/banholders = list()
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
eventholders += X
|
||||
if(R_BAN & X.holder.rights)
|
||||
banholders += X
|
||||
|
||||
if(eventholders.len)
|
||||
for(var/client/C in eventholders)
|
||||
C << msg
|
||||
return
|
||||
else if (banholders.len)
|
||||
for(var/client/C in banholders)
|
||||
C << msg
|
||||
return
|
||||
X << msg
|
||||
@@ -280,7 +280,7 @@ BLIND // can't see anything
|
||||
name = "Space helmet"
|
||||
icon_state = "space"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
item_state = "s_helmet"
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
@@ -301,7 +301,7 @@ BLIND // can't see anything
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
flags = STOPSPRESSUREDMAGE
|
||||
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
|
||||
slowdown = 2
|
||||
|
||||
@@ -365,44 +365,89 @@
|
||||
//Syndicate rig
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi
|
||||
name = "blood-red hardsuit helmet"
|
||||
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
|
||||
icon_state = "rig0-syndie"
|
||||
desc = "A dual-mode advanced helmet designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
|
||||
icon_state = "hardsuit1-syndi"
|
||||
item_state = "syndie_helm"
|
||||
_color = "syndie"
|
||||
_color = "syndi"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
siemens_coefficient = 0.6
|
||||
var/obj/machinery/camera/camera
|
||||
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox")
|
||||
on = 1
|
||||
action_button_name = "Toggle Helmet Mode"
|
||||
icon_action_button = "Action_hardsuit1-syndi"
|
||||
species_restricted = null
|
||||
sprite_sheets = null
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/update_icon()
|
||||
icon_state = "hardsuit[on]-[_color]"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user)
|
||||
if(camera)
|
||||
..(user)
|
||||
if(!isturf(user.loc))
|
||||
user << "You cannot toggle your helmet while in this [user.loc]" //To prevent some lighting anomalities.
|
||||
return
|
||||
on = !on
|
||||
if(on)
|
||||
user << "<span class='notice'>You switch your helmet to travel mode.</span>"
|
||||
name = "blood-red hardsuit helmet"
|
||||
desc = "A dual-mode advanced helmet designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
cold_protection = HEAD
|
||||
user.AddLuminosity(brightness_on)
|
||||
else
|
||||
camera = new /obj/machinery/camera(src)
|
||||
camera.network = list("NukeOps")
|
||||
cameranet.removeCamera(camera)
|
||||
camera.c_tag = user.name
|
||||
user << "\blue User scanned as [camera.c_tag]. Camera activated."
|
||||
user << "<span class='notice'>You switch your helmet to combat mode.</span>"
|
||||
name = "blood-red hardsuit helmet (combat)"
|
||||
desc = "A dual-mode advanced helmet designed for work in special operations. It is in combat mode. Property of Gorlex Marauders."
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEEARS
|
||||
cold_protection = null
|
||||
user.AddLuminosity(-brightness_on)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi/examine()
|
||||
..()
|
||||
if(get_dist(usr,src) <= 1)
|
||||
usr << "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
|
||||
update_icon()
|
||||
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
|
||||
user.update_inv_head()
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi
|
||||
icon_state = "rig-syndie"
|
||||
name = "blood-red hardsuit"
|
||||
desc = "An advanced suit that protects against injuries during special operations. Property of Gorlex Marauders."
|
||||
desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
|
||||
icon_state = "hardsuit1-syndi"
|
||||
item_state = "syndie_hardsuit"
|
||||
_color = "syndi"
|
||||
slowdown = 1
|
||||
w_class = 3
|
||||
var/on = 1
|
||||
action_button_name = "Toggle Hardsuit Mode"
|
||||
icon_action_button = "Action_hardsuit1-syndi"
|
||||
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/magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
siemens_coefficient = 0.6
|
||||
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox")
|
||||
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,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
species_restricted = null
|
||||
sprite_sheets = null
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi/update_icon()
|
||||
icon_state = "hardsuit[on]-[_color]"
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi/attack_self(mob/user)
|
||||
on = !on
|
||||
if(on)
|
||||
user << "<span class='notice'>You switch your hardsuit to travel mode.</span>"
|
||||
name = "blood-red hardsuit helmet"
|
||||
desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
|
||||
slowdown = 1
|
||||
flags = STOPSPRESSUREDMAGE
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
else
|
||||
user << "<span class='notice'>You switch your hardsuit to combat mode.</span>"
|
||||
name = "blood-red hardsuit helmet (combat)"
|
||||
desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders."
|
||||
slowdown = 0
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = null
|
||||
cold_protection = null
|
||||
|
||||
update_icon()
|
||||
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
|
||||
user.update_inv_wear_suit()
|
||||
user.update_inv_w_uniform()
|
||||
|
||||
//Wizard Rig
|
||||
/obj/item/clothing/head/helmet/space/rig/wizard
|
||||
name = "gem-encrusted hardsuit helmet"
|
||||
|
||||
@@ -198,6 +198,7 @@
|
||||
w_class = 4//bulky item
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|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)
|
||||
flags = THICKMATERIAL
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -210,6 +211,7 @@
|
||||
item_state = "swat_suit"
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.90
|
||||
flags = THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 3
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
@@ -218,6 +220,9 @@
|
||||
/obj/item/clothing/suit/armor/tdome
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
flags = THICKMATERIAL
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome/red
|
||||
name = "Thunderdome suit (red)"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "bio"
|
||||
desc = "A hood that protects the head and face from biological comtaminants."
|
||||
permeability_coefficient = 0.01
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR | THICKMATERIAL
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
siemens_coefficient = 0.9
|
||||
@@ -18,7 +18,7 @@
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
flags = ONESIZEFITSALL
|
||||
flags = ONESIZEFITSALL | THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 1.0
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
|
||||
slowdown = 1.0
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
|
||||
flags = STOPSPRESSUREDMAGE
|
||||
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
@@ -55,7 +55,7 @@
|
||||
name = "bomb hood"
|
||||
desc = "Use in case of bomb."
|
||||
icon_state = "bombsuit"
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR | THICKMATERIAL
|
||||
armor = list(melee = 40, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
cold_protection = HEAD
|
||||
@@ -74,6 +74,7 @@
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
flags = THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 2
|
||||
armor = list(melee = 40, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0)
|
||||
@@ -102,7 +103,7 @@
|
||||
name = "Radiation Hood"
|
||||
icon_state = "rad"
|
||||
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR|THICKMATERIAL
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
|
||||
loose = 8
|
||||
|
||||
@@ -114,6 +115,7 @@
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.90
|
||||
permeability_coefficient = 0.50
|
||||
flags = THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1.5
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
var/new_name = "[pick(list("To Sleep Beneath","Wind Over","Embrace of","Dreams of","Witnessing","To Walk Beneath","Approaching the"))]"
|
||||
new_name += " [pick(list("the Void","the Sky","Encroaching Night","Planetsong","Starsong","the Wandering Star","the Empty Day","Daybreak","Nightfall","the Rain"))]"
|
||||
return new_name
|
||||
|
||||
|
||||
/datum/language/trinary
|
||||
name = "Trinary"
|
||||
desc = "A modification of binary to allow fuzzy logic. 0 is no, 1 is maybe, 2 is yes. Credited with giving Machine People the ability to think creatively."
|
||||
@@ -225,8 +225,8 @@
|
||||
colour = "trinary"
|
||||
key = "5"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
syllables = list("02011","01222","10100","10210","21012","02011","21200","1002","2001","0002","0012","0012","000","120","121","201","220","10","11","0")
|
||||
|
||||
syllables = list("02011","01222","10100","10210","21012","02011","21200","1002","2001","0002","0012","0012","000","120","121","201","220","10","11","0")
|
||||
|
||||
/datum/language/kidan
|
||||
name = "Chittin"
|
||||
desc = "The noise made by rubbing its antennae together is actually a complex form of communication for Kidan."
|
||||
@@ -237,7 +237,7 @@
|
||||
key = "4"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
syllables = list("click","clack")
|
||||
|
||||
|
||||
/datum/language/slime
|
||||
name = "Bubblish"
|
||||
desc = "The language of slimes. It's a mixture of bubbling noises and pops. Very difficult to speak without mechanical aid for humans."
|
||||
@@ -310,6 +310,16 @@
|
||||
key = "3"
|
||||
syllables = list ("gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh", "gra")
|
||||
|
||||
/datum/language/clown
|
||||
name = "Clownish"
|
||||
desc = "The language of clown planet. Mother tongue of clowns throughout the Galaxy."
|
||||
speech_verb = "honks"
|
||||
ask_verb = "honks"
|
||||
exclaim_verb = "honks"
|
||||
colour = "clown"
|
||||
key = "0"
|
||||
syllables = list ("honk","squeak","bonk","toot","narf","zub","wee","wub","norf")
|
||||
|
||||
/datum/language/xenocommon
|
||||
name = "Xenomorph"
|
||||
colour = "alien"
|
||||
|
||||
@@ -82,6 +82,23 @@
|
||||
if (!species.name == "Machine")
|
||||
return
|
||||
|
||||
if("wag")
|
||||
if(species.bodyflags & TAIL_WAGGING)
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
message = "<B>[src]</B> starts wagging \his tail."
|
||||
src.start_tail_wagging(1)
|
||||
else
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
if("swag")
|
||||
if(species.bodyflags & TAIL_WAGGING)
|
||||
message = "<B>[src]</B> stops wagging \his tail."
|
||||
src.stop_tail_wagging(1)
|
||||
else
|
||||
return
|
||||
|
||||
if ("airguitar")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> is strumming the air and headbanging like a safari chimp."
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
// Set up DNA.
|
||||
if(!delay_ready_dna)
|
||||
dna.ready_dna(src)
|
||||
|
||||
|
||||
/mob/living/carbon/human/dummy
|
||||
real_name = "Test Dummy"
|
||||
status_flags = GODMODE|CANPUSH
|
||||
@@ -205,8 +205,8 @@
|
||||
stat("Distribution Pressure", internal.distribute_pressure)
|
||||
if(mind)
|
||||
if(mind.changeling)
|
||||
stat("Chemical Storage", mind.changeling.chem_charges)
|
||||
stat("Genetic Damage Time", mind.changeling.geneticdamage)
|
||||
stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]")
|
||||
stat("Absorbed DNA", mind.changeling.absorbedcount)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_initialized)
|
||||
stat("Energy Charge", (wear_suit:cell:charge))
|
||||
|
||||
@@ -539,8 +539,8 @@
|
||||
if(id)
|
||||
return id.rank ? id.rank : if_no_job
|
||||
else
|
||||
return if_no_id
|
||||
|
||||
return if_no_id
|
||||
|
||||
//gets assignment from ID or ID inside PDA or PDA itself
|
||||
//Useful when player do something with computers
|
||||
/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
@@ -1073,6 +1073,21 @@
|
||||
xylophone=0
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone)
|
||||
. = 1 // Default to returning true.
|
||||
if(user && !target_zone)
|
||||
target_zone = user.zone_sel.selecting
|
||||
// If targeting the head, see if the head item is thin enough.
|
||||
// If targeting anything else, see if the wear suit is thin enough.
|
||||
if(above_neck(target_zone))
|
||||
if(head && head.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && wear_suit.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
// Might need re-wording.
|
||||
user << "<span class='alert'>There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"].</span>"
|
||||
|
||||
/mob/living/carbon/human/proc/vomit(hairball=0)
|
||||
if(stat==2)return
|
||||
@@ -1301,7 +1316,7 @@
|
||||
usr << "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]."
|
||||
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/force_organs, var/default_colour)
|
||||
|
||||
|
||||
var/datum/species/oldspecies = species
|
||||
if(!dna)
|
||||
if(!new_species)
|
||||
@@ -1318,26 +1333,26 @@
|
||||
|
||||
if(species.language)
|
||||
remove_language(species.language)
|
||||
|
||||
|
||||
if(species.default_language)
|
||||
remove_language(species.default_language)
|
||||
|
||||
remove_language(species.default_language)
|
||||
|
||||
species = all_species[new_species]
|
||||
|
||||
|
||||
if(oldspecies)
|
||||
if(oldspecies.default_genes.len)
|
||||
oldspecies.handle_dna(src,1) // Remove any genes that belong to the old species
|
||||
|
||||
if(force_organs || !organs || !organs.len)
|
||||
species.create_organs(src)
|
||||
|
||||
|
||||
if(vessel)
|
||||
vessel = null
|
||||
make_blood()
|
||||
|
||||
if(species.language)
|
||||
add_language(species.language)
|
||||
|
||||
|
||||
if(species.default_language)
|
||||
add_language(species.default_language)
|
||||
|
||||
@@ -1359,7 +1374,7 @@
|
||||
r_skin = 0
|
||||
g_skin = 0
|
||||
b_skin = 0
|
||||
|
||||
|
||||
if(!dna)
|
||||
dna = new /datum/dna(null)
|
||||
dna.species = species.name
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
|
||||
verb = pick("whinnies","neighs", "says")
|
||||
handled = 1
|
||||
|
||||
|
||||
if(dna)
|
||||
for(var/datum/dna/gene/gene in dna_genes)
|
||||
if(!gene.block)
|
||||
@@ -309,6 +309,8 @@
|
||||
message = uppertext(message)
|
||||
verb = "yells loudly"
|
||||
|
||||
if(COMIC in mutations)
|
||||
message = "<span class='sans'>[message]</span>"
|
||||
returns[1] = message
|
||||
returns[2] = verb
|
||||
returns[3] = handled
|
||||
|
||||
@@ -596,7 +596,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
if(FAT in mutations)
|
||||
if(w_uniform.flags&ONESIZEFITSALL)
|
||||
standing.icon = 'icons/mob/uniforFAT.dmi'
|
||||
standing.icon = 'icons/mob/uniform_fat.dmi'
|
||||
else
|
||||
src << "\red You burst out of \the [w_uniform]!"
|
||||
unEquip(w_uniform)
|
||||
@@ -1000,6 +1000,30 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
update_icons()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1)
|
||||
overlays_standing[TAIL_LAYER] = null
|
||||
|
||||
if(species.tail && species.bodyflags & HAS_TAIL)
|
||||
var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s")
|
||||
tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
|
||||
|
||||
overlays_standing[TAIL_LAYER] = image(tailw_s)
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
|
||||
/mob/living/carbon/human/proc/stop_tail_wagging(var/update_icons=1)
|
||||
overlays_standing[TAIL_LAYER] = null
|
||||
|
||||
if(species.tail && species.bodyflags & HAS_TAIL)
|
||||
var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s")
|
||||
tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
|
||||
|
||||
overlays_standing[TAIL_LAYER] = image(tail_s)
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
|
||||
//Adds a collar overlay above the helmet layer if the suit has one
|
||||
// Suit needs an identically named sprite in icons/mob/collar.dmi
|
||||
/mob/living/carbon/human/proc/update_collar(var/update_icons=1)
|
||||
|
||||
@@ -354,11 +354,15 @@
|
||||
primitive = /mob/living/carbon/monkey/tajara
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
|
||||
/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/skrell
|
||||
name = "Skrell"
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
density = 1
|
||||
req_access = list(access_engine, access_robotics)
|
||||
local_transmit = 1
|
||||
|
||||
|
||||
// We need to keep track of a few module items so we don't need to do list operations
|
||||
// every time we need them. These get set in New() after the module is chosen.
|
||||
var/obj/item/stack/sheet/metal/cyborg/stack_metal = null
|
||||
@@ -25,12 +25,13 @@
|
||||
|
||||
//Used for self-mailing.
|
||||
var/mail_destination = 0
|
||||
var/sprite[0]
|
||||
|
||||
|
||||
/mob/living/silicon/robot/drone/New()
|
||||
|
||||
..()
|
||||
|
||||
|
||||
remove_language("Robot Talk")
|
||||
add_language("Drone Talk", 1)
|
||||
|
||||
@@ -88,9 +89,83 @@
|
||||
/mob/living/silicon/robot/drone/choose_icon()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/robot/drone/pick_module()
|
||||
return
|
||||
|
||||
//Drones can only use binary and say emotes. NOTHING else.
|
||||
//TBD, fix up boilerplate. ~ Z
|
||||
/mob/living/silicon/robot/drone/say(var/message)
|
||||
if (!message)
|
||||
return
|
||||
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
if (stat == 2)
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
return say_dead(message)
|
||||
|
||||
//Must be concious to speak
|
||||
if (stat)
|
||||
return
|
||||
|
||||
if(copytext(message,1,2) == "*")
|
||||
return emote(copytext(message,2))
|
||||
|
||||
if (length(message) >= 2)
|
||||
var/prefix = copytext(message, 1, 3)
|
||||
if (department_radio_keys[prefix] == "drone")
|
||||
message = copytext(message, 3)
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
if(istype(src, /mob/living/silicon/robot/drone))
|
||||
var/mob/living/silicon/robot/drone/R = src
|
||||
if(!R.is_component_functioning("comms"))
|
||||
src << "\red Your drone communications component isn't functional."
|
||||
return
|
||||
drone_talk(message)
|
||||
else
|
||||
var/list/listeners = hearers(5,src)
|
||||
listeners |= src
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
for(var/mob/living/silicon/D in listeners)
|
||||
if(D.client)
|
||||
D << "<b>[src]</b> transmits, \"[message]\""
|
||||
|
||||
for (var/mob/M in player_list)
|
||||
if (!M.client)
|
||||
continue
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
else if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTEARS) && src.client)
|
||||
M << "<b>[src]</b> <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> transmits, \"[message]\""
|
||||
else if(M.stat == 2 && src.client && M in listeners)
|
||||
M << "<b>[src]</b> <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> transmits, \"[message]\""
|
||||
|
||||
/mob/living/proc/drone_talk(var/message)
|
||||
log_say("[key_name(src)] : [message]")
|
||||
message = trim(message)
|
||||
|
||||
if (!message)
|
||||
return
|
||||
|
||||
var/message_a = say_quote(message)
|
||||
var/rendered = "<i><span class='game say'>Drone Talk, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
|
||||
|
||||
for (var/mob/living/S in living_mob_list)
|
||||
if(istype(S, /mob/living/silicon/robot/drone))
|
||||
S.show_message(rendered, 2)
|
||||
|
||||
for (var/mob/S in dead_mob_list)
|
||||
if(!istype(S,/mob/new_player) && !istype(S,/mob/living/carbon/brain))
|
||||
var/rendered2 = "<i><span class='game say'>Drone Talk, <span class='name'>[name]</span> <a href='byond://?src=\ref[S];follow2=\ref[S];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
|
||||
S.show_message(rendered2, 2)
|
||||
|
||||
//Drones cannot be upgraded with borg modules so we need to catch some items before they get used in ..().
|
||||
/mob/living/silicon/robot/drone/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
@@ -137,12 +212,12 @@
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/silicon/robot/drone/emag_act(user as mob)
|
||||
if(!client || stat == 2)
|
||||
user << "\red There's not much point subverting this heap of junk."
|
||||
return
|
||||
|
||||
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -273,6 +348,16 @@
|
||||
src << "<b>Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets.</b>"
|
||||
src << "<b>If a crewmember has noticed you, <i>you are probably breaking your first law</i></b>."
|
||||
|
||||
sprite["Default"] = "repairbot"
|
||||
sprite["Mk2 Mousedrone"] = "mk2"
|
||||
sprite["Mk3 Monkeydrone"] = "mk3"
|
||||
var/icontype
|
||||
icontype = input(player,"Pick an icon") in sprite
|
||||
icon_state = sprite[icontype]
|
||||
updateicon()
|
||||
|
||||
choose_icon(6,sprite)
|
||||
|
||||
/mob/living/silicon/robot/drone/Bump(atom/movable/AM as mob|obj, yes)
|
||||
if (!yes || ( \
|
||||
!istype(AM,/obj/machinery/door) && \
|
||||
|
||||
@@ -332,8 +332,7 @@
|
||||
src.modules += new /obj/item/device/flash/cyborg(src)
|
||||
src.modules += new /obj/item/device/flashlight(src)
|
||||
src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/printer(src)
|
||||
src.modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/multi/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/card/emag(src)
|
||||
src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
|
||||
@@ -124,6 +124,11 @@
|
||||
/mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0)
|
||||
return
|
||||
|
||||
/mob/living/silicon/can_inject(var/mob/user, var/error_msg)
|
||||
if(error_msg)
|
||||
user << "<span class='alert'>Their outer shell is too tough.</span>"
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/IsAdvancedToolUser()
|
||||
return 1
|
||||
|
||||
@@ -207,7 +212,7 @@
|
||||
show_emergency_shuttle_eta()
|
||||
show_system_integrity()
|
||||
show_malf_ai()
|
||||
|
||||
|
||||
//Silicon mob language procs
|
||||
|
||||
/mob/living/silicon/can_speak(datum/language/speaking)
|
||||
@@ -290,7 +295,7 @@
|
||||
set category = "IC"
|
||||
|
||||
flavor_text = sanitize(copytext(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text, 1))
|
||||
|
||||
|
||||
/mob/living/silicon/binarycheck()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -1340,4 +1340,4 @@ mob/proc/yank_out_object()
|
||||
if(G.mind == mind)
|
||||
if(G.can_reenter_corpse || even_if_they_cant_reenter)
|
||||
return G
|
||||
break
|
||||
break
|
||||
|
||||
@@ -213,6 +213,13 @@ proc/hassensorlevel(A, var/level)
|
||||
|
||||
return zone
|
||||
|
||||
/proc/above_neck(zone)
|
||||
var/list/zones = list("head", "mouth", "eyes")
|
||||
if(zones.Find(zone))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/proc/stars(n, pr)
|
||||
if (pr == null)
|
||||
pr = 25
|
||||
@@ -491,4 +498,4 @@ var/list/intents = list("help","disarm","grab","harm")
|
||||
else // Everyone else (dead people who didn't ghost yet, etc.)
|
||||
lname = name
|
||||
lname = "<span class='name'>[lname]</span> "
|
||||
M << "<span class='deadsay'>[lname][follow][message]</span>"
|
||||
M << "<span class='deadsay'>[lname][follow][message]</span>"
|
||||
|
||||
@@ -261,7 +261,7 @@ datum/preferences
|
||||
var/icon/clothes_s = null
|
||||
var/uniform_dmi='icons/mob/uniform.dmi'
|
||||
if(disabilities&DISABILITY_FLAG_FAT)
|
||||
uniform_dmi='icons/mob/uniforFAT.dmi'
|
||||
uniform_dmi='icons/mob/uniform_fat.dmi'
|
||||
if(job_support_low & CIVILIAN)//This gives the preview icon clothes depending on which job(if any) is set to 'high'
|
||||
clothes_s = new /icon(uniform_dmi, "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
|
||||
@@ -32,7 +32,7 @@ var/global/image/typing_indicator
|
||||
|
||||
set_typing_indicator(1)
|
||||
hud_typing = 1
|
||||
var/message = input("","say (text)") as text
|
||||
var/message = input("","say (text)") as null|text
|
||||
hud_typing = 0
|
||||
set_typing_indicator(0)
|
||||
if(message)
|
||||
@@ -44,7 +44,7 @@ var/global/image/typing_indicator
|
||||
|
||||
set_typing_indicator(1)
|
||||
hud_typing = 1
|
||||
var/message = input("","me (text)") as text
|
||||
var/message = input("","me (text)") as null|text
|
||||
hud_typing = 0
|
||||
set_typing_indicator(0)
|
||||
if(message)
|
||||
|
||||
@@ -8,7 +8,7 @@ var/list/alldepartments = list()
|
||||
icon = 'icons/obj/library.dmi'
|
||||
icon_state = "fax"
|
||||
insert_anim = "faxsend"
|
||||
req_one_access = list(access_lawyer, access_heads, access_armory)
|
||||
req_one_access = list(access_lawyer, access_heads, access_armory)
|
||||
|
||||
use_power = 1
|
||||
idle_power_usage = 30
|
||||
@@ -31,7 +31,7 @@ var/list/alldepartments = list()
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/attackby(obj/item/weapon/item, mob/user)
|
||||
if(istype(item,/obj/item/weapon/card/id) && !scan)
|
||||
scan(item)
|
||||
@@ -40,14 +40,14 @@ var/list/alldepartments = list()
|
||||
nanomanager.update_uis(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
user << "<span class='notice'>The transmitters realign to an unknown source!</span>"
|
||||
else
|
||||
user << "<span class='warning'>You swipe the card through [src], but nothing happens.</span>"
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
if(scan)
|
||||
@@ -74,23 +74,23 @@ var/list/alldepartments = list()
|
||||
else
|
||||
data["respectcooldown"] = 0
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "faxmachine.tmpl", "Fax Machine UI", 540, 450)
|
||||
ui.set_initial_data(data)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
|
||||
if(href_list["send"])
|
||||
if(copyitem && authenticated)
|
||||
if ((destination in admin_departments) || (destination in hidden_admin_departments))
|
||||
send_admin_fax(usr, destination)
|
||||
else
|
||||
sendfax(destination,usr)
|
||||
|
||||
|
||||
if (sendcooldown)
|
||||
spawn(sendcooldown) // cooldown time
|
||||
sendcooldown = 0
|
||||
@@ -121,7 +121,7 @@ var/list/alldepartments = list()
|
||||
if(emagged)
|
||||
combineddepartments += hidden_admin_departments
|
||||
destination = input(usr, "To which department?", "Choose a department", "") as null|anything in combineddepartments
|
||||
if(!destination)
|
||||
if(!destination)
|
||||
destination = lastdestination
|
||||
|
||||
if(href_list["auth"])
|
||||
@@ -130,21 +130,21 @@ var/list/alldepartments = list()
|
||||
authenticated = 1
|
||||
else if(authenticated)
|
||||
authenticated = 0
|
||||
|
||||
|
||||
if(href_list["rename"])
|
||||
if(copyitem)
|
||||
var/n_name = sanitize(copytext(input(usr, "What would you like to label the fax?", "Fax Labelling", copyitem.name) as text, 1, MAX_MESSAGE_LEN))
|
||||
if((copyitem && copyitem.loc == src && usr.stat == 0))
|
||||
if (istype(copyitem, /obj/item/weapon/paper))
|
||||
copyitem.name = "[(n_name ? text("[n_name]") : initial(copyitem.name))]"
|
||||
copyitem.desc = "This is a paper titled '" + copyitem.name + "'."
|
||||
else if(istype(copyitem, /obj/item/weapon/photo))
|
||||
if (istype(copyitem, /obj/item/weapon/paper))
|
||||
copyitem.name = "[(n_name ? text("[n_name]") : initial(copyitem.name))]"
|
||||
copyitem.desc = "This is a paper titled '" + copyitem.name + "'."
|
||||
else if(istype(copyitem, /obj/item/weapon/photo))
|
||||
copyitem.name = "[(n_name ? text("[n_name]") : "photo")]"
|
||||
else if(istype(copyitem, /obj/item/weapon/paper_bundle))
|
||||
copyitem.name = "[(n_name ? text("[n_name]") : "paper")]"
|
||||
copyitem.name = "[(n_name ? text("[n_name]") : "paper")]"
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/scan(var/obj/item/weapon/card/id/card = null)
|
||||
if(scan) // Card is in machine
|
||||
if(ishuman(usr))
|
||||
@@ -172,14 +172,14 @@ var/list/alldepartments = list()
|
||||
/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination,var/mob/sender)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
|
||||
use_power(200)
|
||||
|
||||
|
||||
var/success = 0
|
||||
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
|
||||
if( F.department == destination )
|
||||
success = F.receivefax(copyitem)
|
||||
|
||||
|
||||
if (success)
|
||||
var/datum/fax/F = new /datum/fax()
|
||||
F.name = copyitem.name
|
||||
@@ -189,7 +189,7 @@ var/list/alldepartments = list()
|
||||
F.message = copyitem
|
||||
F.sent_by = sender
|
||||
F.sent_at = world.time
|
||||
|
||||
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
//sendcooldown = 600
|
||||
else
|
||||
@@ -198,16 +198,16 @@ var/list/alldepartments = list()
|
||||
/obj/machinery/photocopier/faxmachine/proc/receivefax(var/obj/item/incoming)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return 0
|
||||
|
||||
|
||||
if(department == "Unknown")
|
||||
return 0 //You can't send faxes to "Unknown"
|
||||
|
||||
flick("faxreceive", src)
|
||||
playsound(loc, "sound/items/polaroid1.ogg", 50, 1)
|
||||
|
||||
|
||||
// give the sprite some time to flick
|
||||
sleep(20)
|
||||
|
||||
|
||||
if (istype(incoming, /obj/item/weapon/paper))
|
||||
copy(incoming)
|
||||
else if (istype(incoming, /obj/item/weapon/photo))
|
||||
@@ -223,7 +223,7 @@ var/list/alldepartments = list()
|
||||
/obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
|
||||
use_power(200)
|
||||
|
||||
var/obj/item/rcvdcopy
|
||||
@@ -236,9 +236,9 @@ var/list/alldepartments = list()
|
||||
else
|
||||
visible_message("[src] beeps, \"Error transmitting message.\"")
|
||||
return
|
||||
|
||||
|
||||
rcvdcopy.loc = null //hopefully this shouldn't cause trouble
|
||||
|
||||
|
||||
var/datum/fax/admin/A = new /datum/fax/admin()
|
||||
A.name = rcvdcopy.name
|
||||
A.from_department = department
|
||||
@@ -247,7 +247,7 @@ var/list/alldepartments = list()
|
||||
A.message = rcvdcopy
|
||||
A.sent_by = sender
|
||||
A.sent_at = world.time
|
||||
|
||||
|
||||
//message badmins that a fax has arrived
|
||||
switch(destination)
|
||||
if ("Central Command")
|
||||
@@ -257,11 +257,11 @@ var/list/alldepartments = list()
|
||||
sendcooldown = 1800
|
||||
sleep(50)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/faxtype, var/obj/item/sent, font_colour="#006100")
|
||||
var/msg = "\blue <b><font color='[font_colour]'>[faxname]: </font>[key_name(sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[sender]'>BSA</A>) (<a href='?_src_=holder;AdminFaxCreate=\ref[sender];originfax=\ref[src];faxtype=[faxtype];replyto=\ref[sent]'>REPLY</a>)</b>: Receiving '[sent.name]' via secure connection... <a href='?_src_=holder;AdminFaxView=\ref[sent]'>view message</a>"
|
||||
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(R_EVENT & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
slot_flags = SLOT_BELT | SLOT_EARS
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
throw_speed = 7
|
||||
throw_range = 15
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
m_amt = 10
|
||||
var/colour = "black" //what colour the ink is!
|
||||
pressure_resistance = 2
|
||||
@@ -41,72 +41,37 @@
|
||||
colour = "white"
|
||||
|
||||
|
||||
/obj/item/weapon/pen/attack(mob/M as mob, mob/user as mob)
|
||||
if(!ismob(M))
|
||||
/obj/item/weapon/pen/attack(mob/living/M, mob/user)
|
||||
if(!istype(M))
|
||||
return
|
||||
user << "<span class='warning'>You stab [M] with the pen.</span>"
|
||||
// M << "\red You feel a tiny prick!" //That's a whole lot of meta!
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stabbed with [name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to stab [M.name] ([M.ckey])</font>")
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
return
|
||||
|
||||
if(M.can_inject(user, 1))
|
||||
user << "<span class='warning'>You stab [M] with the pen.</span>"
|
||||
// M << "<span class='danger'>You feel a tiny prick!</span>"
|
||||
. = 1
|
||||
|
||||
add_logs(user, M, "stabbed", object="[name]")
|
||||
|
||||
/*
|
||||
* Sleepy Pens
|
||||
* Sleepypens
|
||||
*/
|
||||
/obj/item/weapon/pen/sleepypen
|
||||
desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\""
|
||||
/obj/item/weapon/pen/sleepy
|
||||
flags = OPENCONTAINER
|
||||
origin_tech = "materials=2;syndicate=5"
|
||||
|
||||
|
||||
/obj/item/weapon/pen/sleepypen/New()
|
||||
var/datum/reagents/R = new/datum/reagents(30) //Used to be 300
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N
|
||||
/obj/item/weapon/pen/sleepy/attack(mob/living/M, mob/user)
|
||||
if(!istype(M)) return
|
||||
|
||||
if(..())
|
||||
if(reagents.total_volume)
|
||||
if(M.reagents)
|
||||
reagents.trans_to(M, 55)
|
||||
|
||||
|
||||
/obj/item/weapon/pen/sleepy/New()
|
||||
create_reagents(55)
|
||||
reagents.add_reagent("stoxin", 30)
|
||||
reagents.add_reagent("mutetoxin", 15)
|
||||
reagents.add_reagent("tirizene", 10)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob)
|
||||
if(!ismob(M))
|
||||
return
|
||||
..()
|
||||
msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
if(reagents.total_volume)
|
||||
if(M.reagents) reagents.trans_to(M, 50) //used to be 150
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
* Parapens
|
||||
*/
|
||||
/obj/item/weapon/pen/paralysis
|
||||
flags = OPENCONTAINER
|
||||
origin_tech = "materials=2;syndicate=5"
|
||||
|
||||
|
||||
/obj/item/weapon/pen/paralysis/New()
|
||||
var/datum/reagents/R = new/datum/reagents(55)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("stoxin", 30)
|
||||
R.add_reagent("mutetoxin", 15)
|
||||
R.add_reagent("tirizene", 10)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/pen/paralysis/attack(mob/M as mob, mob/user as mob)
|
||||
if(!ismob(M))
|
||||
return
|
||||
..()
|
||||
msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
if(reagents.total_volume)
|
||||
if(M.reagents) reagents.trans_to(M, 55) //used to be 150
|
||||
return
|
||||
@@ -131,6 +131,11 @@
|
||||
/obj/item/ammo_casing/shotgun/dart/attackby()
|
||||
return
|
||||
|
||||
/obj/item/ammo_casing/syringegun
|
||||
name = "syringe gun spring"
|
||||
desc = "A high-power spring that throws syringes."
|
||||
projectile_type = null
|
||||
|
||||
/obj/item/ammo_casing/shotgun/fakebeanbag
|
||||
name = "beanbag shell"
|
||||
desc = "A weak beanbag shell."
|
||||
|
||||
@@ -180,10 +180,10 @@
|
||||
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g
|
||||
name = "shotgun magazine (12g taser slugs)"
|
||||
icon_state = "m12gs"
|
||||
name = "shotgun magazine (12g buckshot)"
|
||||
icon_state = "m12gb"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/buckshot"
|
||||
origin_tech = "combat=3;syndicate=1"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/stunslug"
|
||||
caliber = "shotgun"
|
||||
max_ammo = 8
|
||||
|
||||
@@ -192,10 +192,10 @@
|
||||
icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/8)*8]"
|
||||
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g/buckshot
|
||||
name = "shotgun magazine (12g buckshot)"
|
||||
icon_state = "m12gb"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/buckshot"
|
||||
/obj/item/ammo_box/magazine/m12g/stun
|
||||
name = "shotgun magazine (12g taser slugs)"
|
||||
icon_state = "m12gs"
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/stunslug"
|
||||
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g/dragon
|
||||
|
||||
@@ -11,9 +11,8 @@
|
||||
var/modifystate
|
||||
|
||||
emp_act(severity)
|
||||
power_supply.use(round(power_supply.maxcharge / severity))
|
||||
power_supply.use(round(power_supply.charge / severity))
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
|
||||
New()
|
||||
|
||||
@@ -229,7 +229,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
projectile_type = "/obj/item/projectile/kinetic"
|
||||
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
|
||||
charge_cost = 5000
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/emproof"
|
||||
var/overheat = 0
|
||||
var/recent_reload = 1
|
||||
|
||||
@@ -240,6 +240,9 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
recent_reload = 0
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(var/mob/living/user/L)
|
||||
if(overheat || recent_reload)
|
||||
return
|
||||
@@ -274,6 +277,11 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
silenced = 0
|
||||
projectile_type = "/obj/item/projectile/energy/bolt/large"
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large/cyborg
|
||||
desc = "One and done!"
|
||||
icon_state = "crossbowlarge"
|
||||
origin_tech = null
|
||||
m_amt = 0
|
||||
|
||||
/obj/item/weapon/gun/energy/disabler
|
||||
name = "disabler"
|
||||
|
||||
@@ -24,18 +24,24 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/process_chambered()
|
||||
/obj/item/weapon/gun/projectile/process_chambered(var/eject_casing = 1, var/empty_chamber = 1)
|
||||
// if(in_chamber)
|
||||
// return 1
|
||||
|
||||
var/obj/item/ammo_casing/AC = chambered //Find chambered round
|
||||
if(isnull(AC) || !istype(AC))
|
||||
return 0
|
||||
AC.loc = get_turf(src) //Eject casing onto ground.
|
||||
AC.SpinAnimation(10, 1) //next gen special effects
|
||||
chambered = null
|
||||
if(eject_casing)
|
||||
AC.loc = get_turf(src) //Eject casing onto ground.
|
||||
AC.SpinAnimation(10, 1) //next gen special effects
|
||||
if(empty_chamber)
|
||||
chambered = null
|
||||
chamber_round()
|
||||
if(AC.BB)
|
||||
if(AC.reagents && AC.BB.reagents)
|
||||
var/datum/reagents/casting_reagents = AC.reagents
|
||||
casting_reagents.trans_to(AC.BB, casting_reagents.total_volume) //For chemical darts/bullets
|
||||
casting_reagents.delete()
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
AC.BB.loc = src //Set projectile loc to gun.
|
||||
AC.update_icon()
|
||||
|
||||
@@ -12,18 +12,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/process_chambered()
|
||||
var/obj/item/ammo_casing/AC = chambered //Find chambered round
|
||||
if(isnull(AC) || !istype(AC))
|
||||
return 0
|
||||
chambered = null
|
||||
chamber_round()
|
||||
if(AC.BB)
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
AC.BB.loc = src //Set projectile loc to gun.
|
||||
AC.BB = null
|
||||
AC.update_icon()
|
||||
return 1
|
||||
return 0
|
||||
return ..(0, 1)
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
var/num_loaded = 0
|
||||
|
||||
@@ -36,21 +36,10 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/process_chambered()
|
||||
var/obj/item/ammo_casing/AC = chambered //Find chambered round
|
||||
if(isnull(AC) || !istype(AC))
|
||||
return 0
|
||||
if(AC.BB)
|
||||
if(AC.reagents && AC.BB.reagents)
|
||||
var/datum/reagents/casting_reagents = AC.reagents
|
||||
casting_reagents.trans_to(AC.BB, casting_reagents.total_volume) //For chemical darts
|
||||
casting_reagents.delete()
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
AC.BB.loc = src //Set projectile loc to gun.
|
||||
AC.BB = null
|
||||
AC.update_icon()
|
||||
return 1
|
||||
return 0
|
||||
return ..(0, 0)
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/chamber_round()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/attack_self(mob/living/user as mob)
|
||||
if(recentpump) return
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
proj_hit = 1
|
||||
qdel(src)
|
||||
|
||||
proc/on_hit(var/atom/target, var/blocked = 0)
|
||||
proc/on_hit(var/atom/target, var/blocked = 0, var/hit_zone)
|
||||
if(!isliving(target)) return 0
|
||||
if(isanimal(target)) return 0
|
||||
var/mob/living/L = target
|
||||
@@ -107,6 +107,12 @@
|
||||
loc = A.loc
|
||||
return 0// nope.avi
|
||||
|
||||
var/reagent_note
|
||||
if(reagents && reagents.reagent_list)
|
||||
reagent_note = " REAGENTS:"
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
reagent_note += R.id + " ("
|
||||
reagent_note += num2text(R.volume) + ") "
|
||||
//Lower accurancy/longer range tradeoff. Distance matters a lot here, so at
|
||||
// close distance, actually RAISE the chance to hit.
|
||||
var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
|
||||
@@ -124,18 +130,18 @@
|
||||
playsound(loc, hitsound, 20, 1, -1)
|
||||
visible_message("\red [A.name] is hit by the [src.name] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
if(istype(firer, /mob))
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>[reagent_note]"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>[reagent_note]"
|
||||
if(M.ckey && chatlog_attacks)
|
||||
msg_admin_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
msg_admin_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src][reagent_note] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
if(!iscarbon(firer))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>[reagent_note]"
|
||||
if(M.ckey && chatlog_attacks)
|
||||
msg_admin_attack("UNKNOWN shot [M] ([M.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
msg_admin_attack("UNKNOWN shot [M] ([M.ckey]) with a [src][reagent_note] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
|
||||
spawn(0)
|
||||
if(A)
|
||||
|
||||
@@ -144,6 +144,8 @@
|
||||
name = "dart"
|
||||
icon_state = "cbbolt"
|
||||
damage = 6
|
||||
embed = 0
|
||||
sharp = 0
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
@@ -297,4 +297,17 @@
|
||||
starting_chems = list("kelotane","bicaridine","anti_toxin")
|
||||
|
||||
/obj/item/weapon/gun/dartgun/vox/raider
|
||||
starting_chems = list("space_drugs","stoxin","impedrezene")
|
||||
starting_chems = list("space_drugs","stoxin","impedrezene")
|
||||
|
||||
/obj/effect/syringe_gun_dummy //moved this shitty thing here
|
||||
name = ""
|
||||
desc = ""
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "null"
|
||||
anchored = 1
|
||||
density = 0
|
||||
|
||||
New()
|
||||
var/datum/reagents/R = new/datum/reagents(15)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
@@ -14,18 +14,19 @@
|
||||
possible_transfer_amounts = list(1,2,3,4,5,10,15,20,25,30)
|
||||
flags = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
var/ignore_flags = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M, mob/user)
|
||||
if(!reagents.total_volume)
|
||||
user << "\red [src] is empty."
|
||||
return
|
||||
if (!( istype(M, /mob) ))
|
||||
if(!istype(M))
|
||||
return
|
||||
if (reagents.total_volume)
|
||||
if(reagents.total_volume && (ignore_flags || M.can_inject(user, 1)))
|
||||
user << "\blue You inject [M] with [src]."
|
||||
M << "\red You feel a tiny prick!"
|
||||
|
||||
@@ -61,6 +62,7 @@
|
||||
possible_transfer_amounts = list(10)
|
||||
icon_state = "combat_hypo"
|
||||
volume = 60
|
||||
ignore_flags = 1 // So they can heal their comrades.
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/New()
|
||||
..()
|
||||
@@ -75,6 +77,7 @@
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(10)
|
||||
volume = 10
|
||||
ignore_flags = 1 //so you can medipen through hardsuits
|
||||
flags = null
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
|
||||
|
||||
@@ -55,6 +55,11 @@
|
||||
if(!proximity) return
|
||||
if(!target.reagents) return
|
||||
|
||||
if(isliving(target))
|
||||
var/mob/living/M = target
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
|
||||
if(mode == SYRINGE_BROKEN)
|
||||
user << "\red This syringe is broken!"
|
||||
return
|
||||
|
||||
@@ -1,136 +1,67 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/syringe
|
||||
name = "syringe gun"
|
||||
desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
desc = "A spring loaded rifle designed to fit syringes, used to incapacitate unruly patients from a distance."
|
||||
icon_state = "syringegun"
|
||||
item_state = "syringegun"
|
||||
w_class = 3.0
|
||||
w_class = 3
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
force = 4.0
|
||||
var/list/syringes = new/list()
|
||||
var/max_syringes = 1
|
||||
force = 4
|
||||
m_amt = 2000
|
||||
clumsy_check = 0
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
var/list/syringes = list()
|
||||
var/max_syringes = 1
|
||||
|
||||
/obj/item/weapon/gun/syringe/process_chambered()
|
||||
if(!syringes.len) return 0
|
||||
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = syringes[1]
|
||||
|
||||
if(!S) return 0
|
||||
|
||||
in_chamber = new /obj/item/projectile/bullet/dart/syringe(src)
|
||||
S.reagents.trans_to(in_chamber, S.reagents.total_volume)
|
||||
in_chamber.name = S.name
|
||||
syringes.Remove(S)
|
||||
|
||||
del(S)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/syringe/examine()
|
||||
set src in view()
|
||||
..()
|
||||
if (!(usr in view(2)) && usr!=src.loc) return
|
||||
usr << "\blue [syringes.len] / [max_syringes] syringes."
|
||||
usr << "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/syringe/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = I
|
||||
if(S.mode != 2)//SYRINGE_BROKEN in syringes.dm
|
||||
if(syringes.len < max_syringes)
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
syringes += I
|
||||
user << "\blue You put the syringe in [src]."
|
||||
user << "\blue [syringes.len] / [max_syringes] syringes."
|
||||
else
|
||||
usr << "\red [src] cannot hold more syringes."
|
||||
/obj/item/weapon/gun/syringe/attack_self(mob/living/user as mob)
|
||||
if(!syringes.len)
|
||||
user << "<span class='notice'>[src] is empty.</span>"
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = syringes[syringes.len]
|
||||
|
||||
if(!S) return 0
|
||||
S.loc = user.loc
|
||||
|
||||
syringes.Remove(S)
|
||||
user << "<span class = 'notice'>You unload [S] from \the [src]!</span>"
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/syringe/attackby(var/obj/item/A as obj, mob/user as mob, var/show_msg = 1)
|
||||
if(istype(A, /obj/item/weapon/reagent_containers/syringe))
|
||||
if(syringes.len < max_syringes)
|
||||
user.drop_item()
|
||||
user << "<span class='notice'>You load [A] into \the [src]!</span>"
|
||||
syringes.Add(A)
|
||||
A.loc = src
|
||||
return 1
|
||||
else
|
||||
usr << "\red This syringe is broken!"
|
||||
|
||||
|
||||
/obj/item/weapon/gun/syringe/afterattack(obj/target, mob/user , flag)
|
||||
if(!isturf(target.loc) || target == user) return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/syringe/can_fire()
|
||||
return syringes.len
|
||||
|
||||
/obj/item/weapon/gun/syringe/can_hit(var/mob/living/target as mob, var/mob/living/user as mob)
|
||||
return 1 //SHOOT AND LET THE GOD GUIDE IT (probably will hit a wall anyway)
|
||||
|
||||
/obj/item/weapon/gun/syringe/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0)
|
||||
if(syringes.len)
|
||||
spawn(0) fire_syringe(target,user)
|
||||
else
|
||||
usr << "\red [src] is empty."
|
||||
|
||||
/obj/item/weapon/gun/syringe/proc/fire_syringe(atom/target, mob/user)
|
||||
if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
else
|
||||
var/turf/trg = get_turf(target)
|
||||
var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src))
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = syringes[1]
|
||||
if((!S) || (!S.reagents)) //ho boy! wot runtimes!
|
||||
return
|
||||
S.reagents.trans_to(D, S.reagents.total_volume)
|
||||
syringes -= S
|
||||
del(S)
|
||||
D.icon_state = "syringeproj"
|
||||
D.name = "syringe"
|
||||
playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
|
||||
for(var/i=0, i<6, i++)
|
||||
if(!D) break
|
||||
if(D.loc == trg) break
|
||||
step_towards(D,trg)
|
||||
|
||||
if(D)
|
||||
for(var/mob/living/carbon/M in D.loc)
|
||||
if(!istype(M,/mob/living/carbon)) continue
|
||||
if(M == user) continue
|
||||
//Syringe gun attack logging by Yvarov
|
||||
var/R
|
||||
if(D.reagents)
|
||||
for(var/datum/reagent/A in D.reagents.reagent_list)
|
||||
R += A.id + " ("
|
||||
R += num2text(A.volume) + "),"
|
||||
if (istype(M, /mob))
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
if(M.ckey)
|
||||
msg_admin_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
msg_admin_attack("UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
if(D.reagents)
|
||||
D.reagents.trans_to(M, 15)
|
||||
M.visible_message("<span class='danger'>[M] is hit by the syringe!</span>")
|
||||
|
||||
del(D)
|
||||
break
|
||||
if(D)
|
||||
for(var/atom/A in D.loc)
|
||||
if(A == user) continue
|
||||
if(A.density) del(D)
|
||||
|
||||
sleep(1)
|
||||
|
||||
if (D) spawn(10) del(D)
|
||||
|
||||
return
|
||||
usr << "<span class='notice'>[src] cannot hold more syringes.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/syringe/rapidsyringe
|
||||
name = "rapid syringe gun"
|
||||
desc = "A modification of the syringe gun design, using a rotating cylinder to store up to four syringes."
|
||||
desc = "A modification of the syringe gun design, using a rotating cylinder to store up to six syringes."
|
||||
icon_state = "rapidsyringegun"
|
||||
max_syringes = 4
|
||||
|
||||
|
||||
/obj/effect/syringe_gun_dummy
|
||||
name = ""
|
||||
desc = ""
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "null"
|
||||
anchored = 1
|
||||
density = 0
|
||||
|
||||
New()
|
||||
var/datum/reagents/R = new/datum/reagents(15)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
max_syringes = 6
|
||||
@@ -250,7 +250,7 @@
|
||||
if(prob(75))
|
||||
new_item = new /obj/item/weapon/pen(src.loc)
|
||||
else
|
||||
new_item = new /obj/item/weapon/pen/sleepypen(src.loc)
|
||||
new_item = new /obj/item/weapon/pen/sleepy(src.loc)
|
||||
if(prob(30))
|
||||
apply_image_decorations = 1
|
||||
if(16)
|
||||
|
||||
@@ -216,6 +216,7 @@ var/MAX_EX_FLASH_RANGE = 14
|
||||
#define HEADBANGPROTECT 4096
|
||||
#define EARBANGPROTECT 1024
|
||||
|
||||
#define THICKMATERIAL 1024 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP)
|
||||
#define NOSLIP 1024 //prevents from slipping on wet floors, in space etc
|
||||
|
||||
#define OPENCONTAINER 4096 // is an open container for chemistry purposes
|
||||
@@ -404,10 +405,11 @@ var/MAX_EX_FLASH_RANGE = 14
|
||||
#define PSY_RESIST 204 // Block remoteview
|
||||
#define SUPER_FART 205 // Duh
|
||||
#define EMPATH 206 //Read minds
|
||||
#define COMIC 207 //Comic Sans
|
||||
|
||||
// /vg/ muts
|
||||
#define LOUD 208 // CAUSES INTENSE YELLING
|
||||
#define WHISPER 209 // causes quiet whispering
|
||||
//#define WHISPER 209 // causes quiet whispering
|
||||
#define DIZZY 210 // Trippy.
|
||||
|
||||
//disabilities
|
||||
@@ -843,6 +845,7 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse
|
||||
#define HAS_TAIL 8
|
||||
#define HAS_SKIN_TONE 16
|
||||
#define HAS_SKIN_COLOR 32
|
||||
#define TAIL_WAGGING 64
|
||||
|
||||
//Language flags.
|
||||
#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
|
||||
|
||||
@@ -77,8 +77,10 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.trinary {color: #727272;}
|
||||
.kidan {color: #664205;}
|
||||
.slime {color: #0077AA;}
|
||||
.clown {color: #ff0000;}
|
||||
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
|
||||
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
||||
.sans {font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
|
||||
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 595 KiB After Width: | Height: | Size: 194 KiB |
|
After Width: | Height: | Size: 595 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 300 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 105 KiB |
@@ -581,7 +581,7 @@ macro "macro"
|
||||
is-disabled = false
|
||||
elem
|
||||
name = "F3"
|
||||
command = "say"
|
||||
command = ".say"
|
||||
is-disabled = false
|
||||
elem
|
||||
name = "F4"
|
||||
@@ -783,7 +783,7 @@ macro "hotkeymode"
|
||||
is-disabled = false
|
||||
elem
|
||||
name = "T"
|
||||
command = "say"
|
||||
command = ".say"
|
||||
is-disabled = false
|
||||
elem "w_key"
|
||||
name = "W+REP"
|
||||
@@ -839,7 +839,7 @@ macro "hotkeymode"
|
||||
is-disabled = false
|
||||
elem
|
||||
name = "F3"
|
||||
command = "say"
|
||||
command = ".say"
|
||||
is-disabled = false
|
||||
elem
|
||||
name = "F4"
|
||||
|
||||
@@ -9059,7 +9059,7 @@
|
||||
"dsk" = (/obj/item/weapon/storage/box/syringes,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/gun/syringe/rapidsyringe,/obj/item/weapon/reagent_containers/spray/chemsprayer,/obj/structure/closet,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"dsl" = (/turf/space,/turf/unsimulated/wall{dir = 2; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/admin)
|
||||
"dsm" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/automatic/pistol{pixel_x = 3; pixel_y = -3},/obj/item/weapon/suppressor,/obj/item/weapon/suppressor{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"dsn" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m12g,/obj/item/ammo_box/magazine/m12g,/obj/item/ammo_box/magazine/m12g/buckshot,/obj/item/ammo_box/magazine/m12g/buckshot,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/weapon/gun/projectile/automatic/bulldog,/obj/item/weapon/gun/projectile/automatic/bulldog{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"dsn" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m12g,/obj/item/ammo_box/magazine/m12g,/obj/item/ammo_box/magazine/m12g/stun,/obj/item/ammo_box/magazine/m12g/stun,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/weapon/gun/projectile/automatic/bulldog,/obj/item/weapon/gun/projectile/automatic/bulldog{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"dso" = (/obj/structure/rack,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/ammo_box/magazine/smgm45,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"dsp" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/ammo_box/magazine/m75,/obj/item/weapon/gun/projectile/automatic/gyropistol,/obj/item/weapon/gun/projectile/automatic/gyropistol{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
"dsq" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/ammo_box/magazine/m50,/obj/item/weapon/gun/projectile/automatic/deagle,/obj/item/weapon/gun/projectile/automatic/deagle{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin)
|
||||
|
||||