mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-30 15:38:02 +01:00
Merge remote-tracking branch 'upstream/master' into kk-headsets
This commit is contained in:
@@ -80,3 +80,9 @@
|
||||
**Creator:** VerySoft (https://github.com/TS-Rogue-Star/Rogue-Star/pull/435)<br>
|
||||
**URL:** [Website](https://rogue-star.net/)<br>
|
||||
**License:** Permission granting in writing for use by Virgo and Chomp with proper attribution
|
||||
<br>
|
||||
**File:** `icons/mob/turkey.dmi`
|
||||
**Title:** Turkey<br>
|
||||
**Creator:** VerySoft (https://github.com/TS-Rogue-Star/Rogue-Star/pull/669)<br>
|
||||
**URL:** [Website](https://rogue-star.net/)<br>
|
||||
**License:** Permission granted in writing for use by Virgo and Chomp with proper attribution
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#define CE_DARKSIGHT "darksight" // Gives perfect vision in dark
|
||||
|
||||
#define REAGENTS_PER_SHEET 20
|
||||
#define REAGENTS_PER_ORE 20
|
||||
|
||||
// Attached to CE_ANTIBIOTIC
|
||||
#define ANTIBIO_NORM 1
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
#define ACCESSORY_SLOT_ARMOR_M 0x8000
|
||||
#define ACCESSORY_SLOT_HELM_C 0x10000 //24 bit - higher than 0x80000 will overflow
|
||||
|
||||
#define ACCESSORY_SLOT_RING 0x20000 //rings, knuckledusters
|
||||
#define ACCESSORY_SLOT_WRIST 0x40000 //wristwatches, wrist PDA maybe?
|
||||
|
||||
// Bitmasks for the /obj/item/var/flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses.
|
||||
// WARNING: The following flags apply only to the external suit!
|
||||
#define HIDEGLOVES 0x1
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
#define JOB_ALT_CONSTRUCTION_ENGINEER "Construction Engineer"
|
||||
#define JOB_ALT_ENGINEERING_CONTRACTOR "Engineering Contractor"
|
||||
#define JOB_ALT_COMPUTER_TECHNICIAN "Computer Technician"
|
||||
#define JOB_ALT_SALVAGE_TECHNICIAN "Salvage Technician"
|
||||
|
||||
#define JOB_ATMOSPHERIC_TECHNICIAN "Atmospheric Technician"
|
||||
// Atmospheric Technician alt titles
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
if(ismob(I))
|
||||
if(!sight_check || isInSight(I, O))
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects, ignore_show_messages)
|
||||
if(include_mobs)
|
||||
if(client_check)
|
||||
var/mob/M = I
|
||||
@@ -185,7 +185,7 @@
|
||||
var/obj/check_obj = I
|
||||
if(ignore_show_messages || check_obj.show_messages)
|
||||
if(!sight_check || isInSight(I, O))
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects, ignore_show_messages)
|
||||
if(include_objects)
|
||||
L |= I
|
||||
|
||||
|
||||
@@ -620,3 +620,8 @@
|
||||
return json_decode(data)
|
||||
catch
|
||||
return null
|
||||
|
||||
/// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts
|
||||
/proc/sanitize_css_class_name(name)
|
||||
var/static/regex/regex = new(@"[^a-zA-Z0-9]","g")
|
||||
return replacetext(name, regex, "")
|
||||
|
||||
@@ -443,7 +443,7 @@
|
||||
|
||||
/datum/category_item/autolathe/arms/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
path =/obj/item/clothing/gloves/knuckledusters
|
||||
path =/obj/item/clothing/accessory/knuckledusters
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tacknife
|
||||
|
||||
@@ -177,19 +177,21 @@
|
||||
if(!is_admin())
|
||||
return FALSE
|
||||
|
||||
var/datum/disease/D = tgui_input_list(usr, "Choose virus", "Viruses", subtypesof(/datum/disease), subtypesof(/datum/disease))
|
||||
var/mob/living/carbon/human/H = null
|
||||
var/disease = tgui_input_list(usr, "Choose virus", "Viruses", subtypesof(/datum/disease), subtypesof(/datum/disease))
|
||||
var/mob/living/carbon/human/H = tgui_input_list(usr, "Choose infectee", human_mob_list)
|
||||
|
||||
if(isnull(D))
|
||||
var/datum/disease/D = new disease
|
||||
|
||||
if(isnull(D) || isnull(H))
|
||||
return FALSE
|
||||
|
||||
for(var/thing in shuffle(human_mob_list))
|
||||
H = thing
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
break
|
||||
if(H.stat == DEAD)
|
||||
return FALSE
|
||||
|
||||
message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [D.name]! Affected mob: [key_name_admin(H)]")
|
||||
log_admin("[key_name_admin(usr)] infected [key_name_admin(H)] with [D.name]")
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
|
||||
message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [D.name]! Affected mob: [key_name_admin(H)]")
|
||||
log_admin("[key_name_admin(usr)] infected [key_name_admin(H)] with [D.name]")
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -354,20 +354,20 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
|
||||
var/new_name = tgui_input_text(usr, "Name your new disease.", "New Name")
|
||||
if(!new_name)
|
||||
return
|
||||
return FALSE
|
||||
D.AssignName(new_name)
|
||||
D.Refresh()
|
||||
|
||||
for(var/datum/disease/advance/AD in active_diseases)
|
||||
AD.Refresh()
|
||||
|
||||
for(var/thing in shuffle(human_mob_list))
|
||||
H = thing
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
break
|
||||
H = tgui_input_list(usr, "Choose infectee", human_mob_list)
|
||||
|
||||
if(isnull(H))
|
||||
return FALSE
|
||||
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
|
||||
var/list/name_symptoms = list()
|
||||
for(var/datum/symptom/S in D.symptoms)
|
||||
@@ -375,6 +375,8 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
message_admins("[key_name_admin(usr)] has triggered a custom virus outbreak of [D.name]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
log_admin("[key_name_admin(usr)] infected [key_name_admin(H)] with [D.name]. It has these symptoms: [english_list(name_symptoms)]")
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/disease/advance/proc/totalStageSpeed()
|
||||
var/total_stage_speed = 0
|
||||
for(var/i in symptoms)
|
||||
|
||||
@@ -35,6 +35,6 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/fever/proc/Heat(var/mob/living/M, var/datum/disease/advance/A)
|
||||
var/get_heat = (sqrt(21+A.totalTransmittable()*2))+(sqrt(20+A.totalStageSpeed()*3))
|
||||
var/get_heat = (sqrtor0(21+A.totalTransmittable()*2))+(sqrtor0(20+A.totalStageSpeed()*3))
|
||||
M.bodytemperature = min(M.bodytemperature + (get_heat * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1)
|
||||
return TRUE
|
||||
|
||||
@@ -37,6 +37,6 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = ((sqrt(16-A.totalStealth()))*5)
|
||||
var/get_damage = ((sqrtor0(16-A.totalStealth()))*5)
|
||||
M.adjustBruteLoss(get_damage)
|
||||
return 1
|
||||
|
||||
@@ -33,7 +33,7 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = (sqrt(20+A.totalStageSpeed())*(1+rand()))
|
||||
var/get_damage = (sqrtor0(20+A.totalStageSpeed())*(1+rand()))
|
||||
M.adjustToxLoss(-get_damage)
|
||||
return TRUE
|
||||
|
||||
@@ -144,7 +144,7 @@ Bonus
|
||||
level = 5
|
||||
|
||||
/datum/symptom/heal/dna/Heal(var/mob/living/carbon/M, var/datum/disease/advance/A)
|
||||
var/amt_healed = (sqrt(20+A.totalStageSpeed()*(3+rand())))-(sqrt(16+A.totalStealth()*rand()))
|
||||
var/amt_healed = (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand()))
|
||||
M.adjustBrainLoss(-amt_healed)
|
||||
M.radiation = max(M.radiation - 3, 0)
|
||||
return TRUE
|
||||
|
||||
@@ -70,4 +70,4 @@ BONUS
|
||||
phage.viruses += D
|
||||
|
||||
M.visible_message(span_danger("A strange crearure bursts out of [M]!"), span_userdanger("A slimy creature bursts forth from your flesh!"))
|
||||
addtimer(CALLBACK(phage, TYPE_PROC_REF(/mob/living/simple_mob/vore/aggressive/macrophage, dust)), 3000)
|
||||
addtimer(CALLBACK(phage, TYPE_PROC_REF(/mob/living/simple_mob/vore/aggressive/macrophage, deathcheck)), 3000)
|
||||
|
||||
@@ -34,6 +34,6 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/shivering/proc/Chill(mob/living/M, datum/disease/advance/A)
|
||||
var/get_cold = (sqrt(16+A.totalStealth()*2))+(sqrt(21+A.totalResistance()*2))
|
||||
var/get_cold = (sqrtor0(16+A.totalStealth()*2))+(sqrtor0(21+A.totalResistance()*2))
|
||||
M.bodytemperature = max(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1)
|
||||
return 1
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
/obj/item/toy/plushie/slimeplushie,
|
||||
/obj/item/toy/plushie/box,
|
||||
/obj/item/toy/plushie/borgplushie,
|
||||
/obj/item/toy/plushie/borgplushie/drake/eng,
|
||||
/obj/item/toy/plushie/borgplushie/medihound,
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy,
|
||||
/obj/item/toy/plushie/foxbear,
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
/obj/item/material/knife/tacknife/survival,
|
||||
/obj/item/material/knife/machete,
|
||||
/obj/item/clothing/accessory/holster/machete,
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
cost=25
|
||||
containertype = /obj/structure/closet/crate/secure/xion
|
||||
@@ -200,7 +200,7 @@
|
||||
/obj/item/clothing/head/pilot_vr,
|
||||
/obj/item/clothing/under/rank/pilot1,
|
||||
/obj/item/gun/energy/gun/protector/pilotgun/locked,
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
cost=20
|
||||
containertype = /obj/structure/closet/crate/secure/xion
|
||||
@@ -236,7 +236,7 @@
|
||||
/obj/item/clothing/accessory/holster/machete,
|
||||
/obj/item/storage/box/explorerkeys,
|
||||
/obj/item/mapping_unit,
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
cost = 75
|
||||
containertype = /obj/structure/closet/crate/secure/xion
|
||||
|
||||
@@ -58,12 +58,6 @@
|
||||
item_cost = 20
|
||||
path = /obj/item/pen/blade/fountain
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/angrybuzzer
|
||||
name = "Morphium Shock Ring"
|
||||
desc = "An enigmatic ring used to create powerful electric shocks when punching. Can be used as a brute-force method of defibrillation."
|
||||
item_cost = 40
|
||||
path = /obj/item/clothing/gloves/ring/buzzer
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/huntingtrap
|
||||
name = "Camonetted Beartraps"
|
||||
desc = "A box of unique beartraps which will partially cloak when deployed, allowing for more effective hunting."
|
||||
|
||||
@@ -48,6 +48,10 @@
|
||||
title = JOB_ALT_COMPUTER_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_COMPUTER_TECHNICIAN + " fulfills similar duties to other engineers, but specializes in working with software and computers. They also often deal with integrated circuits."
|
||||
|
||||
/datum/alt_title/salvage_tech
|
||||
title = JOB_ALT_SALVAGE_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_SALVAGE_TECHNICIAN + " is responsible for breaking down debris and obsolete equipment to recover useful components and materials."
|
||||
|
||||
/datum/job/atmos
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_ENGINEERING
|
||||
|
||||
@@ -254,19 +254,19 @@
|
||||
if (!(src.status))
|
||||
if(user)
|
||||
visible_message(span_notice(" [user] has deactivated [src]!"))
|
||||
add_hiddenprint(user)
|
||||
else
|
||||
visible_message(span_notice(" [src] clicks and shuts down. "))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
icon_state = "[initial(icon_state)]1"
|
||||
add_hiddenprint(user)
|
||||
else
|
||||
if(user)
|
||||
visible_message(span_notice(" [user] has reactivated [src]!"))
|
||||
add_hiddenprint(user)
|
||||
else
|
||||
visible_message(span_notice(" [src] clicks and reactivates itself. "))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
icon_state = initial(icon_state)
|
||||
add_hiddenprint(user)
|
||||
|
||||
/obj/machinery/camera/take_damage(var/force, var/message)
|
||||
//prob(25) gives an average of 3-4 hits
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
/obj/item/toy/redbutton = 2,
|
||||
/obj/item/toy/gnome = 2,
|
||||
/obj/item/toy/AI = 2,
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy = 2,
|
||||
/obj/item/storage/box/handcuffs/fake = 2,
|
||||
/obj/item/toy/nuke = 2,
|
||||
/obj/item/toy/minigibber = 2,
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/obj/machinery/contraband_scanner
|
||||
name = "contraband scanner"
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/atm_fieldgen.dmi'
|
||||
icon_state = "arfg_off"
|
||||
desc = "A simple scanner that analyzes those who pass over it, and sounds an alarm if it detects any items that are programmed into its contraband list."
|
||||
anchored = TRUE
|
||||
opacity = FALSE
|
||||
density = FALSE
|
||||
power_channel = EQUIP
|
||||
use_power = USE_POWER_IDLE
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 250
|
||||
|
||||
var/deep_scan = TRUE //check more than just their hands/pockets?
|
||||
var/contraband_count = 0 //how many items have we detected? only one actually needs to be found to set off the alarm
|
||||
var/area_lockdown = TRUE //do we set off the fire alarm for our area when triggered?
|
||||
var/close_blastdoors = TRUE //close all blast doors in the area when triggered?
|
||||
var/power_fields = TRUE //do we activate all ARFs when triggered? use w/ impassable fieldgens. requires area_lockdown = TRUE to do anything.
|
||||
|
||||
var/last_trigger //when were we last triggered? combined with the cooldown below for sanity reasons
|
||||
var/cooldown = 15 SECONDS //minimum time between retriggers, so people can't spam trigger the scanner to be obnoxious
|
||||
var/auto_cancel = TRUE //automatically cancel alarm states after a delay? same duration as the cooldown for sanity
|
||||
var/trigger_message = "The contraband scanner has been tripped!"
|
||||
var/trigger_sound = 'sound/machines/airalarm.ogg' //sound that plays when we're set off
|
||||
|
||||
var/list/contraband = list(/obj/item/melee,/obj/item/gun,/obj/item/material)
|
||||
|
||||
/obj/machinery/contraband_scanner/Crossed(mob/living/M as mob)
|
||||
if(M.is_incorporeal())
|
||||
return
|
||||
if(isliving(M))
|
||||
var/area/A = src.loc.loc
|
||||
if(last_trigger > world.time - cooldown)
|
||||
return
|
||||
for(var/obj/O in M.contents)
|
||||
if(is_type_in_list(O,contraband))
|
||||
contraband_count++
|
||||
if(deep_scan)
|
||||
for(var/obj/O2 in O.contents) //one layer deep is fine for now I think
|
||||
if(is_type_in_list(O2,contraband))
|
||||
contraband_count++
|
||||
if(contraband_count && last_trigger < world.time - cooldown)
|
||||
visible_message(span_danger(trigger_message))
|
||||
playsound(src, trigger_sound, 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS)
|
||||
for(var/obj/machinery/contraband_scanner/CS in A)
|
||||
CS.last_trigger = world.time //set everyone's trigger time at once, to cut down on spam
|
||||
CS.contraband_count = 0 //clear all our contraband counts too
|
||||
if(area_lockdown)
|
||||
if(close_blastdoors)
|
||||
for(var/obj/machinery/door/blast/B in A)
|
||||
if(!B.density)
|
||||
spawn(0)
|
||||
B.close()
|
||||
if(power_fields)
|
||||
A.arfgs_activate()
|
||||
if(auto_cancel)
|
||||
spawn(cooldown)
|
||||
if(close_blastdoors)
|
||||
for(var/obj/machinery/door/blast/B in A)
|
||||
if(B.density)
|
||||
spawn(0)
|
||||
B.open()
|
||||
if(power_fields)
|
||||
A.arfgs_deactivate()
|
||||
|
||||
..()
|
||||
@@ -112,6 +112,10 @@ var/global/list/image/splatter_cache=list()
|
||||
var/obj/structure/bed/chair/wheelchair/W = perp.buckled
|
||||
W.bloodiness = 4
|
||||
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
amount--
|
||||
|
||||
/obj/effect/decal/cleanable/blood/proc/dry()
|
||||
@@ -124,6 +128,11 @@ var/global/list/image/splatter_cache=list()
|
||||
..()
|
||||
if (amount && istype(user))
|
||||
add_fingerprint(user)
|
||||
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
user.ContractDisease(D)
|
||||
|
||||
if (user.gloves)
|
||||
return
|
||||
var/taken = rand(1,amount)
|
||||
@@ -258,4 +267,14 @@ var/global/list/image/splatter_cache=list()
|
||||
viruses.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/Crossed(mob/living/carbon/human/perp)
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
/obj/effect/decal/cleanable/vomit/Crossed(mob/living/carbon/human/perp)
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
#undef DRYING_TIME
|
||||
|
||||
@@ -118,7 +118,6 @@
|
||||
to speak with your team, and learn what their plan is for today."))
|
||||
|
||||
R.key = C.key
|
||||
// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed.
|
||||
|
||||
spawn(1)
|
||||
mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE)
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
disrupt()
|
||||
..()
|
||||
|
||||
/obj/item/chameleon/attack_self()
|
||||
toggle()
|
||||
/obj/item/chameleon/attack_self(mob/user)
|
||||
toggle(user)
|
||||
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!active_dummy)
|
||||
if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear))
|
||||
@@ -42,30 +42,32 @@
|
||||
saved_icon_state = target.icon_state
|
||||
saved_overlays = target.overlays
|
||||
|
||||
/obj/item/chameleon/proc/toggle()
|
||||
/obj/item/chameleon/proc/toggle(mob/user)
|
||||
if(!can_use || !saved_item) return
|
||||
if(active_dummy)
|
||||
eject_all()
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
qdel(active_dummy)
|
||||
active_dummy = null
|
||||
to_chat(usr, span_notice("You deactivate the [src]."))
|
||||
to_chat(user, span_notice("You deactivate the [src]."))
|
||||
var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src))
|
||||
T.icon = 'icons/effects/effects.dmi'
|
||||
flick("emppulse",T)
|
||||
spawn(8) qdel(T)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), T), 0.8 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
var/obj/O = new saved_item(src)
|
||||
if(!O) return
|
||||
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc)
|
||||
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src)
|
||||
if(istype(user.loc, /obj/item/holder)) // This doesn't go well...
|
||||
return
|
||||
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(user.loc)
|
||||
C.activate(O, user, saved_icon, saved_icon_state, saved_overlays, src)
|
||||
qdel(O)
|
||||
to_chat(usr, span_notice("You activate the [src]."))
|
||||
to_chat(user, span_notice("You activate the [src]."))
|
||||
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
||||
T.icon = 'icons/effects/effects.dmi'
|
||||
flick("emppulse",T)
|
||||
spawn(8) qdel(T)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), T), 0.8 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/chameleon/proc/disrupt(var/delete_dummy = 1)
|
||||
if(active_dummy)
|
||||
@@ -78,7 +80,10 @@
|
||||
qdel(active_dummy)
|
||||
active_dummy = null
|
||||
can_use = 0
|
||||
spawn(50) can_use = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_use)), 5 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/chameleon/proc/allow_use()
|
||||
can_use = 1
|
||||
|
||||
/obj/item/chameleon/proc/eject_all()
|
||||
for(var/atom/movable/A in active_dummy)
|
||||
@@ -127,6 +132,9 @@
|
||||
..()
|
||||
master.disrupt()
|
||||
|
||||
/obj/effect/dummy/chameleon/proc/allow_move()
|
||||
can_move = 1
|
||||
|
||||
/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction)
|
||||
if(istype(loc, /turf/space)) return //No magical space movement!
|
||||
|
||||
@@ -134,15 +142,15 @@
|
||||
can_move = 0
|
||||
switch(user.bodytemperature)
|
||||
if(300 to INFINITY)
|
||||
spawn(10) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1 SECOND, TIMER_DELETE_ME)
|
||||
if(295 to 300)
|
||||
spawn(13) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1.3 SECONDS, TIMER_DELETE_ME)
|
||||
if(280 to 295)
|
||||
spawn(16) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1.6 SECONDS, TIMER_DELETE_ME)
|
||||
if(260 to 280)
|
||||
spawn(20) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 2 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
spawn(25) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 2.5 SECONDS, TIMER_DELETE_ME)
|
||||
step(src, direction)
|
||||
return
|
||||
|
||||
|
||||
@@ -576,6 +576,18 @@
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/alt/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_headset_alt"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/earbud/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_earbud"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/raider
|
||||
origin_tech = list(TECH_ILLEGAL = 2)
|
||||
icon_state = "syndie_headset"
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
else
|
||||
dat += span_warning("Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.")
|
||||
dat += "<br>"
|
||||
if(C.resistances.len)
|
||||
if(LAZYLEN(C.resistances))
|
||||
for (var/datum/disease/virus in C.GetViruses())
|
||||
if(virus.visibility_flags & HIDDEN_SCANNER || virus.visibility_flags & HIDDEN_PANDEMIC)
|
||||
continue
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
//For bypassing locked /obj/structure/simple_doors
|
||||
|
||||
/obj/item/lockpick
|
||||
name = "set of lockpicks"
|
||||
desc = "A set of picks and tension wrenches, ideal for picking old-style mechanical locks... not that any of those exist on most NT facilities these days. Still, it might be useful elsewhere?"
|
||||
icon = 'icons/obj/lockpicks.dmi'
|
||||
icon_state = "lockpicks"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/pick_type = "simple"
|
||||
var/pick_time = 10 SECONDS
|
||||
var/pick_verb = "pick"
|
||||
|
||||
/obj/item/lockpick/afterattack(atom/A, mob/user)
|
||||
if(!user.IsAdvancedToolUser()) //no lockpicking for monkeys
|
||||
return
|
||||
if(istype(A, /obj/structure/simple_door))
|
||||
var/obj/structure/simple_door/D = A
|
||||
if(!D.locked) //you can pick your nose, but you can't pick an unlocked door
|
||||
to_chat(user, span_notice("\The [D] isn't locked."))
|
||||
return
|
||||
else if(D.lock_type != pick_type) //make sure our types match
|
||||
to_chat(user, span_warning("\The [src] can't pick \the [D]. Another tool might work?"))
|
||||
return
|
||||
else if(!D.can_pick) //make sure we're actually allowed to bypass it at all
|
||||
to_chat(user, span_warning("\The [D] can't be [pick_verb]ed."))
|
||||
return
|
||||
else //finally, we can assume that they do match
|
||||
to_chat(user, span_notice("You start to [pick_verb] the lock on \the [D]..."))
|
||||
playsound(src, D.keysound,100, 1)
|
||||
if(do_after(user, pick_time * D.lock_difficulty))
|
||||
to_chat(user, span_notice("Success!"))
|
||||
D.locked = FALSE
|
||||
else if(istype(A,/mob/living/carbon/human)) //you can pick your friends, and you can pick your nose, but you can't pick your friend's nose
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(user.zone_sel.selecting == BP_HEAD)
|
||||
if(H == user)
|
||||
to_chat(user, span_notice("Your nose isn't locked. If you're feeling stuffy, maybe you should talk to a doctor..?"))
|
||||
else
|
||||
user.visible_message(span_notice("[user] tries to [pick_verb] [H]'s nose with \the [src]! They don't seem to be having much success."),span_notice("You try to [pick_verb] [H]'s nose. It doesn't seem to be working."))
|
||||
return
|
||||
|
||||
/obj/item/lockpick/pick_gun
|
||||
name = "pick gun"
|
||||
desc = "A more sophisticated and automated alternative to traditional lockpicking methods. Contains a dazzling array of tools in a simple-to-use housing: just press the face plate against the lock face and hold the trigger down until it goes click."
|
||||
icon_state = "pick_gun"
|
||||
pick_time = 3 SECONDS
|
||||
|
||||
/obj/item/lockpick/mag_sequencer
|
||||
name = "magnetic sequencer"
|
||||
desc = "A deceptively simple gadget that brute-forces magnetic locks using a small electromagnet. A predecessor to the cryptographic sequencer, a more complicated device that is considered contraband in most jurisdictions. Not that these aren't illegal either, mind you!"
|
||||
icon_state = "mag_sequencer"
|
||||
pick_type = "maglock"
|
||||
pick_time = 5 SECONDS
|
||||
pick_verb = "bypass"
|
||||
@@ -225,7 +225,6 @@
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
callHook("borgify", list(O))
|
||||
O.namepick()
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -556,35 +556,6 @@
|
||||
/obj/item/toy/AI/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* Hand buzzer
|
||||
*/
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy
|
||||
name = "steel ring"
|
||||
desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side."
|
||||
icon_state = "seal-signet"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/Touch(var/atom/A, var/proximity)
|
||||
if(proximity && istype(usr, /mob/living/carbon/human))
|
||||
|
||||
return zap(usr, A, proximity)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
|
||||
. = FALSE
|
||||
if(user.a_intent == I_HELP && battery.percent() >= 50)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
to_chat(L, span_warning("You feel a powerful shock!"))
|
||||
if(!.)
|
||||
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
|
||||
L.electrocute_act(battery.percent() * 0, src)
|
||||
return .
|
||||
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Toy cuffs
|
||||
*/
|
||||
|
||||
@@ -16,4 +16,24 @@
|
||||
else
|
||||
M.ClearTransform()
|
||||
M.update_transform()
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
// Do not ever just leave this laying about, it will go horribly wrong!
|
||||
/obj/item/squishhammer/dark
|
||||
name = "The Dark Short Stacker"
|
||||
desc = "Wield the power of this weapon with responsibility (God knows you won't)."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "dark_hammer"
|
||||
attack_verb = list("stacked")
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/squishhammer/dark/attack(mob/M as mob, mob/user as mob)
|
||||
..()
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
E.fracture() // Oof, ouch, owie
|
||||
var/turf/T = M.loc
|
||||
if(isturf(T))
|
||||
new /obj/effect/gibspawner/generic(T)
|
||||
|
||||
@@ -108,12 +108,12 @@
|
||||
if(M == user)
|
||||
if(!M.can_eat(loaded))
|
||||
return
|
||||
M.visible_message(span_bold("\The [user]") + "eats some of [loaded] with \the [src].")
|
||||
M.visible_message(span_bold("\The [user]") + " eats some of [loaded] with \the [src].")
|
||||
else
|
||||
user.visible_message(span_warning("\The [user] begins to feed \the [M]!"))
|
||||
if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS)))
|
||||
return
|
||||
M.visible_message(span_bold("\The [user]") + "feeds some of [loaded] to \the [M] with \the [src].")
|
||||
M.visible_message(span_bold("\The [user]") + " feeds some of [loaded] to \the [M] with \the [src].")
|
||||
playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1)
|
||||
loaded = null
|
||||
update_icon()
|
||||
|
||||
@@ -65,8 +65,7 @@
|
||||
var/light_glove_d = rand(2, 4)
|
||||
var/no_glove_d = rand(4, 6)
|
||||
var/list/forbidden_gloves = list(
|
||||
/obj/item/clothing/gloves/sterile,
|
||||
/obj/item/clothing/gloves/knuckledusters
|
||||
/obj/item/clothing/gloves/sterile
|
||||
)
|
||||
|
||||
if(src == user.l_hand)
|
||||
|
||||
@@ -13,4 +13,42 @@
|
||||
sharp = TRUE
|
||||
edge = FALSE
|
||||
attack_verb = list("stabbed", "lunged at", "dextrously struck", "sliced", "lacerated", "impaled", "diced", "charioted")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/melee/hammer
|
||||
name = "claw hammer"
|
||||
desc = "A simple claw hammer for hitting things or people with, and the claw part probably does something too."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "claw_hammer"
|
||||
force = 15
|
||||
throwforce = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("smashed", "swung at", "pummelled", "nailed", "crushed", "bonked", "hammered", "cracked")
|
||||
defend_chance = 0
|
||||
|
||||
/obj/item/melee/hammer/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone, var/attack_modifier)
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(prob(50))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(hit_zone)
|
||||
affecting.fracture()
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/hammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
..()
|
||||
if(A)
|
||||
if(istype(A,/obj/structure/window))
|
||||
var/obj/structure/window/W = A
|
||||
if(prob(50))
|
||||
W.visible_message(span_warning("\The [W] shatters under the force of the impact!"))
|
||||
W.shatter()
|
||||
else if(istype(A,/obj/structure/barricade))
|
||||
var/obj/structure/barricade/B = A
|
||||
if(prob(50))
|
||||
B.visible_message(span_warning("\The [B] is broken apart with ease!"))
|
||||
B.dismantle()
|
||||
else if(istype(A,/obj/structure/grille))
|
||||
if(prob(50))
|
||||
A.visible_message(span_warning("\The [A] is smashed open!"))
|
||||
qdel(A)
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
to_chat(user, span_notice("\the [src] is too full to possibly fit anything else inside of it."))
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/ore))
|
||||
if (istype(W, /obj/item/ore) && !istype(W, /obj/item/ore/slag))
|
||||
var/obj/item/ore/ore = W
|
||||
stored_ore[ore.material]++
|
||||
current_capacity++
|
||||
@@ -178,6 +178,8 @@
|
||||
if(current_pickup >= max_pickup)
|
||||
max_pickup_reached = 1
|
||||
break
|
||||
if(istype(O, /obj/item/ore/slag))
|
||||
continue
|
||||
var/obj/item/ore/ore = O
|
||||
stored_ore[ore.material]++
|
||||
current_capacity++
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
prob(6);/obj/item/material/butterflyblade,
|
||||
prob(6);/obj/item/material/butterflyhandle,
|
||||
prob(2);/obj/item/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(2);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(1);/obj/item/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
prob(1);/obj/item/beartrap,
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
prob(4);/obj/item/storage/pill_bottle/zoom,
|
||||
prob(4);/obj/item/material/butterfly,
|
||||
prob(2);/obj/item/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(2);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(2);/obj/item/reagent_containers/syringe/drugs,
|
||||
prob(1);/obj/item/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
/obj/item/radio,
|
||||
/obj/item/gps/explorer,
|
||||
/obj/item/gun/energy/gun/protector/pilotgun/locked,
|
||||
/obj/item/clothing/gloves/watch/survival,
|
||||
/obj/item/clothing/accessory/watch/survival,
|
||||
/obj/item/clothing/accessory/storage/webbing/pilot1,
|
||||
/obj/item/clothing/accessory/storage/webbing/pilot2,
|
||||
/obj/item/emergency_beacon
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
from the pod is not a crewmember."))
|
||||
R.ckey = M.ckey
|
||||
visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated."))
|
||||
R.namepick()
|
||||
log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
|
||||
..()
|
||||
|
||||
@@ -57,7 +56,6 @@
|
||||
definiton of 'your gravesite' is where your pod is."))
|
||||
R.ckey = M.ckey
|
||||
visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated."))
|
||||
R.namepick()
|
||||
..()
|
||||
|
||||
/obj/structure/ghost_pod/ghost_activated/swarm_drone
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
from the pod is not a crewmember."))
|
||||
R.ckey = M.ckey
|
||||
visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated."))
|
||||
R.namepick()
|
||||
log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
|
||||
used = TRUE
|
||||
return TRUE
|
||||
|
||||
@@ -556,9 +556,9 @@
|
||||
* This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
|
||||
* will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
|
||||
* in the 'closed, full of fluid' state, so you can put a body on it or whatever.
|
||||
*
|
||||
*
|
||||
* As an aghost you can also dragdrop something into it (you have to be ghosted next to it)
|
||||
*
|
||||
*
|
||||
* Possible 'state' options for change_state(state) are:
|
||||
* open: Open, no fluid or anything. At the end the contents are ejected.
|
||||
* closed: Closed, full of liquid
|
||||
@@ -582,7 +582,7 @@
|
||||
/obj/structure/prop/machine/nt_pod/Initialize(mapload)
|
||||
// Our non-map-preview state
|
||||
icon_state = "nt_pod"
|
||||
|
||||
|
||||
// Alpha mask to make sure things don't sneak out
|
||||
var/obj/effect/overlay/vis/mask = new
|
||||
mask.icon = icon
|
||||
@@ -607,7 +607,7 @@
|
||||
// Save old settings
|
||||
contents_vis_flags = AM.vis_flags
|
||||
contents_original_pixel_y = AM.pixel_y
|
||||
|
||||
|
||||
// Arrange
|
||||
AM.add_filter("podmask", 1, alpha_mask_filter(render_source = "nt_podmask[REF(src)]", flags = MASK_INVERSE))
|
||||
AM.pixel_y = 12
|
||||
@@ -616,7 +616,7 @@
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
buckle_mob(M, TRUE, FALSE)
|
||||
|
||||
|
||||
// TRAP THEM
|
||||
change_state("closed")
|
||||
|
||||
@@ -639,7 +639,7 @@
|
||||
return
|
||||
if(!user.client?.holder)
|
||||
return
|
||||
|
||||
|
||||
AM.forceMove(src)
|
||||
|
||||
/obj/structure/prop/machine/nt_pod/change_state(state)
|
||||
@@ -648,17 +648,17 @@
|
||||
if("open")
|
||||
cut_overlay("nt_pod_top_on")
|
||||
cut_overlay("nt_pod_under")
|
||||
|
||||
|
||||
// Fluid drains
|
||||
fluid.icon_state = "nothing"
|
||||
flick("nt_pod_emptying", fluid) // 8ds
|
||||
sleep(8)
|
||||
|
||||
|
||||
// Door opens
|
||||
door.icon_state = "nothing"
|
||||
flick("nt_pod_opening", door) // 9ds
|
||||
sleep(9)
|
||||
|
||||
|
||||
// GET OUT
|
||||
outside.layer = BELOW_MOB_LAYER
|
||||
if(contents.len)
|
||||
@@ -670,7 +670,7 @@
|
||||
cut_overlay("nt_pod_top_on")
|
||||
add_overlay("nt_pod_top_on")
|
||||
add_overlay("nt_pod_under")
|
||||
|
||||
|
||||
// Door closes
|
||||
door.icon_state = "nt_pod_glass"
|
||||
flick("nt_pod_closing", door) // 9ds
|
||||
@@ -683,4 +683,90 @@
|
||||
cut_overlay("nt_pod_panel")
|
||||
add_overlay("nt_pod_panel")
|
||||
if("panel_closed")
|
||||
cut_overlay("nt_pod_panel")
|
||||
cut_overlay("nt_pod_panel")
|
||||
|
||||
// Old Virology stuff
|
||||
|
||||
/obj/structure/prop/machine/centrifuge
|
||||
name = "centrifuge"
|
||||
desc = "Used to separate things with different weight. Spin 'em round, round, right round."
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "centrifuge"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/centrifuge/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "centrifuge_moving"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "centrifuge"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/prop/machine/incubator
|
||||
name = "incubator"
|
||||
desc = "Encourages the growth of diseases. This model comes with a dispenser system and a small radiation generator."
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "incubator"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/incubator/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "incubator_on"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "incubator"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/prop/machine/disease_analyser
|
||||
name = "disease analyser"
|
||||
desc = "Analyzes diseases to find out information about them!"
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "analyser"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/disease_analyser/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "analyser_"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "analyser"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/prop/machine/isolator
|
||||
name = "disease isolator"
|
||||
desc = "Used to isolate and identify diseases, allowing for comparison with a remote database."
|
||||
icon = 'icons/obj/virology_vr.dmi'
|
||||
icon_state = "isolator_in"
|
||||
var/on = FALSE
|
||||
|
||||
/obj/structure/prop/machine/isolator/attack_hand(mob/user as mob)
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
on = TRUE
|
||||
user.visible_message("\The [user] turns on \the [src].")
|
||||
icon_state = "isolator_"
|
||||
else
|
||||
on = FALSE
|
||||
user.visible_message("\The [user] turns off \the [src].")
|
||||
icon_state = "isolator_in"
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
|
||||
var/locked = FALSE //has the door been locked?
|
||||
var/lock_id = null //does the door have an associated key?
|
||||
var/lock_type = "simple" //string matched to "pick_type" on /obj/item/lockpick
|
||||
var/can_pick = TRUE //can it be picked/bypassed?
|
||||
var/lock_difficulty = 1 //multiplier to picking/bypassing time
|
||||
var/keysound = 'sound/items/toolbelt_equip.ogg'
|
||||
|
||||
/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
@@ -292,7 +292,7 @@
|
||||
prob(3);/obj/item/cracker,
|
||||
prob(3);/obj/item/material/butterfly,
|
||||
prob(3);/obj/item/material/butterfly/switchblade,
|
||||
prob(3);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(3);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(3);/obj/item/clothing/gloves/heavy_engineer,
|
||||
prob(3);/obj/item/reagent_containers/syringe/drugs,
|
||||
prob(2);/obj/item/implanter/sizecontrol,
|
||||
|
||||
@@ -43,9 +43,16 @@
|
||||
qdel(source)
|
||||
. = ..()
|
||||
|
||||
/datum/eventkit/modify_robot/ui_assets(mob/user)
|
||||
return list(
|
||||
get_asset_datum(/datum/asset/spritesheet/robot_icons)
|
||||
)
|
||||
|
||||
/datum/eventkit/modify_robot/tgui_data(mob/user)
|
||||
. = list()
|
||||
// Target section for general data
|
||||
var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons)
|
||||
|
||||
if(target)
|
||||
.["target"] = list()
|
||||
.["target"]["name"] = target.name
|
||||
@@ -62,10 +69,8 @@
|
||||
// Target section for options once a module has been selected
|
||||
if(target.module)
|
||||
.["target"]["active"] = target.icon_selected
|
||||
.["target"]["front"] = icon2base64(get_flat_icon(target,dir=SOUTH,no_anim=TRUE))
|
||||
.["target"]["side"] = icon2base64(get_flat_icon(target,dir=WEST,no_anim=TRUE))
|
||||
.["target"]["side_alt"] = icon2base64(get_flat_icon(target,dir=EAST,no_anim=TRUE))
|
||||
.["target"]["back"] = icon2base64(get_flat_icon(target,dir=NORTH,no_anim=TRUE))
|
||||
.["target"]["sprite"] = sanitize_css_class_name("[target.sprite_datum.type]")
|
||||
.["target"]["sprite_size"] = spritesheet.icon_size_id(.["target"]["sprite"] + "S")
|
||||
.["target"]["modules"] = get_target_items(user)
|
||||
var/list/module_options = list()
|
||||
for(var/module in robot_modules)
|
||||
@@ -110,7 +115,7 @@
|
||||
.["access_options"] = access_options
|
||||
// Section for source data for the module we might want to salvage
|
||||
if(source)
|
||||
.["source"] += get_module_source(user)
|
||||
.["source"] += get_module_source(user, spritesheet)
|
||||
var/list/all_robots = list()
|
||||
for(var/mob/living/silicon/robot/R in silicon_mob_list)
|
||||
if(!R.loc)
|
||||
@@ -573,10 +578,11 @@
|
||||
target_items += list(list("name" = item.name, "ref" = "\ref[item]", "icon" = icon2html(item, user, sourceonly=TRUE), "desc" = item.desc))
|
||||
return target_items
|
||||
|
||||
/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user)
|
||||
/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user, var/datum/asset/spritesheet/robot_icons/spritesheet)
|
||||
var/list/source_list = list()
|
||||
source_list["model"] = source.module
|
||||
source_list["front"] = icon2base64(get_flat_icon(source,dir=SOUTH,no_anim=TRUE))
|
||||
source_list["sprite"] = sanitize_css_class_name("[source.sprite_datum.type]")
|
||||
source_list["sprite_size"] = spritesheet.icon_size_id(source_list["sprite"] + "S")
|
||||
var/list/source_items = list()
|
||||
for(var/obj/item in (source.module.modules | source.module.emag))
|
||||
var/exists
|
||||
|
||||
@@ -437,6 +437,45 @@
|
||||
Insert("bottle-[i]", 'icons/obj/chemical.dmi', "bottle-[i]")
|
||||
|
||||
|
||||
// Robot UI sprites
|
||||
/datum/asset/spritesheet/robot_icons
|
||||
name = "robot_icons"
|
||||
|
||||
/datum/asset/spritesheet/robot_icons/create_spritesheets()
|
||||
for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite))
|
||||
if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck
|
||||
continue
|
||||
var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH)
|
||||
var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH)
|
||||
var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST)
|
||||
var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST)
|
||||
if(S.has_eye_sprites)
|
||||
var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH)
|
||||
if(I_NE)
|
||||
I_N.Blend(I_NE, ICON_OVERLAY)
|
||||
if(S.has_eye_sprites)
|
||||
var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH)
|
||||
if(I_SE)
|
||||
I_S.Blend(I_SE, ICON_OVERLAY)
|
||||
if(S.has_eye_sprites)
|
||||
var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST)
|
||||
if(I_WE)
|
||||
I_W.Blend(I_WE, ICON_OVERLAY)
|
||||
if(S.has_eye_sprites)
|
||||
var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST)
|
||||
if(I_EE)
|
||||
I_E.Blend(I_EE, ICON_OVERLAY)
|
||||
var/imgid = sanitize_css_class_name("[S.type]")
|
||||
I_N.Scale(120, 120)
|
||||
I_S.Scale(120, 120)
|
||||
I_W.Scale(120, 120)
|
||||
I_E.Scale(120, 120)
|
||||
Insert(imgid + "N", I_N)
|
||||
Insert(imgid + "S", I_S)
|
||||
Insert(imgid + "W", I_W)
|
||||
Insert(imgid + "E", I_E)
|
||||
|
||||
|
||||
//Cloning pod sprites for UIs
|
||||
/datum/asset/simple/cloning
|
||||
assets = list(
|
||||
|
||||
@@ -360,18 +360,18 @@
|
||||
|
||||
/datum/gear/accessory/wristband_collection
|
||||
display_name = "wristbands (selection)"
|
||||
path = /obj/item/clothing/accessory/wristbandcollection
|
||||
path = /obj/item/clothing/accessory/wristband/collection
|
||||
|
||||
/datum/gear/accessory/wristband_collection/New()
|
||||
..()
|
||||
var/list/wristband_lists = list(
|
||||
"Green, Blue and Yellow" = /obj/item/clothing/accessory/wristbandcollection,
|
||||
"Pink, Black and Red" = /obj/item/clothing/accessory/wristbandcollection/pink,
|
||||
"Red and Orange" = /obj/item/clothing/accessory/wristbandcollection/les,
|
||||
"White, Pink and Blue" = /obj/item/clothing/accessory/wristbandcollection/trans,
|
||||
"Blue, Purple and Pink" = /obj/item/clothing/accessory/wristbandcollection/bi,
|
||||
"Black, White and Grey" = /obj/item/clothing/accessory/wristbandcollection/ace,
|
||||
"Spiked" = /obj/item/clothing/accessory/wristband_spiked
|
||||
"Green, Blue and Yellow" = /obj/item/clothing/accessory/wristband/collection,
|
||||
"Pink, Black and Red" = /obj/item/clothing/accessory/wristband/collection/pink,
|
||||
"Red and Orange" = /obj/item/clothing/accessory/wristband/collection/les,
|
||||
"White, Pink and Blue" = /obj/item/clothing/accessory/wristband/collection/trans,
|
||||
"Blue, Purple and Pink" = /obj/item/clothing/accessory/wristband/collection/bi,
|
||||
"Black, White and Grey" = /obj/item/clothing/accessory/wristband/collection/ace,
|
||||
"Spiked" = /obj/item/clothing/accessory/wristband/spiked
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(wristband_lists)
|
||||
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
|
||||
// C CKEYS
|
||||
/datum/gear/fluff/cappy_watch
|
||||
path = /obj/item/clothing/accessory/watch
|
||||
path = /obj/item/clothing/accessory/watch/custom
|
||||
display_name = "Cappy's Pocket Watch"
|
||||
ckeywhitelist = list("cappycat")
|
||||
character_name = list("Cappy Fuzzlyfeathers")
|
||||
@@ -528,7 +528,7 @@
|
||||
character_name = list("Elizabeth Bayou")
|
||||
|
||||
/datum/gear/fluff/mercury_vopal_ring
|
||||
path = /obj/item/clothing/gloves/ring/material/void_opal/fluff/mercury
|
||||
path = /obj/item/clothing/accessory/ring/material/void_opal/fluff/mercury
|
||||
display_name = "Mercury's Mate Ring"
|
||||
ckeywhitelist = list("haloren")
|
||||
character_name = list("Mercury")
|
||||
@@ -694,6 +694,12 @@
|
||||
ckeywhitelist = list("john.wayne9392")
|
||||
character_name = list("Harmony Pretchl")
|
||||
|
||||
/datum/gear/fluff/vox_dylo_pills
|
||||
path = /obj/item/storage/pill_bottle/dylovene
|
||||
display_name = "Dylovene pill bottle"
|
||||
ckeywhitelist = list("jparker890")
|
||||
character_name = list("Krey-Timinine")
|
||||
|
||||
/datum/gear/fluff/koyo_box
|
||||
path = /obj/item/storage/box/fluff/koyoakimomi
|
||||
display_name = "Koyo's Box"
|
||||
@@ -1239,6 +1245,13 @@
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Parriz Tavakdavi")
|
||||
|
||||
/datum/gear/fluff/dark_tarot
|
||||
path = /obj/item/deck/dark_tarot
|
||||
display_name = "dark rose tarot deck"
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Millie Orlen")
|
||||
|
||||
|
||||
// T CKEYS
|
||||
/datum/gear/fluff/ascian_medal
|
||||
path = /obj/item/clothing/accessory/medal/silver/unity/tabiranth
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
toytype["Big Red Button"] = /obj/item/toy/redbutton
|
||||
toytype["Garden gnome"] = /obj/item/toy/gnome
|
||||
toytype["Toy AI"] = /obj/item/toy/AI
|
||||
toytype["Hand buzzer"] = /obj/item/clothing/gloves/ring/buzzer/toy
|
||||
toytype["Toy nuke"] = /obj/item/toy/nuke
|
||||
toytype["Toy gibber"] = /obj/item/toy/minigibber
|
||||
toytype["Toy xeno"] = /obj/item/toy/toy_xeno
|
||||
|
||||
@@ -74,27 +74,27 @@
|
||||
/datum/gear/gloves/ring
|
||||
display_name = "ring selection"
|
||||
description = "Choose from a number of rings."
|
||||
path = /obj/item/clothing/gloves/ring
|
||||
path = /obj/item/clothing/accessory/ring
|
||||
cost = 1
|
||||
|
||||
/datum/gear/gloves/ring/New()
|
||||
..()
|
||||
var/ringtype = list()
|
||||
ringtype["CTI ring"] = /obj/item/clothing/gloves/ring/cti
|
||||
ringtype["Mariner University ring"] = /obj/item/clothing/gloves/ring/mariner
|
||||
ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement
|
||||
ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet
|
||||
ringtype["masonic ring"] = /obj/item/clothing/gloves/ring/seal/mason
|
||||
ringtype["ring, glass"] = /obj/item/clothing/gloves/ring/material/glass
|
||||
ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood
|
||||
ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic
|
||||
ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron
|
||||
ringtype["ring, bronze"] = /obj/item/clothing/gloves/ring/material/bronze
|
||||
ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel
|
||||
ringtype["ring, copper"] = /obj/item/clothing/gloves/ring/material/copper
|
||||
ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver
|
||||
ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold
|
||||
ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum
|
||||
ringtype["CTI ring"] = /obj/item/clothing/accessory/ring/cti
|
||||
ringtype["Mariner University ring"] = /obj/item/clothing/accessory/ring/mariner
|
||||
ringtype["engagement ring"] = /obj/item/clothing/accessory/ring/engagement
|
||||
ringtype["signet ring"] = /obj/item/clothing/accessory/ring/seal/signet
|
||||
ringtype["masonic ring"] = /obj/item/clothing/accessory/ring/seal/mason
|
||||
ringtype["ring, glass"] = /obj/item/clothing/accessory/ring/material/glass
|
||||
ringtype["ring, wood"] = /obj/item/clothing/accessory/ring/material/wood
|
||||
ringtype["ring, plastic"] = /obj/item/clothing/accessory/ring/material/plastic
|
||||
ringtype["ring, iron"] = /obj/item/clothing/accessory/ring/material/iron
|
||||
ringtype["ring, bronze"] = /obj/item/clothing/accessory/ring/material/bronze
|
||||
ringtype["ring, steel"] = /obj/item/clothing/accessory/ring/material/steel
|
||||
ringtype["ring, copper"] = /obj/item/clothing/accessory/ring/material/copper
|
||||
ringtype["ring, silver"] = /obj/item/clothing/accessory/ring/material/silver
|
||||
ringtype["ring, gold"] = /obj/item/clothing/accessory/ring/material/gold
|
||||
ringtype["ring, platinum"] = /obj/item/clothing/accessory/ring/material/platinum
|
||||
|
||||
gear_tweaks += new/datum/gear_tweak/path(ringtype)
|
||||
|
||||
@@ -105,14 +105,14 @@
|
||||
/datum/gear/gloves/watch
|
||||
display_name = "wristwatch selector"
|
||||
description = "Pick from a range of wristwatches."
|
||||
path = /obj/item/clothing/gloves/watch
|
||||
path = /obj/item/clothing/accessory/watch
|
||||
|
||||
/datum/gear/gloves/watch/New()
|
||||
..()
|
||||
var/list/selector_watches = list(
|
||||
"plain plastic"=/obj/item/clothing/gloves/watch,
|
||||
"silver"=/obj/item/clothing/gloves/watch/silver,
|
||||
"gold"=/obj/item/clothing/gloves/watch/gold,
|
||||
"survival"=/obj/item/clothing/gloves/watch/survival
|
||||
"plain plastic"=/obj/item/clothing/accessory/watch,
|
||||
"silver"=/obj/item/clothing/accessory/watch/silver,
|
||||
"gold"=/obj/item/clothing/accessory/watch/gold,
|
||||
"survival"=/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_watches))
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/datum/gear/gloves/goldring
|
||||
display_name = "wedding ring, gold"
|
||||
path = /obj/item/clothing/gloves/ring/wedding
|
||||
path = /obj/item/clothing/accessory/ring/wedding
|
||||
|
||||
/datum/gear/gloves/silverring
|
||||
display_name = "wedding ring, silver"
|
||||
path = /obj/item/clothing/gloves/ring/wedding/silver
|
||||
path = /obj/item/clothing/accessory/ring/wedding/silver
|
||||
|
||||
/datum/gear/gloves/colored
|
||||
display_name = "gloves, colorable"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
var/list/Lines = list()
|
||||
|
||||
if(holder)
|
||||
if(check_rights(R_ADMIN|R_SERVER|R_MOD,FALSE,src))
|
||||
for(var/client/C in GLOB.clients)
|
||||
var/entry = "<tr><td>[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
|
||||
+11
-151
@@ -12,6 +12,8 @@
|
||||
var/image/inv_overlay = null // Overlay used when attached to clothing.
|
||||
var/image/mob_overlay = null
|
||||
var/overlay_state = null
|
||||
var/punch_force = 0 // added melee damage
|
||||
var/punch_damtype = BRUTE // added melee damage type
|
||||
var/concealed_holster = 0
|
||||
var/mob/living/carbon/human/wearer = null // To check if the wearer changes, so species spritesheets change properly.
|
||||
var/list/on_rolled = list() // Used when jumpsuit sleevels are rolled ("rolled" entry) or it's rolled down ("down"). Set to "none" to hide in those states.
|
||||
@@ -82,6 +84,11 @@
|
||||
src.forceMove(S)
|
||||
has_suit.add_overlay(get_inv_overlay())
|
||||
|
||||
has_suit.force += force
|
||||
if(istype(S,/obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/has_gloves = S
|
||||
has_gloves.punch_force = has_gloves.punch_force + punch_force
|
||||
|
||||
if(user)
|
||||
to_chat(user, span_notice("You attach \the [src] to \the [has_suit]."))
|
||||
add_fingerprint(user)
|
||||
@@ -90,6 +97,10 @@
|
||||
if(!has_suit)
|
||||
return
|
||||
has_suit.cut_overlay(get_inv_overlay())
|
||||
has_suit.force = initial(has_suit.force)
|
||||
if(istype(has_suit,/obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/has_gloves = has_suit
|
||||
has_gloves.punch_force = initial(has_gloves.punch_force)
|
||||
has_suit = null
|
||||
if(user)
|
||||
usr.put_in_hands(src)
|
||||
@@ -376,85 +387,6 @@
|
||||
icon_state = "tesh_neckscarf"
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
|
||||
//bracelets
|
||||
|
||||
/obj/item/clothing/accessory/bracelet
|
||||
name = "bracelet"
|
||||
desc = "A simple silver bracelet with a clasp."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "bracelet"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/friendship
|
||||
name = "friendship bracelet"
|
||||
desc = "A beautiful friendship bracelet in all the colors of the rainbow."
|
||||
icon_state = "friendbracelet"
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/friendship/verb/dedicate_bracelet()
|
||||
set name = "Dedicate Bracelet"
|
||||
set category = "Object"
|
||||
set desc = "Dedicate your friendship bracelet to a special someone."
|
||||
var/mob/M = usr
|
||||
if(!M.mind)
|
||||
return 0
|
||||
|
||||
var/input = sanitizeSafe(input(usr, "Who do you want to dedicate the bracelet to?", ,""), MAX_NAME_LEN)
|
||||
|
||||
if(src && input && !M.stat && in_range(M,src))
|
||||
desc = "A beautiful friendship bracelet in all the colors of the rainbow. It's dedicated to [input]."
|
||||
to_chat(M, "You dedicate the bracelet to [input], remembering the times you've had together.")
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material
|
||||
icon_state = "materialbracelet"
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/New(var/newloc, var/new_material)
|
||||
..(newloc)
|
||||
if(!new_material)
|
||||
new_material = MAT_STEEL
|
||||
material = get_material_by_name(new_material)
|
||||
if(!istype(material))
|
||||
qdel(src)
|
||||
return
|
||||
name = "[material.display_name] bracelet"
|
||||
desc = "A bracelet made from [material.display_name]."
|
||||
color = material.icon_colour
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/get_material()
|
||||
return material
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/wood/New(var/newloc)
|
||||
..(newloc, "wood")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/plastic/New(var/newloc)
|
||||
..(newloc, "plastic")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/iron/New(var/newloc)
|
||||
..(newloc, "iron")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/steel/New(var/newloc)
|
||||
..(newloc, "steel")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/silver/New(var/newloc)
|
||||
..(newloc, "silver")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/gold/New(var/newloc)
|
||||
..(newloc, "gold")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/platinum/New(var/newloc)
|
||||
..(newloc, "platinum")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/phoron/New(var/newloc)
|
||||
..(newloc, "phoron")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/glass/New(var/newloc)
|
||||
..(newloc, "glass")
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/halfcape
|
||||
name = "half cape"
|
||||
desc = "A tasteful half-cape, suitible for European nobles and retro anime protagonists."
|
||||
@@ -473,78 +405,6 @@
|
||||
icon_state = "sash"
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/wristband
|
||||
name = "wristband"
|
||||
desc = "A simple plastic wristband."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristbandcollection
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_collection"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristbandcollection/pink
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_collection2"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristbandcollection/les
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_collection3"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristbandcollection/trans
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_collection4"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristbandcollection/bi
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_collection5"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristbandcollection/ace
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_collection6"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/wristband_spiked
|
||||
name = "wristband (spiked)"
|
||||
desc = "A black wristband with short spikes around it."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband_spiked"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
//Gaiter scarves
|
||||
/obj/item/clothing/accessory/gaiter
|
||||
name = "red neck gaiter"
|
||||
+1
-13
@@ -5,7 +5,7 @@
|
||||
/obj/item/clothing/accessory/choker //A colorable, tagless choker
|
||||
name = "plain choker"
|
||||
slot_flags = SLOT_TIE | SLOT_OCLOTHING
|
||||
desc = "A simple, plain choker. Or maybe it's a collar? Use in-hand to customize it."
|
||||
desc = "A simple, plain choker. Or maybe it's a collar?"
|
||||
icon = 'icons/inventory/accessory/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/accessory/mob_vr.dmi'
|
||||
icon_state = "choker_cst"
|
||||
@@ -44,18 +44,6 @@
|
||||
/obj/item/clothing/accessory/choker/dropped()
|
||||
icon_override = icon_previous_override
|
||||
|
||||
/obj/item/clothing/accessory/choker/attack_self(mob/user as mob)
|
||||
if(!customized)
|
||||
var/design = tgui_input_list(user,"Descriptor?","Pick descriptor","Descriptor", list("plain","simple","ornate","elegant","opulent"))
|
||||
var/material = tgui_input_list(user,"Material?","Pick material","Material", list("leather","velvet","lace","fabric","latex","plastic","metal","chain","silver","gold","platinum","steel","bead","ruby","sapphire","emerald","diamond"))
|
||||
var/type = tgui_input_list(user,"Type?","Pick type","Type", list("choker","collar","necklace"))
|
||||
name = "[design] [material] [type]"
|
||||
desc = "A [type], made of [material]. It's rather [design]."
|
||||
customized = 1
|
||||
to_chat(usr,span_notice("[src] has now been customized."))
|
||||
else
|
||||
to_chat(usr,span_notice("[src] has already been customized!"))
|
||||
|
||||
/obj/item/clothing/accessory/collar
|
||||
slot_flags = SLOT_TIE | SLOT_OCLOTHING
|
||||
icon = 'icons/inventory/accessory/item_vr.dmi'
|
||||
@@ -0,0 +1,141 @@
|
||||
/obj/item/clothing/accessory/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
desc = "A pair of brass knuckles. Generally used to enhance the user's punches."
|
||||
icon_state = "knuckledusters"
|
||||
slot = ACCESSORY_SLOT_RING
|
||||
slot_flags = SLOT_GLOVES
|
||||
matter = list(MAT_STEEL = 500)
|
||||
attack_verb = list("punched", "beaten", "struck")
|
||||
siemens_coefficient = 1
|
||||
force = 10 //base punch strength is 5
|
||||
punch_force = 5 //added to base punch strength when added as a glove accessory
|
||||
icon = 'icons/inventory/hands/item.dmi'
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
|
||||
)
|
||||
drop_sound = 'sound/items/drop/metalboots.ogg'
|
||||
pickup_sound = 'sound/items/pickup/toolbox.ogg'
|
||||
|
||||
//bracelets
|
||||
|
||||
/obj/item/clothing/accessory/bracelet
|
||||
name = "bracelet"
|
||||
desc = "A simple silver bracelet with a clasp."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "bracelet"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_GLOVES
|
||||
slot = ACCESSORY_SLOT_WRIST
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/friendship
|
||||
name = "friendship bracelet"
|
||||
desc = "A beautiful friendship bracelet in all the colors of the rainbow."
|
||||
icon_state = "friendbracelet"
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/friendship/verb/dedicate_bracelet()
|
||||
set name = "Dedicate Bracelet"
|
||||
set category = "Object"
|
||||
set desc = "Dedicate your friendship bracelet to a special someone."
|
||||
var/mob/M = usr
|
||||
if(!M.mind)
|
||||
return 0
|
||||
|
||||
var/input = sanitizeSafe(input(usr, "Who do you want to dedicate the bracelet to?", ,""), MAX_NAME_LEN)
|
||||
|
||||
if(src && input && !M.stat && in_range(M,src))
|
||||
desc = "A beautiful friendship bracelet in all the colors of the rainbow. It's dedicated to [input]."
|
||||
to_chat(M, "You dedicate the bracelet to [input], remembering the times you've had together.")
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material
|
||||
icon_state = "materialbracelet"
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/New(var/newloc, var/new_material)
|
||||
..(newloc)
|
||||
if(!new_material)
|
||||
new_material = MAT_STEEL
|
||||
material = get_material_by_name(new_material)
|
||||
if(!istype(material))
|
||||
qdel(src)
|
||||
return
|
||||
name = "[material.display_name] bracelet"
|
||||
desc = "A bracelet made from [material.display_name]."
|
||||
color = material.icon_colour
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/get_material()
|
||||
return material
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/wood/New(var/newloc)
|
||||
..(newloc, "wood")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/plastic/New(var/newloc)
|
||||
..(newloc, "plastic")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/iron/New(var/newloc)
|
||||
..(newloc, "iron")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/steel/New(var/newloc)
|
||||
..(newloc, "steel")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/silver/New(var/newloc)
|
||||
..(newloc, "silver")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/gold/New(var/newloc)
|
||||
..(newloc, "gold")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/platinum/New(var/newloc)
|
||||
..(newloc, "platinum")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/phoron/New(var/newloc)
|
||||
..(newloc, "phoron")
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/material/glass/New(var/newloc)
|
||||
..(newloc, "glass")
|
||||
|
||||
//wristbands
|
||||
|
||||
/obj/item/clothing/accessory/wristband
|
||||
name = "wristband"
|
||||
desc = "A simple plastic wristband."
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "wristband"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_GLOVES
|
||||
slot = ACCESSORY_SLOT_WRIST
|
||||
|
||||
/obj/item/clothing/accessory/wristband/spiked
|
||||
name = "wristband (spiked)"
|
||||
desc = "A black wristband with short spikes around it."
|
||||
icon_state = "wristband_spiked"
|
||||
|
||||
/obj/item/clothing/accessory/wristband/collection
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon_state = "wristband_collection"
|
||||
|
||||
/obj/item/clothing/accessory/wristband/collection/pink
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon_state = "wristband_collection2"
|
||||
|
||||
/obj/item/clothing/accessory/wristband/collection/les
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon_state = "wristband_collection3"
|
||||
|
||||
/obj/item/clothing/accessory/wristband/collection/trans
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon_state = "wristband_collection4"
|
||||
|
||||
/obj/item/clothing/accessory/wristband/collection/bi
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon_state = "wristband_collection5"
|
||||
|
||||
/obj/item/clothing/accessory/wristband/collection/ace
|
||||
name = "wristband collection"
|
||||
desc = "A mix of colourable plastic wristbands."
|
||||
icon_state = "wristband_collection6"
|
||||
@@ -0,0 +1,204 @@
|
||||
//Generic Ring
|
||||
|
||||
/obj/item/clothing/accessory/ring
|
||||
name = "generic ring"
|
||||
desc = "Torus shaped finger decoration."
|
||||
icon_state = "material"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
slot = ACCESSORY_SLOT_RING
|
||||
slot_flags = SLOT_GLOVES
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
|
||||
)
|
||||
gender = PLURAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
icon = 'icons/inventory/hands/item.dmi'
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
force = 7 //base punch strength is 5
|
||||
punch_force = 2 //added to base punch strength when added as a glove accessory
|
||||
siemens_coefficient = 1
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Standard Rings
|
||||
/obj/item/clothing/accessory/ring/engagement
|
||||
name = "engagement ring"
|
||||
desc = "An engagement ring. It certainly looks expensive."
|
||||
icon_state = "diamond"
|
||||
|
||||
/obj/item/clothing/accessory/ring/engagement/attack_self(mob/user)
|
||||
user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src]."))
|
||||
|
||||
/obj/item/clothing/accessory/ring/cti
|
||||
name = "CTI ring"
|
||||
desc = "A ring commemorating graduation from CTI."
|
||||
icon_state = "cti-grad"
|
||||
|
||||
/obj/item/clothing/accessory/ring/mariner
|
||||
name = "Mariner University ring"
|
||||
desc = "A ring commemorating graduation from Mariner University."
|
||||
icon_state = "mariner-grad"
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Reagent Rings
|
||||
|
||||
/obj/item/clothing/accessory/ring/reagent
|
||||
flags = OPENCONTAINER
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
|
||||
|
||||
/obj/item/clothing/accessory/ring/reagent/Initialize()
|
||||
. = ..()
|
||||
create_reagents(15)
|
||||
|
||||
/obj/item/clothing/accessory/ring/reagent/equipped(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
if(istype(H) && H.gloves==src)
|
||||
|
||||
if(reagents.total_volume)
|
||||
to_chat(H, span_danger("You feel a prick as you slip on \the [src]."))
|
||||
if(H.reagents)
|
||||
var/contained = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD)
|
||||
add_attack_logs(usr, H, "Injected with [name] containing [contained] transferred [trans] units")
|
||||
return
|
||||
|
||||
//Sleepy Ring
|
||||
/obj/item/clothing/accessory/ring/reagent/sleepy
|
||||
name = "silver ring"
|
||||
desc = "A ring made from what appears to be silver."
|
||||
icon_state = "material"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
||||
|
||||
/obj/item/clothing/accessory/ring/reagent/sleepy/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("chloralhydrate", 15) // Less than a sleepy-pen, but still enough to knock someone out
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Seals and Signet Rings
|
||||
|
||||
/obj/item/clothing/accessory/ring/seal
|
||||
var/stamptext = null
|
||||
|
||||
/obj/item/clothing/accessory/ring/seal/secgen
|
||||
name = "Secretary-General's official seal"
|
||||
desc = "The official seal of the Secretary-General of the Sol Central Government, featured prominently on a silver ring."
|
||||
icon_state = "seal-secgen"
|
||||
|
||||
/obj/item/clothing/accessory/ring/seal/mason
|
||||
name = "\improper Masonic ring"
|
||||
desc = "The Square and Compasses feature prominently on this Masonic ring."
|
||||
icon_state = "seal-masonic"
|
||||
|
||||
/obj/item/clothing/accessory/ring/seal/signet
|
||||
name = "signet ring"
|
||||
desc = "A signet ring, for when you're too sophisticated to sign letters."
|
||||
icon_state = "seal-signet"
|
||||
var/nameset = FALSE
|
||||
|
||||
/obj/item/clothing/accessory/ring/seal/signet/attack_self(mob/user)
|
||||
if(nameset)
|
||||
to_chat(user, span_notice("The [src] has already been claimed!"))
|
||||
return
|
||||
|
||||
to_chat(user, span_notice("You claim the [src] as your own!"))
|
||||
change_name(user)
|
||||
nameset = TRUE
|
||||
|
||||
/obj/item/clothing/accessory/ring/seal/signet/proc/change_name(var/signet_name = "Unknown")
|
||||
name = "[signet_name]'s signet ring"
|
||||
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
|
||||
|
||||
/obj/item/clothing/accessory/ring/wedding
|
||||
name = "golden wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a golden glimmer to it."
|
||||
icon = 'icons/inventory/hands/item_vr.dmi'
|
||||
icon_state = "wedring_g"
|
||||
item_state = "wedring_g"
|
||||
var/partnername = ""
|
||||
|
||||
/obj/item/clothing/accessory/ring/wedding/attack_self(mob/user)
|
||||
partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your spouse", "Bae") as null|text),1,MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [partnername]"
|
||||
|
||||
/obj/item/clothing/accessory/ring/wedding/silver
|
||||
name = "silver wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a silver glimmer to it."
|
||||
icon_state = "wedring_s"
|
||||
item_state = "wedring_s"
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Material Rings
|
||||
/obj/item/clothing/accessory/ring/material
|
||||
icon = 'icons/inventory/hands/item.dmi'
|
||||
icon_state = "material"
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/New(var/newloc, var/new_material)
|
||||
..(newloc)
|
||||
if(!new_material)
|
||||
new_material = MAT_STEEL
|
||||
material = get_material_by_name(new_material)
|
||||
if(!istype(material))
|
||||
qdel(src)
|
||||
return
|
||||
name = "[material.display_name] ring"
|
||||
desc = "A ring made from [material.display_name]."
|
||||
color = material.icon_colour
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/get_material()
|
||||
return material
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/wood/New(var/newloc)
|
||||
..(newloc, MAT_WOOD)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/plastic/New(var/newloc)
|
||||
..(newloc, MAT_PLASTIC)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/iron/New(var/newloc)
|
||||
..(newloc, MAT_IRON)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/glass/New(var/newloc)
|
||||
..(newloc, MAT_GLASS)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/steel/New(var/newloc)
|
||||
..(newloc, MAT_STEEL)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/silver/New(var/newloc)
|
||||
..(newloc, MAT_SILVER)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/gold/New(var/newloc)
|
||||
..(newloc, MAT_GOLD)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/platinum/New(var/newloc)
|
||||
..(newloc, MAT_PLATINUM)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/phoron/New(var/newloc)
|
||||
..(newloc, MAT_PHORON)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/titanium/New(var/newloc)
|
||||
..(newloc, MAT_TITANIUM)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/copper/New(var/newloc)
|
||||
..(newloc, MAT_COPPER)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/bronze/New(var/newloc)
|
||||
..(newloc, MAT_BRONZE)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/uranium/New(var/newloc)
|
||||
..(newloc, MAT_URANIUM)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/osmium/New(var/newloc)
|
||||
..(newloc, MAT_OSMIUM)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/lead/New(var/newloc)
|
||||
..(newloc, MAT_LEAD)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/diamond/New(var/newloc)
|
||||
..(newloc, MAT_DIAMOND)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/tin/New(var/newloc)
|
||||
..(newloc, MAT_TIN)
|
||||
|
||||
/obj/item/clothing/accessory/ring/material/void_opal/New(var/newloc)
|
||||
..(newloc, MAT_VOPAL)
|
||||
@@ -0,0 +1,72 @@
|
||||
/obj/item/clothing/accessory/watch
|
||||
name = "wristwatch"
|
||||
desc = "A cheap plastic quartz-based wristwatch. Painfully archaic by modern standards, but there's something charming about it all the same."
|
||||
icon_state = "wristwatch_basic"
|
||||
siemens_coefficient = 1
|
||||
gender = "neuter"
|
||||
slot = ACCESSORY_SLOT_WRIST
|
||||
slot_flags = SLOT_GLOVES
|
||||
icon = 'icons/inventory/hands/item.dmi'
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
|
||||
)
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/inventory/hands/mob_teshari.dmi',
|
||||
SPECIES_VOX = 'icons/inventory/hands/mob_vox.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/accessory/watch/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
. += span_notice("The current station time is [stationtime2text()].")
|
||||
|
||||
/obj/item/clothing/accessory/watch/silver
|
||||
name = "silver wristwatch"
|
||||
desc = "A humble silver (or maybe chrome) plated wristwatch. It's quite archaic, but nonetheless classy in its own way."
|
||||
icon_state = "wristwatch_silver"
|
||||
|
||||
/obj/item/clothing/accessory/watch/gold
|
||||
name = "gold wristwatch"
|
||||
desc = "A very fancy gold-plated wristwatch. For when you want to casually show off just how wealthy you are. It even tells the time!"
|
||||
icon_state = "wristwatch_gold"
|
||||
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
name = "survival watch"
|
||||
desc = "An overengineered wristwatch that purports to be both space and water proof, and includes a compass, micro GPS beacon, and temperature and pressure sensors. The beacon is off by default, and can only transmit its location: it cannot scan for other signals."
|
||||
description_fluff = "Hold ALT whilst left-clicking on the survival watch to toggle the status of its micro-beacon."
|
||||
icon_state = "wristwatch_survival"
|
||||
|
||||
var/obj/item/gps/gps = null
|
||||
|
||||
/obj/item/clothing/accessory/watch/survival/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
. += span_notice("You are currently facing [dir2text(user.dir)]. The micro beacon is [gps.tracking ? "on" : "off"].")
|
||||
var/TB = user.loc
|
||||
if(istype(TB, /turf/)) //no point returning light level if we're not on a turf (might be *in* someone!)
|
||||
var/turf/TL = TB
|
||||
var/light_level = TL.get_lumcount()
|
||||
if(light_level)
|
||||
. += span_notice("Light Level: [TL.get_lumcount()]")
|
||||
else
|
||||
. += span_notice("It's too dark to see the light level!")
|
||||
if(istype(TB, /turf/simulated)) //no point returning atmospheric data from unsimulated tiles (they don't track pressure anyway, only temperature)
|
||||
var/turf/simulated/T = TB
|
||||
var/datum/gas_mixture/env = T.return_air()
|
||||
. += span_notice("Pressure: [env.return_pressure()]kPa / Temperature: [env.temperature]K ")
|
||||
|
||||
/obj/item/clothing/accessory/watch/survival/New()
|
||||
gps = new/obj/item/gps/watch(src)
|
||||
|
||||
/obj/item/gps/watch
|
||||
gps_tag = "SRV-WTCH"
|
||||
|
||||
/obj/item/clothing/accessory/watch/survival/AltClick(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
gps.tracking = !gps.tracking
|
||||
to_chat(user,span_notice("You turn the micro beacon [gps.tracking ? "on" : "off"]."))
|
||||
@@ -326,6 +326,13 @@
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
pickup_sound = 'sound/items/pickup/gloves.ogg'
|
||||
|
||||
valid_accessory_slots = (\
|
||||
ACCESSORY_SLOT_RING\
|
||||
|ACCESSORY_SLOT_WRIST)
|
||||
restricted_accessory_slots = (\
|
||||
ACCESSORY_SLOT_RING\
|
||||
|ACCESSORY_SLOT_WRIST)
|
||||
|
||||
/obj/item/clothing/proc/set_clothing_index()
|
||||
return
|
||||
|
||||
@@ -422,8 +429,6 @@
|
||||
if(special_attack_type && ispath(special_attack_type))
|
||||
special_attack = new special_attack_type
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//Rings
|
||||
|
||||
|
||||
@@ -88,70 +88,3 @@
|
||||
if(proximity && istype(usr, /mob/living/carbon/human) && do_after(usr, 1 SECOND, A))
|
||||
return pickpocket(usr, A, proximity)
|
||||
return 0
|
||||
|
||||
// Buzzer Ring - Traitor, Merc.
|
||||
/obj/item/clothing/gloves/ring/buzzer
|
||||
name = "ring"
|
||||
desc = "A plain metal band."
|
||||
description_antag = "This morphium-alloy ring continually generates an electric field, capable of electrocuting a target while not injuring the wearer.\
|
||||
The device is also capable of 'frankenstein'-ing a corpse, long after normal technology would be able to save them. The body will still be tied to the\
|
||||
normal damage limits for survival, however, so care must be taken."
|
||||
icon_state = "material"
|
||||
var/battery_type = /obj/item/cell/device/weapon/recharge
|
||||
var/obj/item/cell/battery = null
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/get_cell()
|
||||
return battery
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/Initialize()
|
||||
. = ..()
|
||||
if(!battery)
|
||||
battery = new battery_type(src)
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/Touch(var/atom/A, var/proximity)
|
||||
if(proximity && istype(usr, /mob/living/carbon/human))
|
||||
return zap(usr, A, proximity)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/proc/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
|
||||
. = FALSE
|
||||
if(user.a_intent == I_HURT && battery.percent() >= 50)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
if(ishuman(L) && battery.percent() >= 90) // Silent text-wise, for maximum potential for gimmicks.
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
if(H.stat == DEAD)
|
||||
. = TRUE
|
||||
|
||||
do_defib(H)
|
||||
|
||||
to_chat(L, span_warning("You feel a powerful shock!"))
|
||||
if(!.)
|
||||
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
|
||||
L.electrocute_act(battery.percent() * 0.25, src)
|
||||
battery.emp_act(2)
|
||||
return .
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/proc/do_defib(var/mob/living/carbon/human/H = null)
|
||||
if(!istype(H))
|
||||
return 0
|
||||
|
||||
dead_mob_list.Remove(H)
|
||||
if((H in living_mob_list) || (H in dead_mob_list))
|
||||
WARNING("Mob [H] was ring-defibbed but already in the living or dead list still!")
|
||||
living_mob_list += H
|
||||
|
||||
H.timeofdeath = 0
|
||||
H.set_stat(UNCONSCIOUS)
|
||||
H.failed_last_breath = 0
|
||||
H.reload_fullscreen()
|
||||
|
||||
H.emote("gasp")
|
||||
H.Weaken(rand(10,25))
|
||||
H.updatehealth()
|
||||
|
||||
battery.emp_act(1)
|
||||
|
||||
@@ -121,21 +121,6 @@
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/gloves/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
desc = "A pair of brass knuckles. Generally used to enhance the user's punches."
|
||||
icon_state = "knuckledusters"
|
||||
matter = list(MAT_STEEL = 500)
|
||||
attack_verb = list("punched", "beaten", "struck")
|
||||
flags = THICKMATERIAL // Stops rings from increasing hit strength
|
||||
siemens_coefficient = 1
|
||||
fingerprint_chance = 100
|
||||
overgloves = 1
|
||||
force = 5
|
||||
punch_force = 5
|
||||
drop_sound = 'sound/items/drop/metalboots.ogg'
|
||||
pickup_sound = 'sound/items/pickup/toolbox.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/ranger
|
||||
var/glovecolor = "white"
|
||||
name = "ranger gloves"
|
||||
@@ -172,65 +157,3 @@
|
||||
name = "water wings"
|
||||
desc = "Swim aids designed to help a wearer float in water and learn to swim."
|
||||
icon_state = "waterwings"
|
||||
|
||||
/obj/item/clothing/gloves/watch
|
||||
name = "wristwatch"
|
||||
desc = "A cheap plastic quartz-based wristwatch. Painfully archaic by modern standards, but there's something charming about it all the same."
|
||||
icon_state = "wristwatch_basic"
|
||||
siemens_coefficient = 1
|
||||
gender = "neuter"
|
||||
|
||||
/obj/item/clothing/gloves/watch/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
. += span_notice("The current station time is [stationtime2text()].")
|
||||
|
||||
/obj/item/clothing/gloves/watch/silver
|
||||
name = "silver wristwatch"
|
||||
desc = "A humble silver (or maybe chrome) plated wristwatch. It's quite archaic, but nonetheless classy in its own way."
|
||||
icon_state = "wristwatch_silver"
|
||||
|
||||
/obj/item/clothing/gloves/watch/gold
|
||||
name = "gold wristwatch"
|
||||
desc = "A very fancy gold-plated wristwatch. For when you want to casually show off just how wealthy you are. It even tells the time!"
|
||||
icon_state = "wristwatch_gold"
|
||||
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
name = "survival watch"
|
||||
desc = "An overengineered wristwatch that purports to be both space and water proof, and includes a compass, micro GPS beacon, and temperature and pressure sensors. The beacon is off by default, and can only transmit its location: it cannot scan for other signals."
|
||||
description_fluff = "Hold ALT whilst left-clicking on the survival watch to toggle the status of its micro-beacon."
|
||||
icon_state = "wristwatch_survival"
|
||||
|
||||
var/obj/item/gps/gps = null
|
||||
|
||||
/obj/item/clothing/gloves/watch/survival/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user) && src.loc == user)
|
||||
. += span_notice("You are currently facing [dir2text(user.dir)]. The micro beacon is [gps.tracking ? "on" : "off"].")
|
||||
var/TB = src.loc.loc
|
||||
if(istype(TB, /turf/)) //no point returning light level if we're not on a turf (might be *in* someone!)
|
||||
var/turf/TL = TB
|
||||
var/light_level = TL.get_lumcount()
|
||||
if(light_level)
|
||||
. += span_notice("Light Level: [TL.get_lumcount()]")
|
||||
else
|
||||
. += span_notice("It's too dark to see the light level!")
|
||||
if(istype(TB, /turf/simulated)) //no point returning atmospheric data from unsimulated tiles (they don't track pressure anyway, only temperature)
|
||||
var/turf/simulated/T = TB
|
||||
var/datum/gas_mixture/env = T.return_air()
|
||||
. += span_notice("Pressure: [env.return_pressure()]kPa / Temperature: [env.temperature]K ")
|
||||
|
||||
/obj/item/clothing/gloves/watch/survival/New()
|
||||
gps = new/obj/item/gps/watch(src)
|
||||
|
||||
/obj/item/gps/watch
|
||||
gps_tag = "SRV-WTCH"
|
||||
|
||||
/obj/item/clothing/gloves/watch/survival/AltClick(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
gps.tracking = !gps.tracking
|
||||
to_chat(user,span_notice("You turn the micro beacon [gps.tracking ? "on" : "off"]."))
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
/////////////////////////////////////////
|
||||
//Material Rings
|
||||
/obj/item/clothing/gloves/ring/material
|
||||
icon = 'icons/inventory/hands/item.dmi'
|
||||
icon_state = "material"
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/New(var/newloc, var/new_material)
|
||||
..(newloc)
|
||||
if(!new_material)
|
||||
new_material = MAT_STEEL
|
||||
material = get_material_by_name(new_material)
|
||||
if(!istype(material))
|
||||
qdel(src)
|
||||
return
|
||||
name = "[material.display_name] ring"
|
||||
desc = "A ring made from [material.display_name]."
|
||||
color = material.icon_colour
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/get_material()
|
||||
return material
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/wood/New(var/newloc)
|
||||
..(newloc, MAT_WOOD)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/plastic/New(var/newloc)
|
||||
..(newloc, MAT_PLASTIC)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/iron/New(var/newloc)
|
||||
..(newloc, MAT_IRON)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/glass/New(var/newloc)
|
||||
..(newloc, MAT_GLASS)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/steel/New(var/newloc)
|
||||
..(newloc, MAT_STEEL)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/silver/New(var/newloc)
|
||||
..(newloc, MAT_SILVER)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/gold/New(var/newloc)
|
||||
..(newloc, MAT_GOLD)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc)
|
||||
..(newloc, MAT_PLATINUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc)
|
||||
..(newloc, MAT_PHORON)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/titanium/New(var/newloc)
|
||||
..(newloc, MAT_TITANIUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/copper/New(var/newloc)
|
||||
..(newloc, MAT_COPPER)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/bronze/New(var/newloc)
|
||||
..(newloc, MAT_BRONZE)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/uranium/New(var/newloc)
|
||||
..(newloc, MAT_URANIUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/osmium/New(var/newloc)
|
||||
..(newloc, MAT_OSMIUM)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/lead/New(var/newloc)
|
||||
..(newloc, MAT_LEAD)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/diamond/New(var/newloc)
|
||||
..(newloc, MAT_DIAMOND)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/tin/New(var/newloc)
|
||||
..(newloc, MAT_TIN)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/void_opal/New(var/newloc)
|
||||
..(newloc, MAT_VOPAL)
|
||||
@@ -1,96 +0,0 @@
|
||||
//Generic Ring
|
||||
|
||||
/obj/item/clothing/gloves/ring
|
||||
name = "generic ring"
|
||||
desc = "Torus shaped finger decoration."
|
||||
icon_state = "material"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Standard Rings
|
||||
/obj/item/clothing/gloves/ring/engagement
|
||||
name = "engagement ring"
|
||||
desc = "An engagement ring. It certainly looks expensive."
|
||||
icon_state = "diamond"
|
||||
|
||||
/obj/item/clothing/gloves/ring/engagement/attack_self(mob/user)
|
||||
user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src]."))
|
||||
|
||||
/obj/item/clothing/gloves/ring/cti
|
||||
name = "CTI ring"
|
||||
desc = "A ring commemorating graduation from CTI."
|
||||
icon_state = "cti-grad"
|
||||
|
||||
/obj/item/clothing/gloves/ring/mariner
|
||||
name = "Mariner University ring"
|
||||
desc = "A ring commemorating graduation from Mariner University."
|
||||
icon_state = "mariner-grad"
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Reagent Rings
|
||||
|
||||
/obj/item/clothing/gloves/ring/reagent
|
||||
flags = OPENCONTAINER
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
|
||||
|
||||
/obj/item/clothing/gloves/ring/reagent/New()
|
||||
..()
|
||||
create_reagents(15)
|
||||
|
||||
/obj/item/clothing/gloves/ring/reagent/equipped(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
if(istype(H) && H.gloves==src)
|
||||
|
||||
if(reagents.total_volume)
|
||||
to_chat(H, span_danger("You feel a prick as you slip on \the [src]."))
|
||||
if(H.reagents)
|
||||
var/contained = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD)
|
||||
add_attack_logs(usr, H, "Injected with [name] containing [contained] transferred [trans] units")
|
||||
return
|
||||
|
||||
//Sleepy Ring
|
||||
/obj/item/clothing/gloves/ring/reagent/sleepy
|
||||
name = "silver ring"
|
||||
desc = "A ring made from what appears to be silver."
|
||||
icon_state = "material"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
||||
|
||||
/obj/item/clothing/gloves/ring/reagent/sleepy/New()
|
||||
..()
|
||||
reagents.add_reagent("chloralhydrate", 15) // Less than a sleepy-pen, but still enough to knock someone out
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Seals and Signet Rings
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal
|
||||
var/stamptext = null
|
||||
/obj/item/clothing/gloves/ring/seal/secgen
|
||||
name = "Secretary-General's official seal"
|
||||
desc = "The official seal of the Secretary-General of the Sol Central Government, featured prominently on a silver ring."
|
||||
icon_state = "seal-secgen"
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/mason
|
||||
name = "\improper Masonic ring"
|
||||
desc = "The Square and Compasses feature prominently on this Masonic ring."
|
||||
icon_state = "seal-masonic"
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/signet
|
||||
name = "signet ring"
|
||||
desc = "A signet ring, for when you're too sophisticated to sign letters."
|
||||
icon_state = "seal-signet"
|
||||
var/nameset = FALSE
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/signet/attack_self(mob/user)
|
||||
if(nameset)
|
||||
to_chat(user, span_notice("The [src] has already been claimed!"))
|
||||
return
|
||||
|
||||
to_chat(user, span_notice("You claim the [src] as your own!"))
|
||||
change_name(user)
|
||||
nameset = TRUE
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/signet/proc/change_name(var/signet_name = "Unknown")
|
||||
name = "[signet_name]'s signet ring"
|
||||
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
|
||||
@@ -1,17 +0,0 @@
|
||||
/obj/item/clothing/gloves/ring/wedding
|
||||
name = "golden wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a golden glimmer to it."
|
||||
icon = 'icons/inventory/hands/item_vr.dmi'
|
||||
icon_state = "wedring_g"
|
||||
item_state = "wedring_g"
|
||||
var/partnername = ""
|
||||
|
||||
/obj/item/clothing/gloves/ring/wedding/attack_self(mob/user)
|
||||
partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your spouse", "Bae") as null|text),1,MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [partnername]"
|
||||
|
||||
/obj/item/clothing/gloves/ring/wedding/silver
|
||||
name = "silver wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a silver glimmer to it."
|
||||
icon_state = "wedring_s"
|
||||
item_state = "wedring_s"
|
||||
@@ -415,7 +415,12 @@
|
||||
/obj/item/stack/medical/advanced/ointment = 6,
|
||||
/obj/item/stack/medical/splint = 4,
|
||||
/obj/item/storage/pill_bottle/carbon = 2,
|
||||
/obj/item/clothing/mask/chewable/candy/lolli = 15)
|
||||
/obj/item/clothing/mask/chewable/candy/lolli = 15,
|
||||
/obj/item/storage/box/khcrystal = 4,
|
||||
/obj/item/backup_implanter = 3,
|
||||
/obj/item/clothing/glasses/omnihud/med = 4,
|
||||
/obj/item/glasses_kit = 1,
|
||||
/obj/item/storage/quickdraw/syringe_case = 4)
|
||||
contraband = list(/obj/item/reagent_containers/pill/tox = 3,
|
||||
/obj/item/reagent_containers/pill/stox = 4,
|
||||
/obj/item/reagent_containers/pill/antitox = 6)
|
||||
@@ -448,7 +453,8 @@
|
||||
products = list(/obj/item/stack/medical/bruise_pack = 2,
|
||||
/obj/item/stack/medical/ointment = 2,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector = 4,
|
||||
/obj/item/healthanalyzer = 1)
|
||||
/obj/item/healthanalyzer = 1,
|
||||
/obj/item/bodybag/cryobag = 2)
|
||||
contraband = list(/obj/item/reagent_containers/syringe/antitoxin = 4,
|
||||
/obj/item/reagent_containers/syringe/antiviral = 4,
|
||||
/obj/item/reagent_containers/pill/tox = 1)
|
||||
@@ -467,14 +473,19 @@
|
||||
/obj/item/reagent_containers/syringe/antitoxin = 3,
|
||||
/obj/item/stack/medical/bruise_pack = 3,
|
||||
/obj/item/stack/medical/ointment =3,
|
||||
/obj/item/healthanalyzer = 3)
|
||||
/obj/item/healthanalyzer = 3,
|
||||
/obj/item/bodybag/cryobag = 3)
|
||||
contraband = list(/obj/item/reagent_containers/pill/tox = 3)
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
can_rotate = 0
|
||||
|
||||
/obj/machinery/vending/wallmed1/public
|
||||
products = list(/obj/item/stack/medical/bruise_pack = 8,/obj/item/stack/medical/ointment = 8,/obj/item/reagent_containers/hypospray/autoinjector = 16,/obj/item/healthanalyzer = 4)
|
||||
products = list(/obj/item/stack/medical/bruise_pack = 8,
|
||||
/obj/item/stack/medical/ointment = 8,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector = 16,
|
||||
/obj/item/healthanalyzer = 4,
|
||||
/obj/item/bodybag/cryobag = 4)
|
||||
|
||||
/obj/machinery/vending/security
|
||||
name = "SecTech"
|
||||
@@ -488,9 +499,15 @@
|
||||
/obj/item/flash = 5,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 6,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain/jelly = 6,
|
||||
/obj/item/storage/box/evidence = 6)
|
||||
/obj/item/storage/box/evidence = 6,
|
||||
/obj/item/gun/energy/taser = 8,
|
||||
/obj/item/gun/energy/stunrevolver = 4,
|
||||
/obj/item/reagent_containers/spray/pepper = 6,
|
||||
/obj/item/taperoll/police = 6,
|
||||
/obj/item/clothing/glasses/omnihud/sec = 6)
|
||||
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,
|
||||
/obj/item/storage/box/donut = 2)
|
||||
/obj/item/storage/box/donut = 2,
|
||||
/obj/item/implanter/compliance = 1)
|
||||
req_log_access = access_armory
|
||||
has_logs = 1
|
||||
|
||||
@@ -553,7 +570,9 @@
|
||||
/obj/item/seeds/pumpkinseed = 3,
|
||||
/obj/item/seeds/cherryseed = 3,
|
||||
/obj/item/seeds/plastiseed = 3,
|
||||
/obj/item/seeds/riceseed = 3)
|
||||
/obj/item/seeds/riceseed = 3,
|
||||
/obj/item/seeds/shrinkshroom = 3,
|
||||
/obj/item/seeds/megashroom = 3)
|
||||
contraband = list(/obj/item/seeds/amanitamycelium = 2,
|
||||
/obj/item/seeds/glowshroom = 2,
|
||||
/obj/item/seeds/libertymycelium = 2,
|
||||
@@ -652,7 +671,8 @@
|
||||
/obj/item/flashlight/glowstick/red = 3,
|
||||
/obj/item/flashlight/glowstick/blue = 3,
|
||||
/obj/item/flashlight/glowstick/orange =3,
|
||||
/obj/item/flashlight/glowstick/yellow = 3)
|
||||
/obj/item/flashlight/glowstick/yellow = 3,
|
||||
/obj/item/reagent_containers/spray/windowsealant = 5)
|
||||
contraband = list(/obj/item/weldingtool/hugetank = 2,
|
||||
/obj/item/clothing/gloves/fyellow = 2)
|
||||
premium = list(/obj/item/clothing/gloves/heavy_engineer = 1) //VOREStation Edit - yellow gloves are common in engineering, let's make "premium" actually mean something
|
||||
@@ -695,8 +715,10 @@
|
||||
/obj/item/circuitboard/body_scanner,
|
||||
/obj/item/circuitboard/medical_kiosk,
|
||||
/obj/item/circuitboard/sleeper,
|
||||
/obj/item/circuitboard/dna_analyzer)
|
||||
contraband = list(/obj/item/cell/potato = 3)
|
||||
/obj/item/circuitboard/dna_analyzer,
|
||||
/obj/item/clothing/glasses/omnihud/eng = 6)
|
||||
contraband = list(/obj/item/cell/potato = 3,
|
||||
/obj/item/rms = 5)
|
||||
premium = list(/obj/item/storage/belt/utility = 3)
|
||||
product_records = list()
|
||||
req_log_access = access_ce
|
||||
|
||||
@@ -1,41 +1,3 @@
|
||||
//Tweaked existing vendors
|
||||
/obj/machinery/vending/hydroseeds/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/seeds/shrinkshroom = 3,/obj/item/seeds/megashroom = 3)
|
||||
|
||||
/obj/machinery/vending/security/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/gun/energy/taser = 8,/obj/item/gun/energy/stunrevolver = 4,
|
||||
/obj/item/reagent_containers/spray/pepper = 6,/obj/item/taperoll/police = 6,
|
||||
/obj/item/clothing/glasses/omnihud/sec = 6)
|
||||
contraband += list(/obj/item/implanter/compliance = 1)
|
||||
|
||||
/obj/machinery/vending/tool/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/reagent_containers/spray/windowsealant = 5)
|
||||
|
||||
/obj/machinery/vending/engivend/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/clothing/glasses/omnihud/eng = 6)
|
||||
contraband += list(/obj/item/rms = 5)
|
||||
|
||||
/obj/machinery/vending/medical/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/storage/box/khcrystal = 4,/obj/item/backup_implanter = 3,
|
||||
/obj/item/clothing/glasses/omnihud/med = 4, /obj/item/glasses_kit = 1, /obj/item/storage/quickdraw/syringe_case = 4)
|
||||
|
||||
/obj/machinery/vending/wallmed1/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/bodybag/cryobag = 2)
|
||||
|
||||
/obj/machinery/vending/wallmed2/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/bodybag/cryobag = 3)
|
||||
|
||||
/obj/machinery/vending/wallmed1/public/Initialize()
|
||||
. = ..()
|
||||
products += list(/obj/item/bodybag/cryobag = 4)
|
||||
|
||||
// Food Machines (for event/away maps)
|
||||
|
||||
//I want this not just as part of the zoo. ;v
|
||||
@@ -519,7 +481,7 @@
|
||||
/obj/item/clothing/under/color/yellow = 5,
|
||||
/obj/item/clothing/shoes/black = 20,
|
||||
/obj/item/clothing/shoes/white = 20,
|
||||
/obj/item/clothing/gloves/watch = 20
|
||||
/obj/item/clothing/accessory/watch = 20
|
||||
)
|
||||
prices = list()
|
||||
|
||||
@@ -614,13 +576,13 @@
|
||||
/obj/item/clothing/accessory/wcoat/swvest/blue = 5,
|
||||
/obj/item/clothing/accessory/wcoat/swvest/red = 5,
|
||||
/obj/item/clothing/accessory/wristband = 5,
|
||||
/obj/item/clothing/accessory/wristbandcollection = 5,
|
||||
/obj/item/clothing/accessory/wristbandcollection/pink = 5,
|
||||
/obj/item/clothing/accessory/wristbandcollection/les = 5,
|
||||
/obj/item/clothing/accessory/wristbandcollection/bi = 5,
|
||||
/obj/item/clothing/accessory/wristbandcollection/trans = 5,
|
||||
/obj/item/clothing/accessory/wristbandcollection/ace = 5,
|
||||
/obj/item/clothing/accessory/wristband_spiked = 5,
|
||||
/obj/item/clothing/accessory/wristband/collection = 5,
|
||||
/obj/item/clothing/accessory/wristband/collection/pink = 5,
|
||||
/obj/item/clothing/accessory/wristband/collection/les = 5,
|
||||
/obj/item/clothing/accessory/wristband/collection/bi = 5,
|
||||
/obj/item/clothing/accessory/wristband/collection/trans = 5,
|
||||
/obj/item/clothing/accessory/wristband/collection/ace = 5,
|
||||
/obj/item/clothing/accessory/wristband/spiked = 5,
|
||||
/obj/item/clothing/accessory/belt = 5,
|
||||
/obj/item/clothing/accessory/belt/thick = 5,
|
||||
/obj/item/clothing/accessory/belt/strap = 5,
|
||||
@@ -636,13 +598,13 @@
|
||||
/obj/item/clothing/ears/earmuffs/headphones = 5,
|
||||
/obj/item/clothing/ears/earring/stud = 5,
|
||||
/obj/item/clothing/ears/earring/dangle = 5,
|
||||
/obj/item/clothing/gloves/ring/mariner = 5,
|
||||
/obj/item/clothing/gloves/ring/engagement = 5,
|
||||
/obj/item/clothing/gloves/ring/seal/signet = 5,
|
||||
/obj/item/clothing/gloves/ring/seal/mason = 5,
|
||||
/obj/item/clothing/gloves/ring/material/plastic = 5,
|
||||
/obj/item/clothing/gloves/ring/material/steel = 5,
|
||||
/obj/item/clothing/gloves/ring/material/gold = 5,
|
||||
/obj/item/clothing/accessory/ring/mariner = 5,
|
||||
/obj/item/clothing/accessory/ring/engagement = 5,
|
||||
/obj/item/clothing/accessory/ring/seal/signet = 5,
|
||||
/obj/item/clothing/accessory/ring/seal/mason = 5,
|
||||
/obj/item/clothing/accessory/ring/material/plastic = 5,
|
||||
/obj/item/clothing/accessory/ring/material/steel = 5,
|
||||
/obj/item/clothing/accessory/ring/material/gold = 5,
|
||||
/obj/item/clothing/glasses/eyepatch = 5,
|
||||
/obj/item/clothing/glasses/gglasses = 5,
|
||||
/obj/item/clothing/glasses/regular/hipster = 5,
|
||||
@@ -670,9 +632,9 @@
|
||||
/obj/item/clothing/accessory/pride/lesbian = 5,
|
||||
/obj/item/clothing/accessory/pride/intersex = 5,
|
||||
/obj/item/clothing/accessory/pride/vore = 5,
|
||||
/obj/item/clothing/gloves/watch = 5,
|
||||
/obj/item/clothing/gloves/watch/silver = 5,
|
||||
/obj/item/clothing/gloves/watch/gold = 5
|
||||
/obj/item/clothing/accessory/watch = 5,
|
||||
/obj/item/clothing/accessory/watch/silver = 5,
|
||||
/obj/item/clothing/accessory/watch/gold = 5
|
||||
)
|
||||
prices = list(/obj/item/clothing/accessory = 50,
|
||||
/obj/item/clothing/accessory/armband/med/color = 50,
|
||||
@@ -759,13 +721,13 @@
|
||||
/obj/item/clothing/accessory/wcoat/swvest/blue = 50,
|
||||
/obj/item/clothing/accessory/wcoat/swvest/red = 50,
|
||||
/obj/item/clothing/accessory/wristband = 10,
|
||||
/obj/item/clothing/accessory/wristbandcollection = 30,
|
||||
/obj/item/clothing/accessory/wristbandcollection/pink = 30,
|
||||
/obj/item/clothing/accessory/wristbandcollection/les = 30,
|
||||
/obj/item/clothing/accessory/wristbandcollection/bi = 30,
|
||||
/obj/item/clothing/accessory/wristbandcollection/trans = 30,
|
||||
/obj/item/clothing/accessory/wristbandcollection/ace = 30,
|
||||
/obj/item/clothing/accessory/wristband_spiked = 20,
|
||||
/obj/item/clothing/accessory/wristband/collection = 30,
|
||||
/obj/item/clothing/accessory/wristband/collection/pink = 30,
|
||||
/obj/item/clothing/accessory/wristband/collection/les = 30,
|
||||
/obj/item/clothing/accessory/wristband/collection/bi = 30,
|
||||
/obj/item/clothing/accessory/wristband/collection/trans = 30,
|
||||
/obj/item/clothing/accessory/wristband/collection/ace = 30,
|
||||
/obj/item/clothing/accessory/wristband/spiked = 20,
|
||||
/obj/item/clothing/accessory/belt = 50,
|
||||
/obj/item/clothing/accessory/belt/thick = 50,
|
||||
/obj/item/clothing/accessory/belt/strap = 50,
|
||||
@@ -781,13 +743,13 @@
|
||||
/obj/item/clothing/ears/earmuffs/headphones = 50,
|
||||
/obj/item/clothing/ears/earring/stud = 50,
|
||||
/obj/item/clothing/ears/earring/dangle = 50,
|
||||
/obj/item/clothing/gloves/ring/mariner = 50,
|
||||
/obj/item/clothing/gloves/ring/engagement = 50,
|
||||
/obj/item/clothing/gloves/ring/seal/signet = 50,
|
||||
/obj/item/clothing/gloves/ring/seal/mason = 50,
|
||||
/obj/item/clothing/gloves/ring/material/plastic = 50,
|
||||
/obj/item/clothing/gloves/ring/material/steel = 50,
|
||||
/obj/item/clothing/gloves/ring/material/gold = 100,
|
||||
/obj/item/clothing/accessory/ring/mariner = 50,
|
||||
/obj/item/clothing/accessory/ring/engagement = 50,
|
||||
/obj/item/clothing/accessory/ring/seal/signet = 50,
|
||||
/obj/item/clothing/accessory/ring/seal/mason = 50,
|
||||
/obj/item/clothing/accessory/ring/material/plastic = 50,
|
||||
/obj/item/clothing/accessory/ring/material/steel = 50,
|
||||
/obj/item/clothing/accessory/ring/material/gold = 100,
|
||||
/obj/item/clothing/glasses/eyepatch = 50,
|
||||
/obj/item/clothing/glasses/gglasses = 50,
|
||||
/obj/item/clothing/glasses/regular/hipster = 50,
|
||||
@@ -811,9 +773,9 @@
|
||||
/obj/item/clothing/accessory/pride/lesbian = 50,
|
||||
/obj/item/clothing/accessory/pride/intersex = 50,
|
||||
/obj/item/clothing/accessory/pride/vore = 50,
|
||||
/obj/item/clothing/gloves/watch = 50,
|
||||
/obj/item/clothing/gloves/watch/silver = 100,
|
||||
/obj/item/clothing/gloves/watch/gold = 200
|
||||
/obj/item/clothing/accessory/watch = 50,
|
||||
/obj/item/clothing/accessory/watch/silver = 100,
|
||||
/obj/item/clothing/accessory/watch/gold = 200
|
||||
)
|
||||
premium = list(/obj/item/bedsheet/rainbow = 1)
|
||||
contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1,
|
||||
@@ -2001,13 +1963,13 @@
|
||||
/obj/item/clothing/ears/earmuffs/headphones = 5,
|
||||
/obj/item/clothing/ears/earring/stud = 5,
|
||||
/obj/item/clothing/ears/earring/dangle = 5,
|
||||
/obj/item/clothing/gloves/ring/mariner = 5,
|
||||
/obj/item/clothing/gloves/ring/engagement = 5,
|
||||
/obj/item/clothing/gloves/ring/seal/signet = 5,
|
||||
/obj/item/clothing/gloves/ring/seal/mason = 5,
|
||||
/obj/item/clothing/gloves/ring/material/plastic = 5,
|
||||
/obj/item/clothing/gloves/ring/material/steel = 5,
|
||||
/obj/item/clothing/gloves/ring/material/gold = 5,
|
||||
/obj/item/clothing/accessory/ring/mariner = 5,
|
||||
/obj/item/clothing/accessory/ring/engagement = 5,
|
||||
/obj/item/clothing/accessory/ring/seal/signet = 5,
|
||||
/obj/item/clothing/accessory/ring/seal/mason = 5,
|
||||
/obj/item/clothing/accessory/ring/material/plastic = 5,
|
||||
/obj/item/clothing/accessory/ring/material/steel = 5,
|
||||
/obj/item/clothing/accessory/ring/material/gold = 5,
|
||||
/obj/item/clothing/glasses/eyepatch = 5,
|
||||
/obj/item/clothing/glasses/gglasses = 5,
|
||||
/obj/item/clothing/glasses/regular/hipster = 5,
|
||||
|
||||
@@ -211,8 +211,8 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/deck/attack_self()
|
||||
shuffle()
|
||||
/obj/item/deck/attack_self(mob/user)
|
||||
shuffle(user)
|
||||
|
||||
|
||||
/obj/item/deck/verb/verb_shuffle()
|
||||
@@ -220,10 +220,9 @@
|
||||
set name = "Shuffle"
|
||||
set desc = "Shuffle the cards in the deck."
|
||||
set src in view(1)
|
||||
shuffle()
|
||||
shuffle(usr)
|
||||
|
||||
/obj/item/deck/proc/shuffle()
|
||||
var/mob/living/user = usr
|
||||
/obj/item/deck/proc/shuffle(mob/user)
|
||||
if (cooldown < world.time - 10) // 15 ticks cooldown
|
||||
var/list/newcards = list()
|
||||
while(cards.len)
|
||||
|
||||
@@ -41,3 +41,58 @@
|
||||
cooldown = world.time
|
||||
else
|
||||
return
|
||||
|
||||
///Fluff item, using a separate item rather than a subitem to customise New()
|
||||
|
||||
/obj/item/deck/dark_tarot
|
||||
name = "dark rose tarot deck"
|
||||
desc = "A limited edition tarot deck for the scene-girl inclined!"
|
||||
icon_state = "dark_tarot"
|
||||
|
||||
/obj/item/deck/dark_tarot/New()
|
||||
..()
|
||||
|
||||
var/datum/playingcard/P
|
||||
for(var/name in list("fool","magician","high priestess","empress","emperor","hierophant","lovers","chariot","strength","hermit","wheel of fortune","justice","hanged man","death","temperance","devil","tower","star","moon","sun","judgement","world","white dragon with blue eyes","charred lizard","dark lotus","bash","reverse","rules","acid","abyss","maw"))
|
||||
P = new()
|
||||
P.name = "[name]"
|
||||
if(name == "high priestess")
|
||||
P.card_icon = "dark_high_priestess"
|
||||
else if(name == "wheel of fortune")
|
||||
P.card_icon = "dark_wheel"
|
||||
else if(name == "hanged man")
|
||||
P.card_icon = "dark_hanged"
|
||||
else if(name == "white dragon with blue eyes")
|
||||
P.card_icon = "dark_dragon"
|
||||
else if(name == "charred lizard")
|
||||
P.card_icon = "dark_lizard"
|
||||
else if(name == "dark lotus")
|
||||
P.card_icon = "dark_lotus"
|
||||
else
|
||||
P.card_icon = "dark_[name]"
|
||||
P.back_icon = "dark_back_tarot"
|
||||
cards += P
|
||||
for(var/suit in list("wands","pentacles","cups","swords"))
|
||||
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten","page","knight","queen","king"))
|
||||
P = new()
|
||||
P.name = "[number] of [suit]"
|
||||
P.card_icon = "dark_[suit]"
|
||||
P.back_icon = "dark_back_tarot"
|
||||
cards += P
|
||||
|
||||
/obj/item/deck/dark_tarot/shuffle(mob/user)
|
||||
if (cooldown < world.time - 10)
|
||||
var/list/newcards = list()
|
||||
while(cards.len)
|
||||
var/datum/playingcard/P = pick(cards)
|
||||
P.name = replacetext(P.name," reversed","")
|
||||
if(prob(50))
|
||||
P.name += " reversed"
|
||||
newcards += P
|
||||
cards -= P
|
||||
cards = newcards
|
||||
playsound(src, 'sound/items/cardshuffle.ogg', 50, 1)
|
||||
user.visible_message("\The [user] shuffles [src].")
|
||||
cooldown = world.time
|
||||
else
|
||||
return
|
||||
|
||||
@@ -361,7 +361,7 @@ var/list/name_to_material
|
||||
new /datum/stack_recipe("[display_name] armor plate", /obj/item/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] armor plate insert", /obj/item/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] grave marker", /obj/item/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/accessory/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
)
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
new /datum/stack_recipe("pouch, melee", /obj/item/storage/pouch/baton, 10, time = 20 SECONDS, pass_stack_color = FALSE, recycle_material = "[name]"), //vorestation Add
|
||||
new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] net", /obj/item/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/accessory/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] armor plate", /obj/item/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
|
||||
|
||||
@@ -223,7 +223,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
announce_ghost_joinleave(ghostize(1))
|
||||
else
|
||||
var/response
|
||||
if(src.client && src.client.holder)
|
||||
if(check_rights(R_ADMIN|R_SERVER|R_MOD,FALSE,src)) //No need to sanity check for client and holder here as that is part of check_rights
|
||||
response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Admin Ghost", "Ghost", "Stay in body"))
|
||||
if(response == "Admin Ghost")
|
||||
if(!src.client)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
var/to_wear_r_radio = null
|
||||
var/to_wear_uniform = /obj/item/clothing/under/color/grey
|
||||
var/to_wear_suit = /obj/item/clothing/suit/armor/material/makeshift/glass
|
||||
var/to_wear_gloves = /obj/item/clothing/gloves/ring/material/platinum
|
||||
var/to_wear_gloves = /obj/item/clothing/accessory/ring/material/platinum
|
||||
var/to_wear_shoes = /obj/item/clothing/shoes/galoshes
|
||||
var/to_wear_belt = /obj/item/storage/belt/utility/full
|
||||
var/to_wear_l_pocket = /obj/item/soap
|
||||
|
||||
@@ -107,12 +107,10 @@
|
||||
if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine)
|
||||
//Ties
|
||||
var/tie_msg
|
||||
var/tie_msg_warn
|
||||
if(istype(w_uniform,/obj/item/clothing/under) && !(skip_gear & EXAMINE_SKIPTIE))
|
||||
var/obj/item/clothing/under/U = w_uniform
|
||||
if(LAZYLEN(U.accessories))
|
||||
tie_msg += ". Attached to it is"
|
||||
tie_msg_warn += "! Attached to it is"
|
||||
var/list/accessory_descs = list()
|
||||
if(skip_gear & EXAMINE_SKIPHOLSTER)
|
||||
for(var/obj/item/clothing/accessory/A in U.accessories)
|
||||
@@ -139,12 +137,10 @@
|
||||
//suit/armour
|
||||
if(wear_suit)
|
||||
var/tie_msg
|
||||
var/tie_msg_warn
|
||||
if(istype(wear_suit,/obj/item/clothing/suit))
|
||||
var/obj/item/clothing/suit/U = wear_suit
|
||||
if(LAZYLEN(U.accessories))
|
||||
tie_msg += ". Attached to it is"
|
||||
tie_msg_warn += "! Attached to it is"
|
||||
var/list/accessory_descs = list()
|
||||
for(var/accessory in U.accessories)
|
||||
accessory_descs += "<a href='?src=\ref[src];lookitem_desc_only=\ref[accessory]'>\a [accessory]</a>"
|
||||
@@ -185,10 +181,21 @@
|
||||
|
||||
//gloves
|
||||
if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine)
|
||||
var/gloves_acc_msg
|
||||
if(istype(gloves,/obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
if(LAZYLEN(G.accessories))
|
||||
gloves_acc_msg += ". Attached to it is"
|
||||
var/list/accessory_descs = list()
|
||||
for(var/obj/item/clothing/accessory/A in G.accessories)
|
||||
accessory_descs += "<a href='?src=\ref[src];lookitem_desc_only=\ref[A]'>\a [A]</a>"
|
||||
|
||||
gloves_acc_msg += " [lowertext(english_list(accessory_descs))]."
|
||||
if(gloves.blood_DNA)
|
||||
msg += span_warning("[T.He] [T.has] [icon2html(gloves,user.client)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>[gloves.name]</a> on [T.his] hands!")
|
||||
msg += span_warning("[T.He] [T.has] [icon2html(gloves,user.client)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>[gloves.name]</a> on [T.his] hands![gloves_acc_msg]")
|
||||
else
|
||||
msg += "[T.He] [T.has] [icon2html(gloves,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>\a [gloves]</a> on [T.his] hands."
|
||||
msg += "[T.He] [T.has] [icon2html(gloves,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>\a [gloves]</a> on [T.his] hands.[gloves_acc_msg]"
|
||||
|
||||
else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS))
|
||||
msg += span_warning("[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!")
|
||||
|
||||
|
||||
@@ -272,8 +272,12 @@
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
real_damage += G.punch_force
|
||||
hit_dam_type = G.punch_damtype
|
||||
if(H.pulling_punches && !attack.sharp && !attack.edge) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN, BUT YOU CAN'T "PULL" A KNIFE
|
||||
hit_dam_type = AGONY
|
||||
else if(istype(H.gloves, /obj/item/clothing/accessory))
|
||||
var/obj/item/clothing/accessory/G = H.gloves
|
||||
real_damage += G.punch_force
|
||||
hit_dam_type = G.punch_damtype
|
||||
if(H.pulling_punches && !attack.sharp && !attack.edge) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN, BUT YOU CAN'T "PULL" A KNIFE
|
||||
hit_dam_type = AGONY
|
||||
real_damage *= damage_multiplier
|
||||
rand_damage *= damage_multiplier
|
||||
if(HULK in H.mutations)
|
||||
|
||||
@@ -212,6 +212,9 @@
|
||||
var/can_space_freemove = FALSE // Can we freely move in space?
|
||||
var/can_zero_g_move = FALSE // What about just in zero-g non-space?
|
||||
|
||||
var/swim_mult = 1 //multiplier to our z-movement rate for swimming
|
||||
var/climb_mult = 1 //multiplier to our z-movement rate for lattices/catwalks
|
||||
|
||||
var/item_slowdown_mod = 1 // How affected by item slowdown the species is.
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
|
||||
@@ -242,6 +242,8 @@
|
||||
reagent_tag = IS_TAJARA
|
||||
allergens = ALLERGEN_STIMULANT
|
||||
|
||||
climb_mult = 0.75
|
||||
|
||||
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
|
||||
|
||||
heat_discomfort_level = 292
|
||||
|
||||
@@ -384,6 +384,8 @@
|
||||
silk_reserve = 500
|
||||
silk_max_reserve = 1000
|
||||
|
||||
climb_mult = 0.75
|
||||
|
||||
/datum/species/spider/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if(H.stat == DEAD) // If they're dead they won't need anything.
|
||||
return
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
|
||||
water_breather = TRUE
|
||||
water_movement = -4 //Negates shallow. Halves deep.
|
||||
swim_mult = 0.5
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#777777"
|
||||
|
||||
@@ -188,7 +188,9 @@
|
||||
|
||||
/datum/trait/negative/bad_swimmer
|
||||
name = "Bad Swimmer"
|
||||
desc = "You can't swim very well, all water slows you down a lot and you drown in deep water."
|
||||
desc = "You can't swim very well, all water slows you down a lot and you drown in deep water. You also swim up and down 25% slower."
|
||||
cost = -1
|
||||
custom_only = FALSE
|
||||
var_changes = list("bad_swimmer" = 1, "water_movement" = 4)
|
||||
var_changes = list("bad_swimmer" = 1, "water_movement" = 4, "swim_mult" = 1.25)
|
||||
varchange_type = TRAIT_VARCHANGE_LESS_BETTER
|
||||
excludes = list(/datum/trait/positive/good_swimmer)
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
name = "Winged Flight"
|
||||
desc = "Allows you to fly by using your wings. Don't forget to bring them!"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
has_preferences = list("flight_vore" = list(TRAIT_PREF_TYPE_BOOLEAN, "Flight Vore enabled on spawn", TRAIT_VAREDIT_TARGET_MOB, FALSE))
|
||||
|
||||
/datum/trait/positive/winged_flight/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
@@ -241,12 +242,9 @@
|
||||
cost = 1
|
||||
var_changes = list("throwforce_absorb_threshold" = 10)
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/trait/positive/wall_climber
|
||||
name = "Climber, Amateur"
|
||||
desc = "You can climb certain walls without tools! This is likely a personal skill you developed."
|
||||
desc = "You can climb certain walls without tools! This is likely a personal skill you developed. You can also climb lattices and ladders a little bit faster than everyone else."
|
||||
tutorial = "You must approach a wall and right click it and select the \
|
||||
'climb wall' verb to climb it. You suffer from a movement delay of 1.5 with this trait.\n \
|
||||
Your total climb time is expected to be 17.5 seconds. Tools may reduce this. \n\n \
|
||||
@@ -255,12 +253,12 @@
|
||||
cost = 1
|
||||
custom_only = FALSE
|
||||
banned_species = list(SPECIES_TAJ, SPECIES_VASILISSAN) // They got unique climbing delay.
|
||||
var_changes = list("can_climb" = TRUE)
|
||||
var_changes = list("can_climb" = TRUE, "climb_mult" = 0.75)
|
||||
excludes = list(/datum/trait/positive/wall_climber_pro, /datum/trait/positive/wall_climber_natural)
|
||||
|
||||
/datum/trait/positive/wall_climber_natural
|
||||
name = "Climber, Natural"
|
||||
desc = "You can climb certain walls without tools! This is likely due to the unique anatomy of your species. CUSTOM AND XENOCHIM ONLY"
|
||||
desc = "You can climb certain walls without tools! This is likely due to the unique anatomy of your species. You can climb lattices and ladders slightly faster than everyone else. CUSTOM AND XENOCHIM ONLY"
|
||||
tutorial = "You must approach a wall and right click it and select the \
|
||||
'climb wall' verb to climb it. You suffer from a movement delay of 1.5 with this trait.\n \
|
||||
Your total climb time is expected to be 17.5 seconds. Tools may reduce this. \n\n \
|
||||
@@ -268,13 +266,13 @@
|
||||
a climbable wall. To climbe like so, use the verb 'Climb Down Wall' in IC tab!"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("can_climb" = TRUE)
|
||||
var_changes = list("can_climb" = TRUE, "climb_mult" = 0.75)
|
||||
allowed_species = list(SPECIES_XENOCHIMERA, SPECIES_CUSTOM) //So that we avoid needless bloat for xenochim
|
||||
excludes = list(/datum/trait/positive/wall_climber_pro, /datum/trait/positive/wall_climber)
|
||||
|
||||
/datum/trait/positive/wall_climber_pro
|
||||
name = "Climber, Professional"
|
||||
desc = "You can climb certain walls without tools! You are a professional rock climber at this, letting you climb almost twice as fast!"
|
||||
desc = "You can climb certain walls without tools! You are a professional rock climber at this, letting you climb almost twice as fast! You can also climb lattices and ladders a fair bit faster than everyone else!"
|
||||
tutorial = "You must approach a wall and right click it and select the \
|
||||
'climb wall' verb to climb it. Your movement delay is just 1.25 with this trait.\n \
|
||||
Your climb time is expected to be 9 seconds. Tools may reduce this. \n\n \
|
||||
@@ -282,7 +280,7 @@
|
||||
a climbable wall. To climbe like so, use the verb 'Climb Down Wall' in IC tab!"
|
||||
cost = 2
|
||||
custom_only = FALSE
|
||||
var_changes = list("climbing_delay" = 1.25)
|
||||
var_changes = list("climbing_delay" = 1.25, "climb_mult" = 0.5)
|
||||
varchange_type = TRAIT_VARCHANGE_LESS_BETTER
|
||||
excludes = list(/datum/trait/positive/wall_climber,/datum/trait/positive/wall_climber_natural)
|
||||
|
||||
@@ -292,3 +290,14 @@
|
||||
/datum/trait/positive/wall_climber_pro/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..()
|
||||
S.can_climb = TRUE
|
||||
|
||||
/datum/trait/positive/good_swimmer
|
||||
name = "Pro Swimmer"
|
||||
desc = "You were top of your group in swimming class! This is of questionable usefulness on most planets, but hey, maybe you'll get to visit a nice beach world someday?"
|
||||
tutorial = "You move faster in water, and can move up and down z-levels faster than other swimmers!"
|
||||
cost = 1
|
||||
custom_only = FALSE
|
||||
var_changes = list("water_movement" = -2, "swim_mult" = 0.5)
|
||||
varchange_type = TRAIT_VARCHANGE_LESS_BETTER
|
||||
excludes = list(/datum/trait/negative/bad_swimmer)
|
||||
banned_species = list(SPECIES_AKULA) // They already swim better than this
|
||||
|
||||
@@ -203,9 +203,6 @@ var/list/mob_hat_cache = list()
|
||||
can_pick_shell = FALSE
|
||||
update_icon()
|
||||
|
||||
/mob/living/silicon/robot/drone/choose_icon()
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/drone/pick_module()
|
||||
return
|
||||
|
||||
|
||||
@@ -11,11 +11,6 @@
|
||||
repick_laws()
|
||||
|
||||
// Forces synths to select an icon relevant to their module
|
||||
if(!icon_selected)
|
||||
icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1
|
||||
choose_icon(icon_selection_tries)
|
||||
|
||||
if(sprite_datum && module)
|
||||
sprite_datum.do_equipment_glamour(module)
|
||||
pick_module()
|
||||
|
||||
plane_holder.set_vis(VIS_AUGMENTED, TRUE)
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
//Icon stuff
|
||||
|
||||
var/datum/robot_sprite/sprite_datum // Sprite datum, holding all our sprite data
|
||||
var/icon_selected = 1 // If icon selection has been completed yet
|
||||
var/icon_selection_tries = 0 // Remaining attempts to select icon before a selection is forced
|
||||
var/icon_selected = FALSE // If icon selection has been completed yet
|
||||
var/list/sprite_extra_customization = list()
|
||||
var/rest_style = "Default"
|
||||
var/notransform
|
||||
@@ -47,6 +46,9 @@
|
||||
var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not
|
||||
var/obj/screen/robot_modules_background
|
||||
|
||||
var/ui_theme
|
||||
var/selecting_module = FALSE
|
||||
|
||||
//3 Modules can be activated at any one time.
|
||||
var/obj/item/robot_module/module = null
|
||||
var/module_active = null
|
||||
@@ -336,46 +338,17 @@
|
||||
return module_sprites
|
||||
*/
|
||||
/mob/living/silicon/robot/proc/pick_module()
|
||||
if(icon_selected)
|
||||
return
|
||||
if(module)
|
||||
return
|
||||
var/list/modules = list()
|
||||
//VOREStatation Edit Start: shell restrictions
|
||||
if(shell)
|
||||
if(restrict_modules_to.len > 0)
|
||||
modules.Add(restrict_modules_to)
|
||||
else
|
||||
modules.Add(shell_module_types)
|
||||
else
|
||||
if(restrict_modules_to.len > 0)
|
||||
modules.Add(restrict_modules_to)
|
||||
else
|
||||
modules.Add(robot_module_types)
|
||||
if(crisis || security_level == SEC_LEVEL_RED || crisis_override)
|
||||
to_chat(src, span_red("Crisis mode active. Combat module available."))
|
||||
modules |= emergency_module_types
|
||||
for(var/module_name in whitelisted_module_types)
|
||||
if(is_borg_whitelisted(src, module_name))
|
||||
modules |= module_name
|
||||
//VOREStatation Edit End: shell restrictions
|
||||
modtype = tgui_input_list(usr, "Please, select a module!", "Robot module", modules)
|
||||
|
||||
if(module)
|
||||
return
|
||||
if(!(modtype in robot_modules))
|
||||
return
|
||||
if(!is_borg_whitelisted(src, modtype))
|
||||
return
|
||||
|
||||
var/module_type = robot_modules[modtype]
|
||||
transform_with_anim() //VOREStation edit: sprite animation
|
||||
new module_type(src)
|
||||
|
||||
hands.icon_state = get_hud_module_icon()
|
||||
feedback_inc("cyborg_[lowertext(modtype)]",1)
|
||||
updatename()
|
||||
hud_used.update_robot_modules_display()
|
||||
notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name)
|
||||
robotact?.update_static_data_for_all_viewers()
|
||||
var/list/module_sprites = SSrobot_sprites.get_module_sprites(module, src)
|
||||
if(module_sprites.len == 1 || !client)
|
||||
sprite_datum = module_sprites[1]
|
||||
sprite_datum.do_equipment_glamour(module)
|
||||
return
|
||||
if(!selecting_module)
|
||||
var/datum/tgui_module/robot_ui_module/ui = new(src)
|
||||
ui.tgui_interact(src)
|
||||
|
||||
/mob/living/silicon/robot/proc/update_braintype()
|
||||
if(istype(mmi, /obj/item/mmi/digital/posibrain))
|
||||
@@ -436,15 +409,12 @@
|
||||
to_chat(usr, "You can't pick another custom name. [isshell(src) ? "" : "Go ask for a name change."]")
|
||||
return 0
|
||||
|
||||
spawn(0)
|
||||
var/newname
|
||||
newname = sanitizeSafe(tgui_input_text(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if (newname)
|
||||
custom_name = newname
|
||||
sprite_name = newname
|
||||
var/newname = sanitizeSafe(tgui_input_text(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if (newname)
|
||||
custom_name = newname
|
||||
sprite_name = newname
|
||||
|
||||
updatename()
|
||||
update_icon()
|
||||
updatename()
|
||||
|
||||
/mob/living/silicon/robot/verb/extra_customization()
|
||||
set name = "Customize Appearance"
|
||||
@@ -744,6 +714,8 @@
|
||||
to_chat(usr, span_filter_notice("You must access the borgs internals!"))
|
||||
else if(!src.module && U.require_module)
|
||||
to_chat(usr, span_filter_notice("The borg must choose a module before it can be upgraded!"))
|
||||
else if(user == src && istype(W,/obj/item/borg/upgrade/utility/reset))
|
||||
to_chat(usr, span_warning("You are restricted from reseting your own module."))
|
||||
else if(U.locked)
|
||||
to_chat(usr, span_filter_notice("The upgrade is locked and cannot be used yet!"))
|
||||
else
|
||||
@@ -796,6 +768,7 @@
|
||||
notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, module.name)
|
||||
module.Reset(src)
|
||||
qdel(module)
|
||||
icon_selected = FALSE
|
||||
module = null
|
||||
updatename("Default")
|
||||
has_recoloured = FALSE
|
||||
@@ -903,7 +876,7 @@
|
||||
else if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(check_access(R.get_active_hand()) || istype(R.get_active_hand(), /obj/item/card/robot))
|
||||
return 1
|
||||
return TRUE
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/robot/proc/check_access(obj/item/I)
|
||||
@@ -1088,60 +1061,6 @@
|
||||
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/choose_icon(var/triesleft)
|
||||
var/robot_species = null
|
||||
if(!SSrobot_sprites)
|
||||
to_chat(src, "Robot Sprites have not been initialized yet. How are you choosing a sprite? Harass a coder.")
|
||||
return
|
||||
|
||||
var/list/module_sprites = SSrobot_sprites.get_module_sprites(modtype, src)
|
||||
if(!module_sprites || !module_sprites.len)
|
||||
to_chat(src, "Your module appears to have no sprite options. Harass a coder.")
|
||||
return
|
||||
|
||||
icon_selected = 0
|
||||
icon_selection_tries = triesleft
|
||||
if(module_sprites.len == 1 || !client)
|
||||
if(!(sprite_datum in module_sprites))
|
||||
sprite_datum = module_sprites[1]
|
||||
else
|
||||
var/selection = tgui_input_list(src, "Select an icon! [triesleft ? "You have [triesleft] more chance\s." : "This is your last try."]", "Robot Icon", module_sprites)
|
||||
if(selection)
|
||||
sprite_datum = selection
|
||||
else
|
||||
sprite_datum = module_sprites[1]
|
||||
if(!istype(src,/mob/living/silicon/robot/drone))
|
||||
robot_species = sprite_datum.name
|
||||
if(notransform)
|
||||
to_chat(src, "Your current transformation has not finished yet!")
|
||||
choose_icon(icon_selection_tries)
|
||||
return
|
||||
else
|
||||
transform_with_anim()
|
||||
|
||||
var/tempheight = vis_height
|
||||
update_icon()
|
||||
// This is bad but I dunno other way to 'reset' our resize offset based on vis_height changes other than resizing to normal and back.
|
||||
if(tempheight != vis_height)
|
||||
var/tempsize = size_multiplier
|
||||
resize(1)
|
||||
resize(tempsize)
|
||||
|
||||
|
||||
if (module_sprites.len > 1 && triesleft >= 1 && client)
|
||||
icon_selection_tries--
|
||||
var/choice = tgui_alert(usr, "Look at your icon - is this what you want?", "Icon Choice", list("Yes","No"))
|
||||
if(choice == "No")
|
||||
choose_icon(icon_selection_tries)
|
||||
return
|
||||
|
||||
icon_selected = 1
|
||||
icon_selection_tries = 0
|
||||
sprite_type = robot_species
|
||||
if(hands)
|
||||
update_hud()
|
||||
to_chat(src, span_filter_notice("Your icon has been set. You now require a module reset to change it."))
|
||||
|
||||
/mob/living/silicon/robot/proc/set_default_module_icon()
|
||||
if(!SSrobot_sprites)
|
||||
return
|
||||
|
||||
@@ -73,7 +73,7 @@ var/global/list/robot_modules = list(
|
||||
R.radio.recalculateChannels()
|
||||
|
||||
R.set_default_module_icon()
|
||||
R.choose_icon(SSrobot_sprites.get_module_sprites_len(R.modtype, R) + 1)
|
||||
R.pick_module()
|
||||
if(!R.client)
|
||||
R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later!
|
||||
|
||||
@@ -93,7 +93,7 @@ var/global/list/robot_modules = list(
|
||||
|
||||
if(R.radio)
|
||||
R.radio.recalculateChannels()
|
||||
R.choose_icon(0)
|
||||
R.set_default_module_icon()
|
||||
|
||||
R.scrubbing = FALSE
|
||||
|
||||
|
||||
@@ -52,6 +52,10 @@
|
||||
var/mob/living/silicon/robot/R = host
|
||||
|
||||
data["module_name"] = R.module ? "[R.module]" : null
|
||||
if(R.emagged)
|
||||
data["theme"] = "syndicate"
|
||||
else if (R.ui_theme)
|
||||
data["theme"] = R.ui_theme
|
||||
|
||||
if(!R.module)
|
||||
return data
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user