mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Merge branch 'master' into var/const-to-define
This commit is contained in:
@@ -2164,7 +2164,7 @@
|
||||
var/obj/pageobj = B.contents[page]
|
||||
data += "<A href='?src=[UID()];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
|
||||
|
||||
usr << browse(data, "window=[B.name]")
|
||||
usr << browse(data, "window=PaperBundle[B.UID()]")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</span>")
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
msg = pencode_to_html(msg)
|
||||
msg = admin_pencode_to_html(msg)
|
||||
to_chat(world, "[msg]")
|
||||
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
|
||||
message_admins("<span class='boldnotice'>GlobalNarrate: [key_name_admin(usr)]: [msg]<BR></span>", 1)
|
||||
|
||||
@@ -439,7 +439,7 @@
|
||||
|
||||
/datum/lore/organization/gov/synth
|
||||
name = "Synthetic Union"
|
||||
short_name = "Synthtica"
|
||||
short_name = "Synthetica"
|
||||
acronym = "SYN"
|
||||
desc = "A defensive coalition of synthetics based out of New Canaan,\
|
||||
the Synthetic Union is an organization which aims to establish and consolidate synthetic rights across the galaxy.\
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in GLOB.all_vent_pumps)
|
||||
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
|
||||
if(!temp_vent.parent)
|
||||
// Issue happening more often with vents. Log and continue. Delete once solved
|
||||
log_debug("spider_terror/start(), vent has no parent: [temp_vent], qdeled: [QDELETED(temp_vent)], loc: [temp_vent.loc]")
|
||||
continue
|
||||
if(temp_vent.parent.other_atmosmch.len > 50)
|
||||
vents += temp_vent
|
||||
var/spider_type
|
||||
|
||||
@@ -18,6 +18,9 @@ var/global/list/unused_trade_stations = list("sol")
|
||||
return
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
|
||||
event_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused")
|
||||
// if the docking request was refused, fire another major event in 60 seconds
|
||||
var/list/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR]
|
||||
EC.next_event_time = world.time + (60 * 10)
|
||||
return
|
||||
|
||||
var/list/spawnlocs = list()
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/obj/item/seeds/cannabis/death,
|
||||
/obj/item/seeds/cannabis/white,
|
||||
/obj/item/seeds/cannabis/ultimate)
|
||||
reagents_add = list("thc" = 0.15)
|
||||
reagents_add = list("thc" = 0.15, "cbd" = 0.15)
|
||||
|
||||
|
||||
/obj/item/seeds/cannabis/rainbow
|
||||
@@ -28,7 +28,7 @@
|
||||
plantname = "Rainbow Weed"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow
|
||||
mutatelist = list()
|
||||
reagents_add = list("lsd" = 0.15, "thc" = 0.15)
|
||||
reagents_add = list("lsd" = 0.15, "thc" = 0.15, "cbd" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
/obj/item/seeds/cannabis/death
|
||||
@@ -39,7 +39,7 @@
|
||||
plantname = "Deathweed"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/death
|
||||
mutatelist = list()
|
||||
reagents_add = list("cyanide" = 0.35, "thc" = 0.15)
|
||||
reagents_add = list("cyanide" = 0.35, "thc" = 0.15, "cbd" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
/obj/item/seeds/cannabis/white
|
||||
@@ -50,7 +50,7 @@
|
||||
plantname = "Lifeweed"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/white
|
||||
mutatelist = list()
|
||||
reagents_add = list("omnizine" = 0.35, "thc" = 0.15)
|
||||
reagents_add = list("omnizine" = 0.35, "thc" = 0.15, "cbd" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
"haloperidol" = 0.15,
|
||||
"methamphetamine" = 0.15,
|
||||
"thc" = 0.15,
|
||||
"cbd" = 0.15,
|
||||
"psilocybin" = 0.15,
|
||||
"hairgrownium" = 0.15,
|
||||
"ectoplasm" = 0.15,
|
||||
|
||||
@@ -141,7 +141,8 @@
|
||||
|
||||
spawn(30)
|
||||
if(!QDELETED(src))
|
||||
var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(loc))
|
||||
var/turf/T = get_turf(user)
|
||||
var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(T)
|
||||
K.maxHealth += round(seed.endurance / 3)
|
||||
K.melee_damage_lower += round(seed.potency / 10)
|
||||
K.melee_damage_upper += round(seed.potency / 10)
|
||||
@@ -150,4 +151,6 @@
|
||||
K.visible_message("<span class='notice'>The Killer Tomato growls as it suddenly awakens.</span>")
|
||||
if(user)
|
||||
user.unEquip(src)
|
||||
message_admins("[key_name_admin(user)] released a killer tomato at [ADMIN_COORDJMP(T)]")
|
||||
log_game("[key_name(user)] released a killer tomato at [COORD(T)]")
|
||||
qdel(src)
|
||||
|
||||
@@ -79,5 +79,5 @@ In all, this is a lot like the monkey code. /N
|
||||
if(M.is_adult)
|
||||
damage = rand(10, 40)
|
||||
adjustBruteLoss(damage)
|
||||
add_attack_logs(src, M, "Slime'd for [damage] damage")
|
||||
add_attack_logs(M, src, "Slime'd for [damage] damage")
|
||||
updatehealth("slime attack")
|
||||
@@ -585,6 +585,14 @@
|
||||
message = "<B>[src]</B> makes a weak noise"
|
||||
m_type = 2
|
||||
|
||||
if("hsigh", "hsighs")
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> sighs contentedly."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a [pick("chill", "relaxed")] noise"
|
||||
m_type = 2
|
||||
|
||||
if("laugh", "laughs")
|
||||
var/M = handle_emote_param(param)
|
||||
if(miming)
|
||||
|
||||
@@ -454,12 +454,6 @@
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
|
||||
/mob/living/carbon/human/Crossed(atom/movable/AM, oldloc)
|
||||
var/mob/living/simple_animal/bot/mulebot/MB = AM
|
||||
if(istype(MB))
|
||||
MB.RunOver(src)
|
||||
|
||||
// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
|
||||
/mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
var/obj/item/pda/pda = wear_id
|
||||
|
||||
@@ -542,7 +542,7 @@
|
||||
if(COLDRES in mutations)
|
||||
return 1 //Fully protected from the cold.
|
||||
|
||||
temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K.
|
||||
temperature = max(temperature, TCMB) //There is an occasional bug where the temperature is miscalculated in areas with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K.
|
||||
var/thermal_protection_flags = get_cold_protection_flags(temperature)
|
||||
|
||||
var/thermal_protection = 0.0
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
..()
|
||||
|
||||
/datum/species/plasmaman/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "plasma")
|
||||
if(R.id == "plasma" || R.id == "plasma_dust")
|
||||
H.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustPlasma(20)
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
return FALSE
|
||||
|
||||
if(stat != DEAD)
|
||||
add_attack_logs(src, M, "Slime'd")
|
||||
add_attack_logs(M, src, "Slime'd")
|
||||
M.do_attack_animation(src)
|
||||
visible_message("<span class='danger'>\The [M.name] glomps [src]!</span>", "<span class='userdanger'>\The [M.name] glomps you!</span>")
|
||||
return TRUE
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
|
||||
mulebot_count++
|
||||
set_suffix(suffix ? suffix : "#[mulebot_count]")
|
||||
RegisterSignal(src, COMSIG_CROSSED_MOVABLE, .proc/human_squish_check)
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/Destroy()
|
||||
unload(0)
|
||||
@@ -866,6 +867,11 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/proc/human_squish_check(src, atom/movable/AM)
|
||||
if(!ishuman(AM))
|
||||
return
|
||||
RunOver(AM)
|
||||
|
||||
#undef SIGH
|
||||
#undef ANNOYED
|
||||
#undef DELIGHT
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
else
|
||||
data = "<div id='markdown'>[infolinks ? info_links : info]</div>[stamps]"
|
||||
if(view)
|
||||
var/datum/browser/popup = new(user, name, , paper_width, paper_height)
|
||||
var/datum/browser/popup = new(user, "Paper[UID()]", , paper_width, paper_height)
|
||||
popup.stylesheets = list()
|
||||
popup.set_content(data)
|
||||
if(!stars)
|
||||
|
||||
@@ -63,13 +63,13 @@
|
||||
qdel(W)
|
||||
else
|
||||
if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon))
|
||||
usr << browse("", "window=[name]") //Closes the dialog
|
||||
usr << browse("", "window=PaperBundle[UID()]") //Closes the dialog
|
||||
P = src[page]
|
||||
P.attackby(W, user, params)
|
||||
|
||||
|
||||
update_icon()
|
||||
if(winget(usr, "[name]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME
|
||||
if(winget(usr, "PaperBundle[UID()]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME
|
||||
attack_self(usr) //Update the browsed page.
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
@@ -125,7 +125,7 @@
|
||||
if(istype(src[page], /obj/item/paper))
|
||||
var/obj/item/paper/P = W
|
||||
dat += P.show_content(usr, view = 0)
|
||||
usr << browse(dat, "window=[name]")
|
||||
usr << browse(dat, "window=PaperBundle[UID()]")
|
||||
else if(istype(src[page], /obj/item/photo))
|
||||
var/obj/item/photo/P = W
|
||||
usr << browse_rsc(P.img, "tmp_photo.png")
|
||||
@@ -133,7 +133,7 @@
|
||||
+ "<body style='overflow:hidden'>" \
|
||||
+ "<div> <img src='tmp_photo.png' width = '180'" \
|
||||
+ "[P.scribble ? "<div><br> Written on the back:<br><i>[P.scribble]</i>" : ""]"\
|
||||
+ "</body></html>", "window=[name]")
|
||||
+ "</body></html>", "window=PaperBundle[UID()]")
|
||||
|
||||
/obj/item/paper_bundle/attack_self(mob/user as mob)
|
||||
src.show_content(user)
|
||||
|
||||
@@ -81,13 +81,22 @@
|
||||
. += "<span class='notice'>It is too far away.</span>"
|
||||
|
||||
/obj/item/photo/proc/show(mob/user as mob)
|
||||
usr << browse_rsc(img, "tmp_photo.png")
|
||||
var/icon/img_shown = new/icon(img)
|
||||
var/colormatrix = user.get_screen_colour()
|
||||
// Apply colorblindness effects, if any.
|
||||
if(islist(colormatrix))
|
||||
img_shown.MapColors(
|
||||
colormatrix[1], colormatrix[2], colormatrix[3],
|
||||
colormatrix[4], colormatrix[5], colormatrix[6],
|
||||
colormatrix[7], colormatrix[8], colormatrix[9],
|
||||
)
|
||||
usr << browse_rsc(img_shown, "tmp_photo.png")
|
||||
usr << browse("<html><head><title>[name]</title></head>" \
|
||||
+ "<body style='overflow:hidden;margin:0;text-align:center'>" \
|
||||
+ "<img src='tmp_photo.png' width='[64*photo_size]' style='-ms-interpolation-mode:nearest-neighbor' />" \
|
||||
+ "[scribble ? "<br>Written on the back:<br><i>[scribble]</i>" : ""]"\
|
||||
+ "</body></html>", "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]")
|
||||
onclose(usr, "[name]")
|
||||
+ "</body></html>", "window=Photo[UID()];size=[64*photo_size]x[scribble ? 400 : 64*photo_size]")
|
||||
onclose(usr, "Photo[UID()]")
|
||||
return
|
||||
|
||||
/obj/item/photo/verb/rename()
|
||||
|
||||
@@ -22,30 +22,29 @@
|
||||
energy = 50
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/New(loc)
|
||||
..()
|
||||
/obj/effect/accelerated_particle/Initialize(loc)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/propagate), 1)
|
||||
RegisterSignal(src, COMSIG_CROSSED_MOVABLE, .proc/try_irradiate)
|
||||
RegisterSignal(src, COMSIG_MOVABLE_CROSSED, .proc/try_irradiate)
|
||||
QDEL_IN(src, movement_range)
|
||||
|
||||
addtimer(CALLBACK(src, .proc/move), 1)
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/Bump(atom/A)
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
toxmob(A)
|
||||
else if(istype(A, /obj/machinery/the_singularitygen))
|
||||
var/obj/machinery/the_singularitygen/S = A
|
||||
S.energy += energy
|
||||
else if(istype(A, /obj/singularity))
|
||||
var/obj/singularity/S = A
|
||||
S.energy += energy
|
||||
else if(istype(A, /obj/structure/blob))
|
||||
var/obj/structure/blob/B = A
|
||||
B.take_damage(energy * 0.6)
|
||||
movement_range = 0
|
||||
|
||||
/obj/effect/accelerated_particle/Crossed(atom/A, oldloc)
|
||||
/obj/effect/accelerated_particle/proc/try_irradiate(src, atom/A)
|
||||
if(isliving(A))
|
||||
toxmob(A)
|
||||
var/mob/living/L = A
|
||||
L.apply_effect((energy * 6), IRRADIATE, 0)
|
||||
else if(istype(A, /obj/machinery/the_singularitygen))
|
||||
var/obj/machinery/the_singularitygen/S = A
|
||||
S.energy += energy
|
||||
else if(istype(A, /obj/structure/blob))
|
||||
var/obj/structure/blob/B = A
|
||||
B.take_damage(energy * 0.6)
|
||||
movement_range = 0
|
||||
|
||||
/obj/effect/accelerated_particle/Bump(obj/singularity/S)
|
||||
if(!istype(S))
|
||||
return ..()
|
||||
S.energy += energy
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/ex_act(severity)
|
||||
@@ -54,17 +53,7 @@
|
||||
/obj/effect/accelerated_particle/singularity_pull()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/proc/toxmob(mob/living/M)
|
||||
M.apply_effect((energy * 6), IRRADIATE, 0)
|
||||
|
||||
/obj/effect/accelerated_particle/proc/move()
|
||||
/obj/effect/accelerated_particle/proc/propagate()
|
||||
addtimer(CALLBACK(src, .proc/propagate), 1)
|
||||
if(!step(src,dir))
|
||||
forceMove(get_step(src, dir))
|
||||
movement_range--
|
||||
if(movement_range == 0)
|
||||
qdel(src)
|
||||
else
|
||||
sleep(speed)
|
||||
move()
|
||||
@@ -98,7 +98,7 @@
|
||||
return
|
||||
if(!chambered)
|
||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
||||
if(cell.charge >= shot.e_cost) //if there's enough power in the cell cell...
|
||||
if(cell.charge >= shot.e_cost) //if there's enough power in the WEAPON'S cell...
|
||||
chambered = shot //...prepare a new shot based on the current ammo type selected
|
||||
if(!chambered.BB)
|
||||
chambered.newshot()
|
||||
@@ -111,6 +111,11 @@
|
||||
chambered = null //either way, released the prepared shot
|
||||
newshot()
|
||||
|
||||
/obj/item/gun/energy/process_fire(atom/target, mob/living/user, message = 1, params, zone_override, bonus_spread = 0)
|
||||
if(!chambered && can_shoot())
|
||||
process_chamber()
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/energy/proc/select_fire(mob/living/user)
|
||||
select++
|
||||
if(select > ammo_type.len)
|
||||
@@ -193,6 +198,9 @@
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/energy/proc/robocharge()
|
||||
if(cell.charge == cell.maxcharge)
|
||||
// No point in recharging a weapon's cell that is already at 100%. That would just waste borg cell power for no reason.
|
||||
return
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R && R.cell)
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
I.receive_damage(-5, FALSE)
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
E.mend_fracture()
|
||||
E.internal_bleeding = FALSE
|
||||
M.SetEyeBlind(0, FALSE)
|
||||
M.CureNearsighted(FALSE)
|
||||
M.CureBlind(FALSE)
|
||||
|
||||
@@ -1192,15 +1192,16 @@
|
||||
taste_description = "motor oil"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/M)
|
||||
if(!M.isSynthetic())
|
||||
if(!(M.dna.species.reagent_tag & PROCESS_SYN))
|
||||
holder.remove_reagent(id, 3.6) //gets removed from organics very fast
|
||||
if(prob(25))
|
||||
holder.remove_reagent(id, 15)
|
||||
M.fakevomit()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
|
||||
if(M.isSynthetic())
|
||||
if(M.dna.species.reagent_tag & PROCESS_SYN)
|
||||
return
|
||||
if(method == REAGENT_INGEST)
|
||||
to_chat(M, pick("<span class = 'danger'>That was awful!</span>", "<span class = 'danger'>Yuck!</span>"))
|
||||
|
||||
@@ -525,6 +525,32 @@
|
||||
M.Drowsy(10)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/cbd
|
||||
name = "Cannabidiol"
|
||||
id = "cbd"
|
||||
description = "A non-psychoactive phytocannabinoid extracted from the cannabis plant."
|
||||
reagent_state = LIQUID
|
||||
color = "#00e100"
|
||||
taste_description = "relaxation"
|
||||
|
||||
/datum/reagent/cbd/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(prob(5))
|
||||
M.emote(pick("hsigh", "yawn"))
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='notice'>[pick("You feel peaceful.", "You breathe softly.", "You feel chill.", "You vibe.")]</span>")
|
||||
if(prob(10))
|
||||
M.AdjustConfused(-5)
|
||||
update_flags |= M.SetWeakened(0, FALSE)
|
||||
if(volume >= 70 && prob(25))
|
||||
if(M.reagents.has_reagent("thc") <= 20)
|
||||
M.Drowsy(10)
|
||||
if(prob(25))
|
||||
update_flags |= M.adjustBruteLoss(-2, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-2, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
|
||||
/datum/reagent/fliptonium
|
||||
name = "Fliptonium"
|
||||
id = "fliptonium"
|
||||
|
||||
@@ -872,14 +872,6 @@
|
||||
build_path = /obj/item/assembly/mousetrap
|
||||
category = list("initial", "Miscellaneous")
|
||||
|
||||
/datum/design/videocam
|
||||
name = "Video Camera"
|
||||
id = "videocam"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 120, MAT_GLASS = 60)
|
||||
build_path = /obj/item/videocam
|
||||
category = list("initial", "Miscellaneous")
|
||||
|
||||
/datum/design/logic_board
|
||||
name = "Logic Circuit"
|
||||
id = "logic_board"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
shuttleId = "specops"
|
||||
possible_destinations = "specops_home;specops_away;specops_custom"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
|
||||
/obj/machinery/computer/camera_advanced/shuttle_docker/ert
|
||||
name = "specops navigation computer"
|
||||
@@ -16,6 +17,7 @@
|
||||
x_offset = 0
|
||||
y_offset = 0
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
access_tcomms = FALSE
|
||||
access_construction = FALSE
|
||||
access_mining = FALSE
|
||||
@@ -9,6 +9,7 @@
|
||||
shuttleId = "syndicate"
|
||||
possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom"
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
flags = NODECONSTRUCT
|
||||
var/challenge = FALSE
|
||||
var/moved = FALSE
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
shuttleId = "skipjack"
|
||||
possible_destinations = "skipjack_away;skipjack_ne;skipjack_nw;skipjack_se;skipjack_sw;skipjack_z5;skipjack_custom"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
|
||||
/obj/machinery/computer/camera_advanced/shuttle_docker/vox
|
||||
name = "skipjack navigation computer"
|
||||
@@ -16,4 +17,5 @@
|
||||
x_offset = -10
|
||||
y_offset = -10
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
access_derelict = TRUE
|
||||
|
||||
@@ -39,9 +39,9 @@
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop
|
||||
name = "Anti-drop implant"
|
||||
desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle."
|
||||
var/active = 0
|
||||
var/l_hand_ignore = 0
|
||||
var/r_hand_ignore = 0
|
||||
var/active = FALSE
|
||||
var/l_hand_ignore = FALSE
|
||||
var/r_hand_ignore = FALSE
|
||||
var/obj/item/l_hand_obj = null
|
||||
var/obj/item/r_hand_obj = null
|
||||
implant_color = "#DE7E00"
|
||||
@@ -56,17 +56,17 @@
|
||||
r_hand_obj = owner.r_hand
|
||||
if(l_hand_obj)
|
||||
if(owner.l_hand.flags & NODROP)
|
||||
l_hand_ignore = 1
|
||||
l_hand_ignore = TRUE
|
||||
else
|
||||
owner.l_hand.flags |= NODROP
|
||||
l_hand_ignore = 0
|
||||
l_hand_ignore = FALSE
|
||||
|
||||
if(r_hand_obj)
|
||||
if(owner.r_hand.flags & NODROP)
|
||||
r_hand_ignore = 1
|
||||
r_hand_ignore = TRUE
|
||||
else
|
||||
owner.r_hand.flags |= NODROP
|
||||
r_hand_ignore = 0
|
||||
r_hand_ignore = FALSE
|
||||
|
||||
if(!l_hand_obj && !r_hand_obj)
|
||||
to_chat(owner, "<span class='notice'>You are not holding any items, your hands relax...</span>")
|
||||
@@ -102,12 +102,15 @@
|
||||
A = pick(oview(range))
|
||||
L_item.throw_at(A, range, 2)
|
||||
to_chat(owner, "<span class='notice'>Your left arm spasms and throws the [L_item.name]!</span>")
|
||||
l_hand_obj = null
|
||||
if(R_item)
|
||||
A = pick(oview(range))
|
||||
R_item.throw_at(A, range, 2)
|
||||
to_chat(owner, "<span class='notice'>Your right arm spasms and throws the [R_item.name]!</span>")
|
||||
r_hand_obj = null
|
||||
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items()
|
||||
active = FALSE
|
||||
if(!l_hand_ignore && l_hand_obj in owner.contents)
|
||||
l_hand_obj.flags ^= NODROP
|
||||
if(!r_hand_ignore && r_hand_obj in owner.contents)
|
||||
|
||||
Reference in New Issue
Block a user