mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-07-21 20:12:31 +01:00
Merge branch 'master' of https://github.com/VOREStation/Polaris into aro-sync-05-25-2018
# Conflicts: # code/__defines/misc.dm # code/controllers/master_controller.dm # code/game/machinery/computer3/computers/card.dm # code/game/objects/items/devices/communicator/UI.dm # code/game/objects/items/stacks/medical.dm # code/game/objects/structures/signs.dm # code/modules/admin/admin_verbs.dm # code/modules/client/client defines.dm # code/modules/client/client procs.dm # code/modules/clothing/clothing.dm # code/modules/clothing/under/accessories/holster.dm # code/modules/events/radiation_storm.dm # code/modules/mining/machine_processing.dm # code/modules/mob/living/carbon/human/species/station/prometheans.dm # code/modules/mob/living/living.dm # code/modules/mob/living/simple_animal/animals/bear.dm # code/modules/mob/living/simple_animal/animals/cat.dm # code/modules/mob/living/simple_animal/animals/parrot.dm # code/modules/mob/mob.dm # code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm # code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm # code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm # code/modules/reagents/reagent_dispenser.dm # config/example/config.txt # html/changelogs/.all_changelog.yml # interface/skin.dmf # maps/southern_cross/southern_cross-1.dmm # vorestation.dme
This commit is contained in:
@@ -52,6 +52,11 @@ proc/admin_notice(var/message, var/rights)
|
||||
else
|
||||
body += " \[<A href='?src=\ref[src];revive=\ref[M]'>Heal</A>\] "
|
||||
|
||||
if(M.client)
|
||||
body += "<br><b>First connection:</b> [M.client.player_age] days ago"
|
||||
body += "<br><b>BYOND account created:</b> [M.client.account_join_date]"
|
||||
body += "<br><b>BYOND account age (days):</b> [M.client.account_age]"
|
||||
|
||||
body += {"
|
||||
<br><br>\[
|
||||
<a href='?_src_=vars;Vars=\ref[M]'>VV</a> -
|
||||
|
||||
@@ -178,7 +178,8 @@ var/list/admin_verbs_server = list(
|
||||
/client/proc/nanomapgen_DumpImage,
|
||||
/client/proc/modify_server_news,
|
||||
/client/proc/recipe_dump,
|
||||
/client/proc/panicbunker
|
||||
/client/proc/panicbunker,
|
||||
/client/proc/paranoia_logging
|
||||
)
|
||||
|
||||
var/list/admin_verbs_debug = list(
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
if(!.)
|
||||
return
|
||||
|
||||
for(var/obj/machinery/light/L in world)
|
||||
for(var/obj/machinery/light/L in machines)
|
||||
L.fix()
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
if(!.)
|
||||
return
|
||||
|
||||
for(var/obj/item/clothing/O in world)
|
||||
for(var/obj/item/clothing/O in all_clothing)
|
||||
qdel(O)
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
if(!.)
|
||||
return
|
||||
|
||||
for(var/obj/item/clothing/under/O in world)
|
||||
for(var/obj/item/clothing/under/O in all_clothing)
|
||||
qdel(O)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
return
|
||||
|
||||
gravity_is_on = !gravity_is_on
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
A.gravitychange(gravity_is_on,A)
|
||||
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
|
||||
@@ -85,57 +85,57 @@
|
||||
else
|
||||
var/f2 = text2path(f)
|
||||
if(text_starts_with(f, "/mob"))
|
||||
for(var/mob/m in world)
|
||||
for(var/mob/m in mob_list)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/turf/space"))
|
||||
for(var/turf/space/m in world)
|
||||
for(var/turf/space/m in turfs)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/turf/simulated"))
|
||||
for(var/turf/simulated/m in world)
|
||||
for(var/turf/simulated/m in turfs)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/turf/unsimulated"))
|
||||
for(var/turf/unsimulated/m in world)
|
||||
for(var/turf/unsimulated/m in turfs)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/turf"))
|
||||
for(var/turf/m in world)
|
||||
for(var/turf/m in turfs)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/area"))
|
||||
for(var/area/m in world)
|
||||
for(var/area/m in all_areas)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/obj/item"))
|
||||
for(var/obj/item/m in world)
|
||||
for(var/obj/item/m in all_items)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/obj/machinery"))
|
||||
for(var/obj/machinery/m in world)
|
||||
for(var/obj/machinery/m in machines)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/obj"))
|
||||
for(var/obj/m in world)
|
||||
for(var/obj/m in all_objs)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
|
||||
else if(text_starts_with(f, "/atom"))
|
||||
for(var/atom/m in world)
|
||||
for(var/atom/m in all_atoms)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
/*
|
||||
else
|
||||
for(var/datum/m in world)
|
||||
for(var/datum/m in nope)
|
||||
if(istype(m, f2))
|
||||
from_objs += m
|
||||
*/
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
/client/proc/jumptoturf(var/turf/T in world)
|
||||
/client/proc/jumptoturf(var/turf/T in turfs)
|
||||
set name = "Jump to Turf"
|
||||
set category = "Admin"
|
||||
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
|
||||
|
||||
@@ -12,23 +12,23 @@
|
||||
|
||||
usr << "Checking for disconnected pipes..."
|
||||
//all plumbing - yes, some things might get stated twice, doesn't matter.
|
||||
for (var/obj/machinery/atmospherics/plumbing in world)
|
||||
for (var/obj/machinery/atmospherics/plumbing in machines)
|
||||
if (plumbing.nodealert)
|
||||
usr << "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])"
|
||||
|
||||
//Manifolds
|
||||
for (var/obj/machinery/atmospherics/pipe/manifold/pipe in world)
|
||||
for (var/obj/machinery/atmospherics/pipe/manifold/pipe in machines)
|
||||
if (!pipe.node1 || !pipe.node2 || !pipe.node3)
|
||||
usr << "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])"
|
||||
|
||||
//Pipes
|
||||
for (var/obj/machinery/atmospherics/pipe/simple/pipe in world)
|
||||
for (var/obj/machinery/atmospherics/pipe/simple/pipe in machines)
|
||||
if (!pipe.node1 || !pipe.node2)
|
||||
usr << "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])"
|
||||
|
||||
usr << "Checking for overlapping pipes..."
|
||||
next_turf:
|
||||
for(var/turf/T in world)
|
||||
for(var/turf/T in turfs)
|
||||
for(var/dir in cardinal)
|
||||
var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0)
|
||||
for(var/obj/machinery/atmospherics/pipe in T)
|
||||
|
||||
@@ -173,96 +173,6 @@
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/*
|
||||
/client/proc/cmd_admin_monkeyize(var/mob/M in world)
|
||||
set category = "Fun"
|
||||
set name = "Make Monkey"
|
||||
|
||||
if(!ticker)
|
||||
alert("Wait until the game starts")
|
||||
return
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/target = M
|
||||
log_admin("[key_name(src)] is attempting to monkeyize [M.key].")
|
||||
spawn(10)
|
||||
target.monkeyize()
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/client/proc/cmd_admin_changelinginize(var/mob/M in world)
|
||||
set category = "Fun"
|
||||
set name = "Make Changeling"
|
||||
|
||||
if(!ticker)
|
||||
alert("Wait until the game starts")
|
||||
return
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
log_admin("[key_name(src)] has made [M.key] a changeling.")
|
||||
spawn(10)
|
||||
M.absorbed_dna[M.real_name] = M.dna.Clone()
|
||||
M.make_changeling()
|
||||
if(M.mind)
|
||||
M.mind.special_role = "Changeling"
|
||||
else
|
||||
alert("Invalid mob")
|
||||
*/
|
||||
/*
|
||||
/client/proc/cmd_admin_abominize(var/mob/M in world)
|
||||
set category = null
|
||||
set name = "Make Abomination"
|
||||
|
||||
usr << "Ruby Mode disabled. Command aborted."
|
||||
return
|
||||
if(!ticker)
|
||||
alert("Wait until the game starts.")
|
||||
return
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
log_admin("[key_name(src)] has made [M.key] an abomination.")
|
||||
|
||||
// spawn(10)
|
||||
// M.make_abomination()
|
||||
|
||||
*/
|
||||
/*
|
||||
/client/proc/make_cultist(var/mob/M in world) // -- TLE, modified by Urist
|
||||
set category = "Fun"
|
||||
set name = "Make Cultist"
|
||||
set desc = "Makes target a cultist"
|
||||
if(!cultwords["travel"])
|
||||
runerandom()
|
||||
if(M)
|
||||
if(M.mind in ticker.mode.cult)
|
||||
return
|
||||
else
|
||||
if(alert("Spawn that person a tome?",,"Yes","No")=="Yes")
|
||||
M << "<font color='red'>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie. A tome, a message from your new master, appears on the ground.</font>"
|
||||
new /obj/item/weapon/book/tome(M.loc)
|
||||
else
|
||||
M << "<font color='red'>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</font>"
|
||||
var/glimpse=pick("1","2","3","4","5","6","7","8")
|
||||
switch(glimpse)
|
||||
if("1")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["travel"]] is travel...</font>"
|
||||
if("2")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["blood"]] is blood...</font>"
|
||||
if("3")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["join"]] is join...</font>"
|
||||
if("4")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["hell"]] is Hell...</font>"
|
||||
if("5")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["destroy"]] is destroy...</font>"
|
||||
if("6")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["technology"]] is technology...</font>"
|
||||
if("7")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["self"]] is self...</font>"
|
||||
if("8")
|
||||
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["see"]] is see...</font>"
|
||||
|
||||
if(M.mind)
|
||||
M.mind.special_role = "Cultist"
|
||||
ticker.mode.cult += M.mind
|
||||
src << "Made [M] a cultist."
|
||||
*/
|
||||
|
||||
//TODO: merge the vievars version into this or something maybe mayhaps
|
||||
/client/proc/cmd_debug_del_all()
|
||||
@@ -273,7 +183,7 @@
|
||||
var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/observer/dead, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
|
||||
var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked
|
||||
if(hsbitem)
|
||||
for(var/atom/O in world)
|
||||
for(var/atom/O in all_atoms)
|
||||
if(istype(O, hsbitem))
|
||||
qdel(O)
|
||||
log_admin("[key_name(src)] has deleted all instances of [hsbitem].")
|
||||
@@ -431,41 +341,41 @@
|
||||
var/list/areas_with_intercom = list()
|
||||
var/list/areas_with_camera = list()
|
||||
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
if(!(A.type in areas_all))
|
||||
areas_all.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/power/apc/APC in world)
|
||||
for(var/obj/machinery/power/apc/APC in machines)
|
||||
var/area/A = get_area(APC)
|
||||
if(A && !(A.type in areas_with_APC))
|
||||
areas_with_APC.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/alarm/alarm in world)
|
||||
for(var/obj/machinery/alarm/alarm in machines)
|
||||
var/area/A = get_area(alarm)
|
||||
if(A && !(A.type in areas_with_air_alarm))
|
||||
areas_with_air_alarm.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/requests_console/RC in world)
|
||||
for(var/obj/machinery/requests_console/RC in machines)
|
||||
var/area/A = get_area(RC)
|
||||
if(A && !(A.type in areas_with_RC))
|
||||
areas_with_RC.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/light/L in world)
|
||||
for(var/obj/machinery/light/L in machines)
|
||||
var/area/A = get_area(L)
|
||||
if(A && !(A.type in areas_with_light))
|
||||
areas_with_light.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/light_switch/LS in world)
|
||||
for(var/obj/machinery/light_switch/LS in machines)
|
||||
var/area/A = get_area(LS)
|
||||
if(A && !(A.type in areas_with_LS))
|
||||
areas_with_LS.Add(A.type)
|
||||
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
for(var/obj/item/device/radio/intercom/I in machines)
|
||||
var/area/A = get_area(I)
|
||||
if(A && !(A.type in areas_with_intercom))
|
||||
areas_with_intercom.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/camera/C in world)
|
||||
for(var/obj/machinery/camera/C in machines)
|
||||
var/area/A = get_area(C)
|
||||
if(A && !(A.type in areas_with_camera))
|
||||
areas_with_camera.Add(A.type)
|
||||
@@ -546,31 +456,31 @@
|
||||
if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
for(var/obj/machinery/power/emitter/E in world)
|
||||
for(var/obj/machinery/power/emitter/E in machines)
|
||||
if(istype(get_area(E), /area/space))
|
||||
E.anchored = TRUE
|
||||
E.state = 2
|
||||
E.connect_to_network()
|
||||
E.active = TRUE
|
||||
for(var/obj/machinery/field_generator/F in world)
|
||||
for(var/obj/machinery/field_generator/F in machines)
|
||||
if(istype(get_area(F), /area/space))
|
||||
F.Varedit_start = 1
|
||||
for(var/obj/machinery/power/grounding_rod/GR in world)
|
||||
for(var/obj/machinery/power/grounding_rod/GR in machines)
|
||||
GR.anchored = TRUE
|
||||
GR.update_icon()
|
||||
for(var/obj/machinery/power/tesla_coil/TC in world)
|
||||
for(var/obj/machinery/power/tesla_coil/TC in machines)
|
||||
TC.anchored = TRUE
|
||||
TC.update_icon()
|
||||
for(var/obj/structure/particle_accelerator/PA in world)
|
||||
for(var/obj/structure/particle_accelerator/PA in machines)
|
||||
PA.anchored = TRUE
|
||||
PA.construction_state = 3
|
||||
PA.update_icon()
|
||||
for(var/obj/machinery/particle_accelerator/PA in world)
|
||||
for(var/obj/machinery/particle_accelerator/PA in machines)
|
||||
PA.anchored = TRUE
|
||||
PA.construction_state = 3
|
||||
PA.update_icon()
|
||||
|
||||
for(var/obj/machinery/power/rad_collector/Rad in world)
|
||||
for(var/obj/machinery/power/rad_collector/Rad in machines)
|
||||
if(Rad.anchored)
|
||||
if(!Rad.P)
|
||||
var/obj/item/weapon/tank/phoron/Phoron = new/obj/item/weapon/tank/phoron(Rad)
|
||||
@@ -597,7 +507,7 @@
|
||||
var/found_the_pump = 0
|
||||
var/obj/machinery/power/supermatter/SM
|
||||
|
||||
for(var/obj/machinery/M in world)
|
||||
for(var/obj/machinery/M in machines)
|
||||
if(!M)
|
||||
continue
|
||||
if(!M.loc)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
var/largest_click_time = 0
|
||||
var/mob/largest_move_mob = null
|
||||
var/mob/largest_click_mob = null
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if(!M.client)
|
||||
continue
|
||||
if(M.next_move >= largest_move_time)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
unsorted_overlays |= gas_data.tile_overlay[id]
|
||||
|
||||
|
||||
for(var/turf/simulated/T in world)
|
||||
for(var/turf/simulated/T in turfs)
|
||||
T.air = null
|
||||
T.overlays.Remove(unsorted_overlays)
|
||||
T.zone = null
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
var/camera_range_display_status = 0
|
||||
var/intercom_range_display_status = 0
|
||||
|
||||
GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
|
||||
|
||||
/obj/effect/debugging/camera_range
|
||||
icon = 'icons/480x480.dmi'
|
||||
icon_state = "25percent"
|
||||
@@ -54,7 +56,7 @@ var/intercom_range_display_status = 0
|
||||
|
||||
|
||||
|
||||
for(var/obj/effect/debugging/camera_range/C in world)
|
||||
for(var/obj/effect/debugging/camera_range/C in all_debugging_effects)
|
||||
qdel(C)
|
||||
|
||||
if(camera_range_display_status)
|
||||
@@ -113,11 +115,11 @@ var/intercom_range_display_status = 0
|
||||
else
|
||||
intercom_range_display_status = 1
|
||||
|
||||
for(var/obj/effect/debugging/marker/M in world)
|
||||
for(var/obj/effect/debugging/marker/M in all_debugging_effects)
|
||||
qdel(M)
|
||||
|
||||
if(intercom_range_display_status)
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
for(var/obj/item/device/radio/intercom/I in machines)
|
||||
for(var/turf/T in orange(7,I))
|
||||
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
|
||||
if (!(F in view(7,I.loc)))
|
||||
@@ -295,7 +297,7 @@ var/list/debug_verbs = list (
|
||||
|
||||
var/list/atom/atom_list = list()
|
||||
|
||||
for(var/atom/A in world)
|
||||
for(var/atom/A in all_atoms)
|
||||
if(istype(A,type_path))
|
||||
var/atom/B = A
|
||||
while(!(isturf(B.loc)))
|
||||
@@ -331,7 +333,7 @@ var/list/debug_verbs = list (
|
||||
|
||||
var/count = 0
|
||||
|
||||
for(var/atom/A in world)
|
||||
for(var/atom/A in all_atoms)
|
||||
if(istype(A,type_path))
|
||||
count++
|
||||
/*
|
||||
|
||||
@@ -139,12 +139,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -155,12 +155,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -179,12 +179,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
else
|
||||
@@ -194,12 +194,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if ( istype(A , O.type) )
|
||||
if(variable=="light_range")
|
||||
A.set_light(new_value)
|
||||
@@ -231,7 +231,7 @@
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if ( istype(A , O.type) )
|
||||
if(variable=="light_range")
|
||||
A.set_light(new_value)
|
||||
@@ -248,7 +248,7 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if (A.type == O.type)
|
||||
if(variable=="light_range")
|
||||
A.set_light(new_value)
|
||||
@@ -256,7 +256,7 @@
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if (A.type == O.type)
|
||||
if(variable=="light_range")
|
||||
A.set_light(new_value)
|
||||
@@ -275,12 +275,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
else
|
||||
@@ -290,12 +290,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -311,12 +311,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O.type, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O.type, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
else
|
||||
@@ -326,12 +326,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O.type, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O.type, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -346,12 +346,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if ( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -362,12 +362,12 @@
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
for(var/obj/A in all_objs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
for(var/turf/A in turfs)
|
||||
if (A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
|
||||
@@ -1,15 +1,31 @@
|
||||
/client/proc/panicbunker()
|
||||
set category = "Server"
|
||||
set name = "Toggle Panic Bunker"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if (!config.sql_enabled)
|
||||
to_chat(usr, "<span class='adminnotice'>The Database is not enabled!</span>")
|
||||
return
|
||||
|
||||
config.panic_bunker = (!config.panic_bunker)
|
||||
|
||||
log_admin("[key_name(usr)] has toggled the Panic Bunker, it is now [(config.panic_bunker?"on":"off")]")
|
||||
message_admins("[key_name_admin(usr)] has toggled the Panic Bunker, it is now [(config.panic_bunker?"enabled":"disabled")].")
|
||||
log_and_message_admins("[key_name(usr)] has toggled the Panic Bunker, it is now [(config.panic_bunker?"on":"off")]")
|
||||
if (config.panic_bunker && (!dbcon || !dbcon.IsConnected()))
|
||||
message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.")
|
||||
feedback_add_details("admin_verb","PANIC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/paranoia_logging()
|
||||
set category = "Server"
|
||||
set name = "New Player Warnings"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
config.paranoia_logging = (!config.paranoia_logging)
|
||||
|
||||
log_and_message_admins("[key_name(usr)] has toggled Paranoia Logging, it is now [(config.paranoia_logging?"on":"off")]")
|
||||
if (config.paranoia_logging && (!dbcon || !dbcon.IsConnected()))
|
||||
message_admins("The Database is not connected! Paranoia logging will not be able to give 'player age' (time since first connection) warnings, only Byond account warnings.")
|
||||
feedback_add_details("admin_verb","PARLOG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -54,12 +54,12 @@ var/list/sounds_cache = list()
|
||||
set name = "Cuban Pete Time"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1)
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << 'cubanpetetime.ogg'
|
||||
|
||||
for(var/mob/living/carbon/human/CP in world)
|
||||
for(var/mob/living/carbon/human/CP in human_mob_list)
|
||||
if(CP.real_name=="Cuban Pete" && CP.key!="Rosham")
|
||||
CP << "Your body can't contain the rhumba beat"
|
||||
CP.gib()
|
||||
@@ -70,7 +70,7 @@ var/list/sounds_cache = list()
|
||||
set name = "Banana Phone"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1)
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << 'bananaphone.ogg'
|
||||
@@ -81,7 +81,7 @@ client/proc/space_asshole()
|
||||
set name = "Space Asshole"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1)
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << 'sound/music/space_asshole.ogg'
|
||||
@@ -92,7 +92,7 @@ client/proc/honk_theme()
|
||||
set name = "Honk"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1)
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << 'honk_theme.ogg'*/
|
||||
|
||||
@@ -219,7 +219,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
|
||||
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
if(show_log == "Yes")
|
||||
command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
|
||||
command_announcement.Announce("Ion storm detected near \the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
|
||||
|
||||
IonStorm(0)
|
||||
feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -532,7 +532,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
if(show_log == "Yes")
|
||||
command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
|
||||
command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg')
|
||||
feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list)
|
||||
@@ -714,7 +714,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
switch(alert("How would you like to ban someone today?", "Manual Ban", "Key List", "Enter Manually", "Cancel"))
|
||||
if("Key List")
|
||||
var/list/keys = list()
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
keys += M.client
|
||||
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in keys
|
||||
if(!selection)
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
switch(action_type)
|
||||
if("Strict type")
|
||||
var/i = 0
|
||||
for(var/obj/Obj in world)
|
||||
for(var/obj/Obj in all_objs)
|
||||
if(Obj.type == O_type)
|
||||
i++
|
||||
qdel(Obj)
|
||||
@@ -195,7 +195,7 @@
|
||||
message_admins("<span class='notice'>[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted)</span>")
|
||||
if("Type and subtypes")
|
||||
var/i = 0
|
||||
for(var/obj/Obj in world)
|
||||
for(var/obj/Obj in all_objs)
|
||||
if(istype(Obj,O_type))
|
||||
i++
|
||||
qdel(Obj)
|
||||
|
||||
@@ -117,14 +117,6 @@ Code:
|
||||
signal.data["message"] = "ACTIVATE"
|
||||
radio_connection.post_signal(src, signal)
|
||||
return
|
||||
/*
|
||||
for(var/obj/item/device/assembly/signaler/S in world)
|
||||
if(!S) continue
|
||||
if(S == src) continue
|
||||
if((S.frequency == src.frequency) && (S.code == src.code))
|
||||
spawn(0)
|
||||
if(S) S.pulse(0)
|
||||
return 0*/
|
||||
|
||||
|
||||
/obj/item/device/assembly/signaler/pulse(var/radio = 0)
|
||||
|
||||
@@ -63,7 +63,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
|
||||
|
||||
var/combined_name = "[owner] [prefix] [shipname]"
|
||||
var/alt_atc_names = list("[using_map.station_short] TraCon","[using_map.station_short] Control","[using_map.station_short] STC","[using_map.station_short] Airspace")
|
||||
var/wrong_atc_names = list("Sol Command","Orion Control", "[using_map.dock_name]")
|
||||
var/wrong_atc_names = list("Sol Command","New Reykjavik StarCon", "[using_map.dock_name]")
|
||||
var/mission_noun = list("flight","mission","route")
|
||||
var/request_verb = list("requesting","calling for","asking for")
|
||||
|
||||
|
||||
@@ -31,7 +31,15 @@
|
||||
"Hawk",
|
||||
"Haste",
|
||||
"Radiant",
|
||||
"Luminous"
|
||||
"Luminous",
|
||||
"Princess of Sol",
|
||||
"King of the Mountain",
|
||||
"Words and Changes",
|
||||
"Katerina's Silhouette",
|
||||
"Castle of Water",
|
||||
"Jade Leviathan",
|
||||
"Sword of Destiny",
|
||||
"Ishtar's Grace"
|
||||
)
|
||||
var/list/destination_names = list() //Names of static holdings that the organization's ships visit regularly.
|
||||
var/autogenerate_destination_names = TRUE
|
||||
@@ -44,7 +52,7 @@
|
||||
"Sol", "Alpha Centauri", "Tau Ceti", "Zhu Que", "Oasis", "Vir", "Gavel", "Ganesha",
|
||||
"Saint Columbia", "Altair", "Sidhe", "New Ohio", "Parvati", "Mahi-Mahi", "Nyx", "New Seoul",
|
||||
"Kess-Gendar", "Raphael", "Phact", "Altair", "El", "Eutopia", "Qerr'valis", "Qerrna-Lakirr", "Rarkajar", "Thoth", "Jahan's Post", "Kauq'xum", "Silk", "New Singapore", "Stove", "Viola", "Love", "Isavau's Gamble" )
|
||||
var/list/destination_types = list("dockyard", "station", "vessel", "waystation", "telecommunications satellite", "spaceport", "distress beacon", "anomaly", "colony", "outpost")
|
||||
var/list/destination_types = list("dockyard", "station", "vessel", "waystation", "telecommunications satellite", "spaceport", "anomaly", "colony", "outpost")
|
||||
while(i)
|
||||
destination_names.Add("a [pick(destination_types)] in [pick(star_names)]")
|
||||
i--
|
||||
@@ -69,10 +77,10 @@
|
||||
for newly tested posibrains to remain with the company."
|
||||
history = "" // To be written someday.
|
||||
work = "research giant"
|
||||
headquarters = "Luna"
|
||||
headquarters = "Luna, Sol"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("NSV" = "exploration", "NTV" = "hauling", "NDV" = "patrol", "NRV" = "emergency response")
|
||||
ship_prefixes = list("NSV" = "exploration", "NTV" = "hauling", "NDV" = "patrol", "NRV" = "emergency response", "NDV" = "asset protection")
|
||||
//Scientist naming scheme
|
||||
ship_names = list(
|
||||
"Bardeen",
|
||||
@@ -99,7 +107,12 @@
|
||||
"Aristotle",
|
||||
"Von Braun",
|
||||
"Kaku",
|
||||
"Oppenheimer"
|
||||
"Oppenheimer",
|
||||
"Renwick",
|
||||
"Hubble",
|
||||
"Alcubierre",
|
||||
"Robineau",
|
||||
"Glass"
|
||||
)
|
||||
// Note that the current station being used will be pruned from this list upon being instantiated
|
||||
destination_names = list(
|
||||
@@ -130,14 +143,14 @@
|
||||
desc = "Hephaestus Industries is the largest supplier of arms, ammunition, and small millitary vehicles in Sol space. \
|
||||
Hephaestus products have a reputation for reliability, and the corporation itself has a noted tendency to stay removed \
|
||||
from corporate politics. They enforce their neutrality with the help of a fairly large asset-protection contingent which \
|
||||
prevents any contracting polities from using their own materiel against them. SolGov itself is one of Hephastus’ largest \
|
||||
prevents any contracting polities from using their own materiel against them. SolGov itself is one of Hephaestus' largest \
|
||||
bulk contractors owing to the above factors."
|
||||
history = ""
|
||||
work = "arms manufacturer"
|
||||
headquarters = ""
|
||||
headquarters = "Luna, Sol"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("HTV" = "freight", "HTV" = "munitions resupply")
|
||||
ship_prefixes = list("HTV" = "freight", "HLV" = "munitions resupply", "HDV" = "asset protection", "HDV" = "preemptive deployment")
|
||||
//War God/Soldier Theme
|
||||
ship_names = list(
|
||||
"Ares",
|
||||
@@ -154,7 +167,23 @@
|
||||
"Annan",
|
||||
"Chi Yu",
|
||||
"Shiva",
|
||||
"Tyr"
|
||||
"Tyr",
|
||||
"Nobunaga",
|
||||
"Xerxes",
|
||||
"Alexander",
|
||||
"McArthur",
|
||||
"Samson",
|
||||
"Oya",
|
||||
"Nemain",
|
||||
"Caesar",
|
||||
"Augustus",
|
||||
"Sekhmet",
|
||||
"Ku",
|
||||
"Indra",
|
||||
"Innana",
|
||||
"Ishtar",
|
||||
"Qamaits",
|
||||
"'Oro",
|
||||
)
|
||||
destination_names = list(
|
||||
"a SolGov dockyard on Luna",
|
||||
@@ -170,15 +199,15 @@
|
||||
Despite the suspicion and prejudice leveled at them for their alien origin, Vey-Med has obtained market dominance in \
|
||||
the sale of medical equipment-- from surgical tools to large medical devices to the Oddyseus trauma response mecha \
|
||||
and everything in between. Their equipment tends to be top-of-the-line, most obviously shown by their incredibly \
|
||||
human-like FBP designs. Vey’s rise to stardom came from their introduction of ressurective cloning, although in \
|
||||
recent years they’ve been forced to diversify as their patents expired and NanoTrasen-made medications became \
|
||||
human-like FBP designs. Vey's rise to stardom came from their introduction of ressurective cloning, although in \
|
||||
recent years they've been forced to diversify as their patents expired and NanoTrasen-made medications became \
|
||||
essential to modern cloning."
|
||||
history = ""
|
||||
work = "medical equipment supplier"
|
||||
headquarters = ""
|
||||
headquarters = "Toledo, New Ohio"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("VTV" = "transportation", "VMV" = "medical resupply")
|
||||
ship_prefixes = list("VTV" = "transportation", "VMV" = "medical resupply", "VSV" = "research mission", "VRV" = "emergency medical support")
|
||||
// Diona names
|
||||
ship_names = list(
|
||||
"Wind That Stirs The Waves",
|
||||
@@ -193,7 +222,13 @@
|
||||
"Star That Fades From View",
|
||||
"Eyes Which Turn Inwards",
|
||||
"Joy Without Which The World Would Come Undone",
|
||||
"A Thousand Thousand Planets Dangling From Branches"
|
||||
"A Thousand Thousand Planets Dangling From Branches",
|
||||
"Light Streaming Through Interminable Branches",
|
||||
"Smoke Brought Up From A Terrible Fire",
|
||||
"Light of Qerr'Valis",
|
||||
"King Xae'uoque",
|
||||
"Memory of Kel'xi",
|
||||
"Xi'Kroo's Herald"
|
||||
)
|
||||
destination_names = list(
|
||||
"a research facility in Samsara",
|
||||
@@ -207,13 +242,13 @@
|
||||
acronym = "ZH"
|
||||
desc = "Zeng-Hu is an old TSC, based in the Sol system. Until the discovery of Phoron, Zeng-Hu maintained a stranglehold \
|
||||
on the market for medications, and many household names are patentted by Zeng-Hu-- Bicaridyne, Dylovene, Tricordrizine, \
|
||||
and Dexalin all came from a Zeng-Hu medical laboratory. Zeng-Hu’s fortunes have been in decline as Nanotrasen’s near monopoly \
|
||||
on phoron research cuts into their R&D and Vey-Med’s superior medical equipment effectively decimated their own equipment \
|
||||
and Dexalin all came from a Zeng-Hu medical laboratory. Zeng-Hu's fortunes have been in decline as Nanotrasen's near monopoly \
|
||||
on phoron research cuts into their R&D and Vey-Med's superior medical equipment effectively decimated their own equipment \
|
||||
interests. The three-way rivalry between these companies for dominance in the medical field is well-known and a matter of \
|
||||
constant economic speculation."
|
||||
history = ""
|
||||
work = "pharmaceuticals company"
|
||||
headquarters = ""
|
||||
headquarters = "Earth, Sol"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("ZTV" = "transportation", "ZMV" = "medical resupply")
|
||||
@@ -226,15 +261,15 @@
|
||||
desc = "Ward-Takahashi focuses on the sale of small consumer electronics, with its computers, communicators, \
|
||||
and even mid-class automobiles a fixture of many households. Less famously, Ward-Takahashi also supplies most \
|
||||
of the AI cores on which vital control systems are mounted, and it is this branch of their industry that has \
|
||||
led to their tertiary interest in the development and sale of high-grade AI systems. Ward-Takahashi’s economies \
|
||||
of scale frequently steal market share from Nanotrasen’s high-price products, leading to a bitter rivalry in the \
|
||||
led to their tertiary interest in the development and sale of high-grade AI systems. Ward-Takahashi's economies \
|
||||
of scale frequently steal market share from Nanotrasen's high-price products, leading to a bitter rivalry in the \
|
||||
consumer electronics market."
|
||||
history = ""
|
||||
work = "electronics manufacturer"
|
||||
headquarters = ""
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("WTV" = "freight")
|
||||
ship_prefixes = list("WFV" = "freight", "WTV" = "transport", "WDV" = "asset protection")
|
||||
ship_names = list(
|
||||
"Comet",
|
||||
"Aurora",
|
||||
@@ -246,7 +281,16 @@
|
||||
"Pulsar",
|
||||
"Quark",
|
||||
"Void",
|
||||
"Asteroid"
|
||||
"Asteroid",
|
||||
"Wormhole",
|
||||
"Sunspots",
|
||||
"Supercluster",
|
||||
"Moon",
|
||||
"Anomaly",
|
||||
"Drift",
|
||||
"Stream",
|
||||
"Rift",
|
||||
"Curtain"
|
||||
)
|
||||
destination_names = list()
|
||||
|
||||
@@ -254,10 +298,10 @@
|
||||
name = "Bishop Cybernetics"
|
||||
short_name = "Bishop"
|
||||
acronym = "BC"
|
||||
desc = "Bishop’s focus is on high-class, stylish cybernetics. A favorite among transhumanists (and a bête noire for \
|
||||
desc = "Bishop's focus is on high-class, stylish cybernetics. A favorite among transhumanists (and a bête noire for \
|
||||
bioconservatives), Bishop manufactures not only prostheses but also brain augmentation, synthetic organ replacements, \
|
||||
and odds and ends like implanted wrist-watches. Their business model tends towards smaller, boutique operations, giving \
|
||||
it a reputation for high price and luxury, with Bishop cyberware often rivalling Vey-Med’s for cost. Bishop’s reputation \
|
||||
it a reputation for high price and luxury, with Bishop cyberware often rivalling Vey-Med's for cost. Bishop's reputation \
|
||||
for catering towards the interests of human augmentation enthusiasts instead of positronics have earned it ire from the \
|
||||
Positronic Rights Group and puts it in ideological (but not economic) comptetition with Morpheus Cyberkinetics."
|
||||
history = ""
|
||||
@@ -265,8 +309,10 @@
|
||||
headquarters = ""
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("BTV" = "transportation")
|
||||
destination_names = list()
|
||||
ship_prefixes = list("ITV" = "transportation", "ISV" = "research exchange") //Bishop can't afford / doesn't care enough to afford its own prefixes
|
||||
destination_names = list(
|
||||
"A medical facility in Angessa's Pearl"
|
||||
)
|
||||
|
||||
/datum/lore/organization/tsc/morpheus
|
||||
name = "Morpheus Cyberkinetics"
|
||||
@@ -279,7 +325,7 @@
|
||||
the good-will of the positronics, and the ire of those who wish to exploit them."
|
||||
history = ""
|
||||
work = "cybernetics manufacturer"
|
||||
headquarters = ""
|
||||
headquarters = "Shelf"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("MTV" = "freight")
|
||||
@@ -374,7 +420,16 @@
|
||||
"This Ship Is Spiders",
|
||||
"Legitimate Trade Vessel",
|
||||
"Please Don't Explode II",
|
||||
"Get Off the Air"
|
||||
"Get Off the Air",
|
||||
"Definitely Unsinkable",
|
||||
"We Didn't Do It!",
|
||||
"Unrelated To That Other Ship",
|
||||
"Not Reflecting The Opinons Of The Shareholders",
|
||||
"Normal Ship Name",
|
||||
"Define Offensive",
|
||||
"Tiffany",
|
||||
"My Other Ship is A Gestalt",
|
||||
"NTV HTV WTV ITV ZTV"
|
||||
)
|
||||
destination_names = list(
|
||||
"a trade outpost in Shelf"
|
||||
@@ -392,7 +447,31 @@
|
||||
headquarters = ""
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("XTV" = "hauling")
|
||||
ship_prefixes = list("XTV" = "hauling", "XFV" = "bulk transport", "XIV" = "resupply")
|
||||
destination_names = list()
|
||||
|
||||
/datum/lore/organization/tsc/mbt
|
||||
name = "Major Bill's Transportation"
|
||||
short_name = "Major Bill's"
|
||||
desc = "The most popular courier service and starliner, Major Bill's is an unassuming corporation whose greatest asset is their low cost and brand recognition. Major Bill’s is known, perhaps unfavorably, for its mascot, Major Bill, a cartoonish military figure that spouts quotable slogans. Their motto is \"With Major Bill's, you won't pay major bills!\", an earworm much of the galaxy longs to forget."
|
||||
history = ""
|
||||
work = "courier and passenger transit"
|
||||
headquarters = "Mars, Sol"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("TTV" = "transport", "TTV" = "luxury transit")
|
||||
destination_names = list()
|
||||
|
||||
/datum/lore/organization/tsc/independent
|
||||
name = "Free Traders"
|
||||
short_name = "Free Trader"
|
||||
desc = "Though less common now than they were in the decades before the Sol Economic Organization took power, independent traders remain an important part of the galactic economy, owing in no small part to protective tarrifs established by the Free Trade Union in the late twenty-forth century."
|
||||
history = ""
|
||||
work = "trade and transit"
|
||||
headquarters = "N/A"
|
||||
motto = "N/A"
|
||||
|
||||
ship_prefixes = list("IEV" = "prospecting", "IEC" = "prospecting", "IFV" = "bulk freight", "ITV" = "passenger transport", "ITC" = "just-in-time delivery")
|
||||
destination_names = list()
|
||||
|
||||
// Governments
|
||||
@@ -405,7 +484,7 @@
|
||||
comply with SifGov's legislation and regulations." // Vorestation Edit. Confederate -> Central
|
||||
history = "" // Todo like the rest of them
|
||||
work = "governing body of Sif"
|
||||
headquarters = "New Reykjavik, Sif"
|
||||
headquarters = "New Reykjavik, Sif, Vir"
|
||||
motto = ""
|
||||
autogenerate_destination_names = FALSE
|
||||
|
||||
@@ -428,7 +507,7 @@
|
||||
defacto represents humanity on the galactic stage."
|
||||
history = "" // Todo
|
||||
work = "governing polity of humanity's Confederation"
|
||||
headquarters = "Luna"
|
||||
headquarters = "Luna, Sol"
|
||||
motto = "Nil Mortalibus Ardui Est" // Latin, because latin. Says 'Nothing is too steep for mortals'.
|
||||
autogenerate_destination_names = TRUE
|
||||
|
||||
|
||||
@@ -46,9 +46,11 @@
|
||||
////////////////////////////////////
|
||||
//things that require the database//
|
||||
////////////////////////////////////
|
||||
var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days.
|
||||
var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip
|
||||
var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
|
||||
var/player_age = "(Requires database)" //So admins know why it isn't working - Used to determine how old the account is - in days.
|
||||
var/related_accounts_ip = "(Requires database)" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip
|
||||
var/related_accounts_cid = "(Requires database)" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
|
||||
var/account_join_date = "(Requires database)"
|
||||
var/account_age = "(Requires database)"
|
||||
var/list/department_hours // VOREStation Edit - Track hours of leave accured for each department.
|
||||
|
||||
preload_rsc = PRELOAD_RSC
|
||||
|
||||
@@ -164,6 +164,12 @@
|
||||
src.changes()
|
||||
|
||||
hook_vr("client_new",list(src)) //VOREStation Code
|
||||
|
||||
if(config.paranoia_logging)
|
||||
if(isnum(player_age) && player_age == 0)
|
||||
log_and_message_admins("PARANOIA: [key_name(src)] has connected here for the first time.")
|
||||
if(isnum(account_age) && account_age <= 2)
|
||||
log_and_message_admins("PARANOIA: [key_name(src)] has a very new BYOND account ([account_age] days).")
|
||||
|
||||
//////////////
|
||||
//DISCONNECT//
|
||||
@@ -220,6 +226,12 @@
|
||||
player_age = text2num(query.item[2])
|
||||
break
|
||||
|
||||
account_join_date = sanitizeSQL(findJoinDate())
|
||||
if(account_join_date && dbcon.IsConnected())
|
||||
var/DBQuery/query_datediff = dbcon.NewQuery("SELECT DATEDIFF(Now(),'[account_join_date]')")
|
||||
if(query_datediff.Execute() && query_datediff.NextRow())
|
||||
account_age = text2num(query_datediff.item[1])
|
||||
|
||||
var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM erro_player WHERE ip = '[address]'")
|
||||
query_ip.Execute()
|
||||
related_accounts_ip = ""
|
||||
@@ -372,3 +384,16 @@ client/verb/character_setup()
|
||||
set category = "Preferences"
|
||||
if(prefs)
|
||||
prefs.ShowChoices(usr)
|
||||
|
||||
/client/proc/findJoinDate()
|
||||
var/list/http = world.Export("http://byond.com/members/[ckey]?format=text")
|
||||
if(!http)
|
||||
log_world("Failed to connect to byond age check for [ckey]")
|
||||
return
|
||||
var/F = file2text(http["CONTENT"])
|
||||
if(F)
|
||||
var/regex/R = regex("joined = \"(\\d{4}-\\d{2}-\\d{2})\"")
|
||||
if(R.Find(F))
|
||||
. = R.group[1]
|
||||
else
|
||||
CRASH("Age check regex failed for [src.ckey]")
|
||||
|
||||
@@ -150,17 +150,17 @@
|
||||
/datum/gear/accessory/brown_drop_pouches
|
||||
display_name = "drop pouches, brown"
|
||||
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor", "Search and Rescue")
|
||||
|
||||
/datum/gear/accessory/black_drop_pouches
|
||||
display_name = "drop pouches, black"
|
||||
path = /obj/item/clothing/accessory/storage/black_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor", "Search and Rescue")
|
||||
|
||||
/datum/gear/accessory/white_drop_pouches
|
||||
display_name = "drop pouches, white"
|
||||
path = /obj/item/clothing/accessory/storage/white_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor", "Search and Rescue")
|
||||
|
||||
/datum/gear/accessory/fannypack
|
||||
display_name = "fannypack selection"
|
||||
@@ -239,7 +239,7 @@
|
||||
/datum/gear/accessory/stethoscope
|
||||
display_name = "stethoscope"
|
||||
path = /obj/item/clothing/accessory/stethoscope
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic", "Search and Rescue")
|
||||
|
||||
/datum/gear/accessory/locket
|
||||
display_name = "locket"
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/datum/gear/eyes/medical
|
||||
display_name = "Medical HUD (Medical)"
|
||||
path = /obj/item/clothing/glasses/hud/health
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Search and Rescue")
|
||||
|
||||
/datum/gear/eyes/medical/prescriptionmed
|
||||
display_name = "Medical HUD, prescription (Medical)"
|
||||
|
||||
@@ -440,7 +440,7 @@ datum/gear/suit/duster
|
||||
/datum/gear/suit/snowsuit/medical
|
||||
display_name = "snowsuit, medical"
|
||||
path = /obj/item/clothing/suit/storage/snowsuit/medical
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Search and Rescue")
|
||||
|
||||
/datum/gear/suit/snowsuit/science
|
||||
display_name = "snowsuit, science"
|
||||
|
||||
@@ -81,6 +81,11 @@
|
||||
path =/obj/item/weapon/storage/secure/briefcase
|
||||
cost = 2
|
||||
|
||||
/datum/gear/utility/laserpointer
|
||||
display_name = "laser pointer"
|
||||
path =/obj/item/device/laser_pointer
|
||||
cost = 2
|
||||
|
||||
/datum/gear/utility/flashlight
|
||||
display_name = "flashlight"
|
||||
path = /obj/item/device/flashlight
|
||||
@@ -147,4 +152,4 @@
|
||||
|
||||
/datum/gear/utility/umbrella/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
GLOBAL_LIST_BOILERPLATE(all_clothing, /obj/item/clothing)
|
||||
|
||||
/obj/item/clothing
|
||||
name = "clothing"
|
||||
siemens_coefficient = 0.9
|
||||
var/list/species_restricted = null //Only these species can wear this kit.
|
||||
var/gunshot_residue //Used by forensics.
|
||||
|
||||
var/list/accessories = list()
|
||||
var/list/accessories
|
||||
var/list/valid_accessory_slots
|
||||
var/list/restricted_accessory_slots
|
||||
var/list/starting_accessories
|
||||
@@ -589,8 +591,8 @@
|
||||
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
valid_accessory_slots = list("over", "armband")
|
||||
restricted_accessory_slots = list("armband")
|
||||
valid_accessory_slots = (ACCESSORY_SLOT_OVER | ACCESSORY_SLOT_ARMBAND)
|
||||
restricted_accessory_slots = (ACCESSORY_SLOT_ARMBAND)
|
||||
|
||||
/obj/item/clothing/suit/update_clothing_icon()
|
||||
if (ismob(src.loc))
|
||||
@@ -632,15 +634,26 @@
|
||||
//convenience var for defining the icon state for the overlay used when the clothing is worn.
|
||||
//Also used by rolling/unrolling.
|
||||
var/worn_state = null
|
||||
valid_accessory_slots = list("utility","armband","sheath","decor","over") //VOREStation Edit - Adds Machete Sheath
|
||||
restricted_accessory_slots = list("utility", "armband", "sheath") //VOREStation Edit - Adds Machete Sheath
|
||||
valid_accessory_slots = (\
|
||||
ACCESSORY_SLOT_UTILITY\
|
||||
|ACCESSORY_SLOT_WEAPON\
|
||||
|ACCESSORY_SLOT_ARMBAND\
|
||||
|ACCESSORY_SLOT_DECOR\
|
||||
|ACCESSORY_SLOT_MEDAL\
|
||||
|ACCESSORY_SLOT_TIE\
|
||||
|ACCESSORY_SLOT_OVER)
|
||||
restricted_accessory_slots = (\
|
||||
ACCESSORY_SLOT_UTILITY\
|
||||
|ACCESSORY_SLOT_WEAPON\
|
||||
|ACCESSORY_SLOT_ARMBAND\
|
||||
|ACCESSORY_SLOT_TIE\
|
||||
|ACCESSORY_SLOT_OVER)
|
||||
|
||||
var/icon/rolled_down_icon = 'icons/mob/uniform_rolled_down.dmi'
|
||||
var/icon/rolled_down_sleeves_icon = 'icons/mob/uniform_sleeves_rolled.dmi'
|
||||
|
||||
|
||||
/obj/item/clothing/under/attack_hand(var/mob/user)
|
||||
if(accessories && accessories.len)
|
||||
if(LAZYLEN(accessories))
|
||||
..()
|
||||
if ((ishuman(usr) || issmall(usr)) && src.loc == user)
|
||||
return
|
||||
|
||||
@@ -1,20 +1,34 @@
|
||||
/obj/item/clothing/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
||||
if(src.valid_accessory_slots && (A.slot in src.valid_accessory_slots))
|
||||
if(accessories.len && restricted_accessory_slots && (A.slot in restricted_accessory_slots))
|
||||
for(var/obj/item/clothing/accessory/AC in accessories)
|
||||
if (AC.slot == A.slot)
|
||||
return FALSE
|
||||
return TRUE
|
||||
else
|
||||
//Just no, okay
|
||||
if(!A.slot)
|
||||
return FALSE
|
||||
|
||||
//Not valid at all, not in the valid list period.
|
||||
if((valid_accessory_slots & A.slot) != A.slot)
|
||||
return FALSE
|
||||
|
||||
//Find all consumed slots
|
||||
var/consumed_slots = 0
|
||||
for(var/thing in accessories)
|
||||
var/obj/item/clothing/accessory/AC = thing
|
||||
consumed_slots |= AC.slot
|
||||
|
||||
//Mask to just consumed restricted
|
||||
var/consumed_restricted = restricted_accessory_slots & consumed_slots
|
||||
|
||||
//They share at least one bit with the restricted slots
|
||||
if(consumed_restricted & A.slot)
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/clothing/accessory))
|
||||
var/obj/item/clothing/accessory/A = I
|
||||
if(attempt_attach_accessory(A, user))
|
||||
return
|
||||
|
||||
if(accessories.len)
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attackby(I, user)
|
||||
return
|
||||
@@ -23,7 +37,7 @@
|
||||
|
||||
/obj/item/clothing/attack_hand(var/mob/user)
|
||||
//only forward to the attached accessory if the clothing is equipped (not in a storage)
|
||||
if(accessories.len && src.loc == user)
|
||||
if(LAZYLEN(accessories) && src.loc == user)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attack_hand(user)
|
||||
return
|
||||
@@ -54,7 +68,7 @@
|
||||
|
||||
/obj/item/clothing/examine(var/mob/user)
|
||||
..(user)
|
||||
if(accessories.len)
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
user << "\A [A] is attached to it."
|
||||
|
||||
@@ -65,7 +79,7 @@
|
||||
* items on spawn
|
||||
*/
|
||||
/obj/item/clothing/proc/attempt_attach_accessory(obj/item/clothing/accessory/A, mob/user)
|
||||
if(!valid_accessory_slots || !valid_accessory_slots.len)
|
||||
if(!valid_accessory_slots)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>")
|
||||
return FALSE
|
||||
@@ -83,14 +97,14 @@
|
||||
|
||||
|
||||
/obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
accessories += A
|
||||
LAZYADD(accessories,A)
|
||||
A.on_attached(src, user)
|
||||
src.verbs |= /obj/item/clothing/proc/removetie_verb
|
||||
update_accessory_slowdown()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
if(!(A in accessories))
|
||||
if(!LAZYLEN(accessories) || !(A in accessories))
|
||||
return
|
||||
|
||||
A.on_removed(user)
|
||||
@@ -109,15 +123,14 @@
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
if(!accessories.len) return
|
||||
var/obj/item/clothing/accessory/A
|
||||
if(accessories.len > 1)
|
||||
if(LAZYLEN(accessories))
|
||||
A = input("Select an accessory to remove from [src]") as null|anything in accessories
|
||||
else
|
||||
A = accessories[1]
|
||||
src.remove_accessory(usr,A)
|
||||
if(!accessories.len)
|
||||
if(A)
|
||||
remove_accessory(usr,A)
|
||||
if(!LAZYLEN(accessories))
|
||||
src.verbs -= /obj/item/clothing/proc/removetie_verb
|
||||
accessories = null
|
||||
|
||||
/obj/item/clothing/emp_act(severity)
|
||||
if(accessories.len)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name = "helmet"
|
||||
desc = "Standard Security gear. Protects the head from impacts."
|
||||
icon_state = "helmet"
|
||||
valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C)
|
||||
restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C)
|
||||
valid_accessory_slots = (ACCESSORY_SLOT_HELM_C)
|
||||
restricted_accessory_slots = (ACCESSORY_SLOT_HELM_C)
|
||||
flags = THICKMATERIAL
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
|
||||
@@ -492,8 +492,20 @@
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
item_icons = list(slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
|
||||
icon_state = "pcarrier"
|
||||
valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_C, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S, ACCESSORY_SLOT_ARMOR_M)
|
||||
restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_C, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S)
|
||||
valid_accessory_slots = (\
|
||||
ACCESSORY_SLOT_INSIGNIA\
|
||||
|ACCESSORY_SLOT_ARMOR_C\
|
||||
|ACCESSORY_SLOT_ARMOR_A\
|
||||
|ACCESSORY_SLOT_ARMOR_L\
|
||||
|ACCESSORY_SLOT_ARMOR_S\
|
||||
|ACCESSORY_SLOT_ARMOR_M)
|
||||
restricted_accessory_slots = (\
|
||||
ACCESSORY_SLOT_INSIGNIA\
|
||||
|ACCESSORY_SLOT_ARMOR_C\
|
||||
|ACCESSORY_SLOT_ARMOR_A\
|
||||
|ACCESSORY_SLOT_ARMOR_L\
|
||||
|ACCESSORY_SLOT_ARMOR_S\
|
||||
|ACCESSORY_SLOT_ARMOR_M)
|
||||
blood_overlay_type = "armor"
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/light
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "")
|
||||
slot_flags = SLOT_TIE
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/slot = "decor"
|
||||
var/slot = ACCESSORY_SLOT_DECOR
|
||||
var/obj/item/clothing/has_suit = null //the suit the tie may be attached to
|
||||
var/image/inv_overlay = null //overlay used when attached to clothing.
|
||||
var/image/mob_overlay = null
|
||||
@@ -95,6 +95,7 @@
|
||||
/obj/item/clothing/accessory/tie
|
||||
name = "blue tie"
|
||||
icon_state = "bluetie"
|
||||
slot = ACCESSORY_SLOT_TIE
|
||||
|
||||
/obj/item/clothing/accessory/tie/red
|
||||
name = "red tie"
|
||||
@@ -145,6 +146,7 @@
|
||||
name = "stethoscope"
|
||||
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
|
||||
icon_state = "stethoscope"
|
||||
slot = ACCESSORY_SLOT_TIE
|
||||
|
||||
/obj/item/clothing/accessory/stethoscope/do_surgery(mob/living/carbon/human/M, mob/living/user)
|
||||
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
|
||||
@@ -206,6 +208,7 @@
|
||||
name = "bronze medal"
|
||||
desc = "A bronze medal."
|
||||
icon_state = "bronze"
|
||||
slot = ACCESSORY_SLOT_MEDAL
|
||||
|
||||
/obj/item/clothing/accessory/medal/conduct
|
||||
name = "distinguished conduct medal"
|
||||
@@ -260,6 +263,7 @@
|
||||
name = "green scarf"
|
||||
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
|
||||
icon_state = "greenscarf"
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/scarf/red
|
||||
name = "red scarf"
|
||||
@@ -322,6 +326,7 @@
|
||||
icon_state = "bracelet"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
|
||||
/obj/item/clothing/accessory/bracelet/friendship
|
||||
name = "friendship bracelet"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "red armband"
|
||||
desc = "A fancy red armband!"
|
||||
icon_state = "red"
|
||||
slot = "armband"
|
||||
slot = ACCESSORY_SLOT_ARMBAND
|
||||
|
||||
/obj/item/clothing/accessory/armband/cargo
|
||||
name = "cargo armband"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
desc = "Security Department detective's badge, made from gold."
|
||||
icon_state = "badge"
|
||||
slot_flags = SLOT_BELT | SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_MEDAL
|
||||
|
||||
var/stored_name
|
||||
var/badge_string = "Corporate Security"
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
name = "black vest"
|
||||
desc = "Slick black suit vest."
|
||||
icon_state = "det_vest"
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/jacket/
|
||||
/obj/item/clothing/accessory/jacket
|
||||
name = "tan suit jacket"
|
||||
desc = "Cozy suit jacket."
|
||||
icon_state = "tan_jacket"
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/jacket/charcoal
|
||||
name = "charcoal suit jacket"
|
||||
@@ -55,7 +57,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
slot = "over"
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/suit.dmi'
|
||||
@@ -176,6 +178,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/hawaii/red
|
||||
icon_state = "hawaii2"
|
||||
@@ -201,6 +204,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/wcoat/red
|
||||
name = "red waistcoat"
|
||||
@@ -242,6 +246,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/sweater/pink
|
||||
name = "pink sweater"
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
name = "shoulder holster"
|
||||
desc = "A handgun holster."
|
||||
icon_state = "holster"
|
||||
slot = "utility"
|
||||
var/list/can_hold //VOREStation Edit
|
||||
slot = ACCESSORY_SLOT_TORSO //Legacy/balance purposes
|
||||
concealed_holster = 1
|
||||
var/obj/item/holstered = null
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
name = "silver locket"
|
||||
desc = "A small locket of high-quality metal."
|
||||
icon_state = "locket"
|
||||
slot_flags = 0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
slot_flags = SLOT_MASK | SLOT_TIE
|
||||
slot = ACCESSORY_SLOT_DECOR
|
||||
var/base_icon
|
||||
var/open
|
||||
var/obj/item/held //Item inside locket.
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon = 'icons/obj/card.dmi'
|
||||
icon_state = "permit"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot = ACCESSORY_SLOT_MEDAL
|
||||
var/owner = 0 //To prevent people from just renaming the thing if they steal it
|
||||
|
||||
/obj/item/clothing/accessory/permit/attack_self(mob/user as mob)
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
name = "load bearing equipment"
|
||||
desc = "Used to hold things when you don't have enough hands."
|
||||
icon_state = "webbing"
|
||||
slot = "utility"
|
||||
slot = ACCESSORY_SLOT_UTILITY
|
||||
show_messages = 1
|
||||
|
||||
var/slots = 3
|
||||
var/slots = 5
|
||||
var/obj/item/weapon/storage/internal/hold
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
@@ -49,45 +49,40 @@
|
||||
name = "webbing"
|
||||
desc = "Sturdy mess of synthcotton belts and buckles, ready to share your burden."
|
||||
icon_state = "webbing"
|
||||
slots = 3
|
||||
|
||||
/obj/item/clothing/accessory/storage/black_vest
|
||||
name = "black webbing vest"
|
||||
desc = "Robust black synthcotton vest with lots of pockets to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "vest_black"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/brown_vest
|
||||
name = "brown webbing vest"
|
||||
desc = "Worn brownish synthcotton vest with lots of pockets to unload your hands."
|
||||
icon_state = "vest_brown"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/white_vest
|
||||
name = "white webbing vest"
|
||||
desc = "Durable white synthcotton vest with lots of pockets to carry essentials."
|
||||
icon_state = "vest_white"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches
|
||||
name = "black drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Robust black synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_black"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
name = "brown drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Worn brownish synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_brown"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/white_drop_pouches
|
||||
name = "white drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Durable white synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_white"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/knifeharness
|
||||
name = "decorated harness"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/item/clothing/under/vox
|
||||
has_sensor = 0
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
valid_accessory_slots = list("vox")
|
||||
restricted_accessory_slots = list("vox")
|
||||
valid_accessory_slots = "vox"
|
||||
restricted_accessory_slots = "vox"
|
||||
phoronproof = 1
|
||||
|
||||
/obj/item/clothing/under/vox/vox_casual
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
endWhen = 30
|
||||
|
||||
/datum/event/dust/announce()
|
||||
command_announcement.Announce("Debris resulting from activity on another nearby asteroid is approaching your colony.", "Dust Alert")
|
||||
command_announcement.Announce("Debris resulting from activity on another nearby asteroid is approaching \the [station_name()]", "Dust Alert")
|
||||
|
||||
/datum/event/dust/start()
|
||||
dust_swarm(get_severity())
|
||||
|
||||
/datum/event/dust/end()
|
||||
command_announcement.Announce("The colony is no longer in danger of impact from space debris.", "Dust Notice")
|
||||
command_announcement.Announce("\The [station_name()] is no longer in danger of impact from space debris.", "Dust Notice")
|
||||
|
||||
/datum/event/dust/proc/get_severity()
|
||||
switch(severity)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
/datum/event/escaped_slimes/start()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
|
||||
if(temp_vent.network && temp_vent.loc.z in using_map.station_levels) //borrowed from spiders event, but it works. Distribute the slimes only in rooms with vents
|
||||
vents += temp_vent
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/datum/event/gravity/start()
|
||||
gravity_is_on = 0
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on, A)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
if(!gravity_is_on)
|
||||
gravity_is_on = 1
|
||||
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on, A)
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
continue
|
||||
players += player.real_name
|
||||
|
||||
for (var/mob/living/silicon/ai/target in world)
|
||||
for (var/mob/living/silicon/ai/target in silicon_mob_list)
|
||||
var/law = target.generate_ion_law()
|
||||
target << "<font color='red'><b>You have detected a change in your laws information:</b></font>"
|
||||
target << law
|
||||
@@ -30,7 +30,7 @@
|
||||
*/
|
||||
/datum/event/ionstorm/tick()
|
||||
if(botEmagChance)
|
||||
for(var/mob/living/bot/bot in world)
|
||||
for(var/mob/living/bot/bot in mob_list)
|
||||
if(prob(botEmagChance))
|
||||
bot.emag_act(1)
|
||||
|
||||
@@ -146,7 +146,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
M.add_ion_law("THE STATION IS [who2pref] [who2]")
|
||||
|
||||
if(botEmagChance)
|
||||
for(var/obj/machinery/bot/bot in world)
|
||||
for(var/obj/machinery/bot/bot in mob_list)
|
||||
if(prob(botEmagChance))
|
||||
bot.Emag()
|
||||
*/
|
||||
@@ -162,21 +162,21 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
|
||||
spawn(0)
|
||||
world << "Started processing APCs"
|
||||
for (var/obj/machinery/power/apc/APC in world)
|
||||
for (var/obj/machinery/power/apc/APC in machines)
|
||||
if(APC.z in station_levels)
|
||||
APC.ion_act()
|
||||
apcnum++
|
||||
world << "Finished processing APCs. Processed: [apcnum]"
|
||||
spawn(0)
|
||||
world << "Started processing SMES"
|
||||
for (var/obj/machinery/power/smes/SMES in world)
|
||||
for (var/obj/machinery/power/smes/SMES in machines)
|
||||
if(SMES.z in station_levels)
|
||||
SMES.ion_act()
|
||||
smesnum++
|
||||
world << "Finished processing SMES. Processed: [smesnum]"
|
||||
spawn(0)
|
||||
world << "Started processing AIRLOCKS"
|
||||
for (var/obj/machinery/door/airlock/D in world)
|
||||
for (var/obj/machinery/door/airlock/D in machines)
|
||||
if(D.z in station_levels)
|
||||
//if(length(D.req_access) > 0 && !(12 in D.req_access)) //not counting general access and maintenance airlocks
|
||||
airlocknum++
|
||||
@@ -185,7 +185,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
world << "Finished processing AIRLOCKS. Processed: [airlocknum]"
|
||||
spawn(0)
|
||||
world << "Started processing FIREDOORS"
|
||||
for (var/obj/machinery/door/firedoor/D in world)
|
||||
for (var/obj/machinery/door/firedoor/D in machines)
|
||||
if(D.z in station_levels)
|
||||
firedoornum++;
|
||||
spawn(0)
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
var/start_side
|
||||
|
||||
/datum/event/meteor_wave/setup()
|
||||
waves = severity * rand(1,3)
|
||||
waves = 2 + rand(1, severity) //EVENT_LEVEL_MAJOR is 3-5 waves
|
||||
start_side = pick(cardinal)
|
||||
endWhen = worst_case_end()
|
||||
|
||||
/datum/event/meteor_wave/announce()
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
command_announcement.Announce("Meteors have been detected on collision course with the colony.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
command_announcement.Announce("Meteors have been detected on collision course with \the [station_name()].", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
else
|
||||
command_announcement.Announce("The colony is now in a meteor shower.", "Meteor Alert")
|
||||
command_announcement.Announce("\The [station_name()] is now in a meteor shower.", "Meteor Alert")
|
||||
|
||||
/datum/event/meteor_wave/tick()
|
||||
if(waves && activeFor >= next_meteor)
|
||||
@@ -32,15 +32,15 @@
|
||||
/datum/event/meteor_wave/end()
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
command_announcement.Announce("The colony has cleared the meteor storm.", "Meteor Alert")
|
||||
command_announcement.Announce("\The [station_name()] has cleared the meteor storm.", "Meteor Alert")
|
||||
else
|
||||
command_announcement.Announce("The colony has cleared the meteor shower", "Meteor Alert")
|
||||
command_announcement.Announce("\The [station_name()] has cleared the meteor shower", "Meteor Alert")
|
||||
|
||||
/datum/event/meteor_wave/proc/get_meteors()
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
if(prob(10))
|
||||
return meteors_catastrophic
|
||||
if(EVENT_LEVEL_MODERATE)
|
||||
return meteors_threatening
|
||||
else
|
||||
return meteors_normal
|
||||
return meteors_threatening
|
||||
else
|
||||
return meteors_normal
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
Notifications will be sent as updates occur.<br>"
|
||||
var/my_department = "[station_name()] firewall subroutines"
|
||||
|
||||
for(var/obj/machinery/message_server/MS in world)
|
||||
for(var/obj/machinery/message_server/MS in machines)
|
||||
if(!MS.active) continue
|
||||
MS.send_rc_message("Head of Personnel's Desk", my_department, message, "", "", 2)
|
||||
|
||||
@@ -62,6 +62,6 @@
|
||||
|
||||
var/my_department = "[station_name()] firewall subroutines"
|
||||
|
||||
for(var/obj/machinery/message_server/MS in world)
|
||||
for(var/obj/machinery/message_server/MS in machines)
|
||||
if(!MS.active) continue
|
||||
MS.send_rc_message("Head of Personnel's Desk", my_department, message, "", "", 2)
|
||||
|
||||
@@ -41,14 +41,14 @@
|
||||
|
||||
|
||||
/datum/event/prison_break/start()
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType))
|
||||
areas += A
|
||||
|
||||
if(areas && areas.len > 0)
|
||||
var/my_department = "[station_name()] firewall subroutines"
|
||||
var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.<br>"
|
||||
for(var/obj/machinery/message_server/MS in world)
|
||||
for(var/obj/machinery/message_server/MS in machines)
|
||||
MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2)
|
||||
for(var/mob/living/silicon/ai/A in player_list)
|
||||
A << "<span class='danger'>Malicious program detected in the [english_list(areaName)] lighting and airlock control systems by [my_department].</span>"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/postStartTicks = 0
|
||||
|
||||
/datum/event/radiation_storm/announce()
|
||||
command_announcement.Announce("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels or dorms.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
command_announcement.Announce("High levels of radiation detected near \the [station_name()]. Please evacuate into one of the shielded maintenance tunnels or dorms.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') //VOREStation Edit - Dorms ref
|
||||
|
||||
/datum/event/radiation_storm/start()
|
||||
make_maint_all_access()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
endWhen = startWhen + rand(30,90) + rand(30,90) //2-6 minute duration
|
||||
|
||||
/datum/event/solar_storm/announce()
|
||||
command_announcement.Announce("A solar storm has been detected approaching the station. Please halt all EVA activites immediately and return to the interior of the station.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. Please halt all EVA activites immediately and return to the interior of the station.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
adjust_solar_output(1.5)
|
||||
|
||||
/datum/event/solar_storm/proc/adjust_solar_output(var/mult = 1)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/datum/event/spider_infestation/start()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
|
||||
if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in using_map.station_levels)
|
||||
if(temp_vent.network.normal_members.len > 50)
|
||||
vents += temp_vent
|
||||
|
||||
@@ -28,7 +28,7 @@ datum/event/viral_infection/announce()
|
||||
level = "five"
|
||||
|
||||
if (severity == EVENT_LEVEL_MAJOR || prob(60))
|
||||
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
|
||||
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard \the [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
|
||||
|
||||
datum/event/viral_infection/start()
|
||||
if(!viruses.len) return
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/datum/event/wallrot/announce()
|
||||
if(center)
|
||||
command_announcement.Announce("Harmful fungi detected on the colony nearby [center.loc.name]. Station structures may be contaminated.", "Biohazard Alert")
|
||||
command_announcement.Announce("Harmful fungi detected on \the [station_name()] nearby [center.loc.name]. Station structures may be contaminated.", "Biohazard Alert")
|
||||
|
||||
/datum/event/wallrot/start()
|
||||
spawn()
|
||||
|
||||
@@ -81,7 +81,7 @@ var/global/datum/controller/plants/plant_controller // Set in New().
|
||||
|
||||
// Make sure any seed packets that were mapped in are updated
|
||||
// correctly (since the seed datums did not exist a tick ago).
|
||||
for(var/obj/item/seeds/S in world)
|
||||
for(var/obj/item/seeds/S in all_seed_packs)
|
||||
S.update_seed()
|
||||
|
||||
//Might as well mask the gene types while we're at it.
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
var/global/list/plant_seed_sprites = list()
|
||||
|
||||
GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
|
||||
//Seed packet object/procs.
|
||||
/obj/item/seeds
|
||||
name = "packet of seeds"
|
||||
|
||||
@@ -265,6 +265,7 @@
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/device/multitool
|
||||
)
|
||||
cant_hold = list(/obj/item/weapon/screwdriver/power)
|
||||
|
||||
/obj/item/weapon/storage/bag/circuits/basic/New()
|
||||
..()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Create lighting overlays on all turfs with dynamic lighting in areas with dynamic lighting.
|
||||
/proc/create_all_lighting_overlays()
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
if(!A.dynamic_lighting)
|
||||
continue
|
||||
for(var/turf/T in A)
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
region. Each is labled by date of publication and title. This list is self-updating, and from time to time the publisher will push new \
|
||||
articles. You are encouraged to check back frequently."
|
||||
children = list(
|
||||
/datum/lore/codex/page/article13,
|
||||
/datum/lore/codex/page/article12,
|
||||
/datum/lore/codex/page/article11,
|
||||
/datum/lore/codex/page/article10,
|
||||
/datum/lore/codex/page/article9,
|
||||
/datum/lore/codex/page/article8,
|
||||
/datum/lore/codex/page/article7,
|
||||
@@ -99,7 +103,7 @@
|
||||
|
||||
/datum/lore/codex/page/article8
|
||||
name = "4/1/62 - Almach Cordon Breached by Unknown Organization"
|
||||
data = "Early this morning, SolGov ships assigned to the Almach Cordon around the Rim territories reported that a number of bulk freighters had eluded apprehension and are now at large within the Golden Crescent. Lieutenant-Major Volkov of the SCG-D Henri Capet reports that the blockade-runners were highly organized and determined, citing several lightly-manned ships left behind to tie up the SolGov forces long enough for the freighters to escape, detonating their reactors when they lost the ability to continue fighting. This resulted in three Fleet casualties and a significant degree of damage to the Henri Capet. The contents and location of the freighters are unknown at this time. In response, eight light-response vessels are being assigned to the Saint Columbia Fleet Base from Jahan's Post and Zhu Que. Residents and traffic officials in Vir, Oasis, and Gavel are to remain alert and notify police if any suspicious or unregistered craft enter their space.\
|
||||
data = "Early this morning, SolGov ships assigned to the Almach Cordon around the Rim territories reported that a number of bulk freighters had eluded apprehension and are now at large within the Golden Crescent. Centurio Volkov of the SCG-D Henri Capet reports that the blockade-runners were highly organized and determined, citing several lightly-manned ships left behind to tie up the SolGov forces long enough for the freighters to escape, detonating their reactors when they lost the ability to continue fighting. This resulted in three Fleet casualties and a significant degree of damage to the Henri Capet. The contents and location of the freighters are unknown at this time. In response, eight light-response vessels are being assigned to the Saint Columbia Fleet Base from Jahan's Post and Zhu Que. Residents and traffic officials in Vir, Oasis, and Gavel are to remain alert and notify police if any suspicious or unregistered craft enter their space.\
|
||||
<br><br>\
|
||||
A spokesperson for the Association claims that, while they make no attempts to stop aspiring blockade runners, the organization responsible for this most recent attack is unaffiliated with the Association as a whole and deny any knowledge of their identity or motives."
|
||||
|
||||
@@ -109,3 +113,24 @@
|
||||
<br><br>\
|
||||
The intervention of a local Defense Force drone wing on behalf of the terrorists leads many in the intelligence community to assume that more Boiling Point operatives remain active within Gavel, and possibly nearby systems such as Vir and Oasis. Some have also noted that elements of the terrorists' tactics and augmentations suggest Association training, though the specifics remain classified. More information as the story breaks."
|
||||
|
||||
/datum/lore/codex/page/article10
|
||||
name = "4/13/62 - Association Proposes Joint Operation"
|
||||
data = "Condemning the actions of Boiling Point on Gavel this week, representatives from the Almach Association and SolGov met to discuss joint fleet action. At the end of nearly a week of closed-doors negotiations, the Association has agreed to send in a significant contingent of Association Militia vessels as a show of good-will. These vessels will be active in the Golden Crescent, searching for Boiling Point facilities believed to be located in the outskirts of major systems. The influx of manpower allows the Fleet to continue patrolling the Heights and the Bowl, in hopes of containing the spread of the organization. This operation also marks the opening of the Almach Cordon, although travelers are advised that migration between the regions will remain extremely limited.\
|
||||
<br><br>\
|
||||
While undoubtedly a sign of increased trust between the Confederacy and the Rim, some have voiced concerns with the action's adding legitimacy to the Association government. Quote Rewi Kerahoma, SEO Chairperson of the Board: \"The meeting with the Association regime was inappropriate, but actively allying with them is something else entirely. If the generals think we don't have the fleet to hunt down a bunch of rabble-rousers without weakening ourselves to piracy and foreign invasion, then it is a sign that we need to grow our shipyards in the Bowl, and give jobs to the hardworking Solars that live there-- not that we need to collaborate with terrorists.\"\
|
||||
<br><br>\
|
||||
Transgressive Technologies and Interior Police Executive Sifat Unar issued a memo indicating that, while the assistance of the Association's more conservative elements in this matter is appreciated, the Five Points of Human Sanctity remain intact and SolGov categorically refuses aid from \"transhumans, posthumans, uplifts, and Fortunates.\""
|
||||
|
||||
/datum/lore/codex/page/article11
|
||||
name = "4/29/62 - New Data from Shelf Suggests Continued Migration"
|
||||
data = "Despite their recent inclusion in the Almach Association, astronomers have confirmed that Shelf is continuing to migrate along the Almach Stream to a new star. Sources within the Association claim that Shelf's participation in the organization has been \"lukewarm at best\", and that their continued migration is to be expected. Morpheus executives have refrained from issuing a statement on the matter, but given their statements upon entering the Association are believed to view themselves as personally culpable for the Gray Hour. Analysts suggest that Shelf may be unwilling to enter a shooting war with SolGov if the situation in the Rim destabilizes."
|
||||
|
||||
/datum/lore/codex/page/article12
|
||||
name = "5/07/62 - Allen Family Matriarch Expelled from Neon Light"
|
||||
data = "The Allen family of the Neon Light, the largest single habitat-ship in Solar space, has been ousted in a nearly bloodless coup today. The Allens, staunch supporters of the Association and advocates for the criminal ark's inclusion in the organization, had attempted to seize control of the ship's agricultural region during the Almach Cordon. They effectively held the ship for a matter of weeks, but were defeated by loyalists to the reigning Crow family. Stripped of their position as rulers of the Third Stacks, their matriarch was summarily executed by spacing in what the current regime is referring to as an \"expedited exile\". This is believed to mark the end of the question of Neon Light's membership in the Association, and the nominal SolGov protectorate is expected to remain neutral for the foreseeable future."
|
||||
|
||||
/datum/lore/codex/page/article13
|
||||
name = "5/15/62 - Anti-Fleet Riots on Saint Columbia"
|
||||
data = "As military vessels from the Almach Association continue to enter the Golden Crescent as part of a SolGov initiative to combat the Boiling Point terrorists believed to be hiding in the region, political unrest in the upstream portions of the region continue to grow. Many in the Republic of Saint Columbia, a small upstream nation, have responded to increasing militarization of their local Fleet base by taking to the streets, blocking pedestrian traffic in the capital of Barrueco and shutting down entire industries by destroying or disabling infrastructure. Quote rioter Luisa Tassis, \"we've been sick of the Fleeties squatting in our system and breathing down our neck, and now there's going to be even more of them? No, screw that. If there's going to be a war between the Rim and the Core, I know what side I'd rather be on.\"\
|
||||
<br><br>\
|
||||
Association leaders have refrained from officially supporting the rioters, though many suspect that Association propagandists have sparked the unrest. Solar officials, on the other hand, were quick to offer assurances that the unrest will be calmed long before it begins to affect the Fleet base in system."
|
||||
|
||||
@@ -285,7 +285,7 @@ var/global/use_preloader = FALSE
|
||||
var/atom/instance
|
||||
_preloader.setup(members_attributes[index])//preloader for assigning set variables on atom creation
|
||||
var/atype = members[index]
|
||||
for(var/area/A in world)
|
||||
for(var/area/A in all_areas)
|
||||
if(A.type == atype)
|
||||
instance = A
|
||||
break
|
||||
|
||||
@@ -800,7 +800,7 @@ mob/observer/dead/MayRespawn(var/feedback = 0)
|
||||
set name = "Blank pAI alert"
|
||||
set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
|
||||
if(usr.client.prefs.be_special & BE_PAI)
|
||||
for(var/obj/item/device/paicard/p in world)
|
||||
for(var/obj/item/device/paicard/p in all_pai_cards)
|
||||
var/obj/item/device/paicard/PP = p
|
||||
if(PP.pai == null)
|
||||
PP.icon = 'icons/obj/pda_vr.dmi' // VOREStation Edit
|
||||
|
||||
@@ -302,7 +302,7 @@
|
||||
else adverb = " a very lengthy message"
|
||||
message = "<B>[speaker]</B> [verb][adverb]."
|
||||
|
||||
src.show_message(message)
|
||||
show_message(message, type = 1) // Type 1 is visual message
|
||||
|
||||
/mob/proc/hear_sleep(var/message)
|
||||
var/heard = ""
|
||||
|
||||
@@ -383,3 +383,6 @@
|
||||
else return !D.check_access(ID) // it's a real, air blocking door
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/bot/isSynthetic() //Robots are synthetic, no?
|
||||
return 1
|
||||
|
||||
@@ -267,6 +267,10 @@
|
||||
/mob/living/carbon/proc/eyecheck()
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash)
|
||||
if(eyecheck() < intensity || override_blindness_check)
|
||||
return ..()
|
||||
|
||||
// ++++ROCKDTBEN++++ MOB PROCS -- Ask me before touching.
|
||||
// Stop! ... Hammertime! ~Carn
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
var/tie_msg
|
||||
if(istype(w_uniform,/obj/item/clothing/under) && !(skip_gear & EXAMINE_SKIPTIE))
|
||||
var/obj/item/clothing/under/U = w_uniform
|
||||
if(U.accessories.len)
|
||||
if(LAZYLEN(U.accessories))
|
||||
var/list/accessories_visible = list() //please let this fix the stupid fucking runtimes
|
||||
if(skip_gear & EXAMINE_SKIPHOLSTER)
|
||||
for(var/obj/item/clothing/accessory/A in U.accessories)
|
||||
@@ -145,7 +145,7 @@
|
||||
if(w_uniform.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].<br>"
|
||||
msg += "[T.He] [T.is] wearing \icon[w_uniform] \a [w_uniform].[tie_msg]<br>"
|
||||
|
||||
//head
|
||||
if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine)
|
||||
@@ -159,7 +159,7 @@
|
||||
var/tie_msg
|
||||
if(istype(wear_suit,/obj/item/clothing/suit))
|
||||
var/obj/item/clothing/suit/U = wear_suit
|
||||
if(U.accessories.len)
|
||||
if(LAZYLEN(U.accessories))
|
||||
tie_msg += " Attached to it is [english_list(U.accessories)]."
|
||||
|
||||
if(wear_suit.blood_DNA)
|
||||
|
||||
@@ -667,14 +667,21 @@
|
||||
I = internal_organs_by_name[O_EYES]
|
||||
if(I.is_broken())
|
||||
return FLASH_PROTECTION_MAJOR
|
||||
else // They can't be flashed if they don't have eyes.
|
||||
else if(!species.dispersed_eyes) // They can't be flashed if they don't have eyes, or widespread sensing surfaces.
|
||||
return FLASH_PROTECTION_MAJOR
|
||||
|
||||
var/number = get_equipment_flash_protection()
|
||||
number = I.get_total_protection(number)
|
||||
I.additional_flash_effects(number)
|
||||
if(I)
|
||||
number = I.get_total_protection(number)
|
||||
I.additional_flash_effects(number)
|
||||
return number
|
||||
|
||||
/mob/living/carbon/human/flash_eyes(var/intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash)
|
||||
if(internal_organs_by_name[O_EYES]) // Eyes are fucked, not a 'weak point'.
|
||||
var/obj/item/organ/internal/eyes/I = internal_organs_by_name[O_EYES]
|
||||
I.additional_flash_effects(intensity)
|
||||
return ..()
|
||||
|
||||
#define add_clothing_protection(A) \
|
||||
var/obj/item/clothing/C = A; \
|
||||
flash_protection += C.flash_protection; \
|
||||
@@ -853,7 +860,7 @@
|
||||
src.verbs -= /mob/living/carbon/human/proc/remotesay
|
||||
return
|
||||
var/list/creatures = list()
|
||||
for(var/mob/living/carbon/h in world)
|
||||
for(var/mob/living/carbon/h in mob_list)
|
||||
creatures += h
|
||||
var/mob/target = input("Who do you want to project your mind to ?") as null|anything in creatures
|
||||
if (isnull(target))
|
||||
@@ -866,7 +873,7 @@
|
||||
target.show_message("<font color='blue'> You hear a voice that seems to echo around the room: [say]</font>")
|
||||
usr.show_message("<font color='blue'> You project your mind into [target.real_name]: [say]</font>")
|
||||
log_say("(TPATH to [key_name(target)]) [say]",src)
|
||||
for(var/mob/observer/dead/G in world)
|
||||
for(var/mob/observer/dead/G in mob_list)
|
||||
G.show_message("<i>Telepathic message from <b>[src]</b> to <b>[target]</b>: [say]</i>")
|
||||
|
||||
/mob/living/carbon/human/proc/remoteobserve()
|
||||
@@ -891,7 +898,7 @@
|
||||
|
||||
var/list/mob/creatures = list()
|
||||
|
||||
for(var/mob/living/carbon/h in world)
|
||||
for(var/mob/living/carbon/h in mob_list)
|
||||
var/turf/temp_turf = get_turf(h)
|
||||
if((temp_turf.z != 1 && temp_turf.z != 5) || h.stat!=CONSCIOUS) //Not on mining or the station. Or dead
|
||||
continue
|
||||
@@ -930,7 +937,7 @@
|
||||
restore_all_organs() // Reapply robotics/amputated status from preferences.
|
||||
|
||||
if(!client || !key) //Don't boot out anyone already in the mob.
|
||||
for (var/obj/item/organ/internal/brain/H in world)
|
||||
for (var/obj/item/organ/internal/brain/H in all_brain_organs)
|
||||
if(H.brainmob)
|
||||
if(H.brainmob.real_name == src.real_name)
|
||||
if(H.brainmob.mind)
|
||||
|
||||
@@ -152,7 +152,7 @@ emp_act
|
||||
for(var/obj/item/clothing/gear in protective_gear)
|
||||
if(gear.body_parts_covered & def_zone.body_part)
|
||||
protection += gear.armor[type]
|
||||
if(gear.accessories.len)
|
||||
if(LAZYLEN(gear.accessories))
|
||||
for(var/obj/item/clothing/accessory/bling in gear.accessories)
|
||||
if(bling.body_parts_covered & def_zone.body_part)
|
||||
protection += bling.armor[type]
|
||||
@@ -165,7 +165,7 @@ emp_act
|
||||
for(var/obj/item/clothing/gear in protective_gear)
|
||||
if(gear.body_parts_covered & def_zone.body_part)
|
||||
soaked += gear.armorsoak[type]
|
||||
if(gear.accessories.len)
|
||||
if(LAZYLEN(gear.accessories))
|
||||
for(var/obj/item/clothing/accessory/bling in gear.accessories)
|
||||
if(bling.body_parts_covered & def_zone.body_part)
|
||||
soaked += bling.armorsoak[type]
|
||||
|
||||
@@ -115,6 +115,11 @@
|
||||
|
||||
tally += item_tally
|
||||
|
||||
if(CE_SLOWDOWN in chem_effects)
|
||||
if (tally >= 0 )
|
||||
tally = (tally + tally/4) //Add a quarter of penalties on top.
|
||||
tally += 1
|
||||
|
||||
if(CE_SPEEDBOOST in chem_effects)
|
||||
if (tally >= 0) // cut any penalties in half
|
||||
tally = tally/2
|
||||
|
||||
@@ -340,6 +340,11 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
if(W.action_button_name)
|
||||
update_action_buttons()
|
||||
|
||||
if(W.zoom)
|
||||
W.zoom()
|
||||
|
||||
W.in_inactive_hand(src)
|
||||
|
||||
return 1
|
||||
|
||||
//Checks if a given slot can be accessed at this time, either to equip or unequip I
|
||||
|
||||
@@ -75,13 +75,14 @@
|
||||
/datum/unarmed_attack/bite
|
||||
)
|
||||
var/list/unarmed_attacks = null // For empty hand harm-intent attack
|
||||
var/brute_mod = 1 // Physical damage multiplier.
|
||||
var/burn_mod = 1 // Burn damage multiplier.
|
||||
var/oxy_mod = 1 // Oxyloss modifier
|
||||
var/toxins_mod = 1 // Toxloss modifier
|
||||
var/radiation_mod = 1 // Radiation modifier
|
||||
var/flash_mod = 1 // Stun from blindness modifier.
|
||||
var/chemOD_mod = 1 // Damage modifier for overdose
|
||||
var/brute_mod = 1 // Physical damage multiplier.
|
||||
var/burn_mod = 1 // Burn damage multiplier.
|
||||
var/oxy_mod = 1 // Oxyloss modifier
|
||||
var/toxins_mod = 1 // Toxloss modifier
|
||||
var/radiation_mod = 1 // Radiation modifier
|
||||
var/flash_mod = 1 // Stun from blindness modifier.
|
||||
var/sound_mod = 1 // Stun from sounds, I.E. flashbangs.
|
||||
var/chemOD_mod = 1 // Damage modifier for overdose
|
||||
var/vision_flags = SEE_SELF // Same flags as glasses.
|
||||
|
||||
// Death vars.
|
||||
@@ -189,6 +190,7 @@
|
||||
O_EYES = /obj/item/organ/internal/eyes
|
||||
)
|
||||
var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
|
||||
var/dispersed_eyes // If set, the species will be affected by flashbangs regardless if they have eyes or not, as they see in large areas.
|
||||
|
||||
var/list/has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
|
||||
@@ -5,7 +5,11 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
|
||||
name = SPECIES_PROMETHEAN
|
||||
name_plural = "Prometheans"
|
||||
blurb = "What has Science done?"
|
||||
blurb = "Prometheans (Macrolimus artificialis) are a species of artificially-created gelatinous humanoids, \
|
||||
chiefly characterized by their primarily liquid bodies and ability to change their bodily shape and color in order to \
|
||||
mimic many forms of life. Derived from the Aetolian giant slime (Macrolimus vulgaris) inhabiting the warm, tropical planet \
|
||||
of Aetolus, they are a relatively new lab-created sapient species, and as such many things about them have yet to be comprehensively studied. \
|
||||
What has Science done?"
|
||||
show_ssd = "totally quiescent"
|
||||
death_message = "rapidly loses cohesion, splattering across the ground..."
|
||||
knockout_message = "collapses inwards, forming a disordered puddle of goo."
|
||||
@@ -46,6 +50,8 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
brute_mod = 0.75
|
||||
burn_mod = 2
|
||||
oxy_mod = 0
|
||||
flash_mod = 0.5 //No centralized, lensed eyes.
|
||||
item_slowdown_mod = 1.33
|
||||
|
||||
cloning_modifier = /datum/modifier/cloning_sickness/promethean
|
||||
|
||||
@@ -66,6 +72,9 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
|
||||
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
|
||||
has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime) // Slime core.
|
||||
|
||||
dispersed_eyes = TRUE
|
||||
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable/slime),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable/slime),
|
||||
@@ -147,25 +156,41 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
var/turf/T = H.loc
|
||||
if(istype(T))
|
||||
var/obj/effect/decal/cleanable/C = locate() in T
|
||||
if(C)
|
||||
if(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)))
|
||||
return
|
||||
if(C && !(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET))))
|
||||
qdel(C)
|
||||
if (istype(T, /turf/simulated))
|
||||
var/turf/simulated/S = T
|
||||
S.dirt = 0
|
||||
H.nutrition += rand(15, 45)
|
||||
|
||||
H.nutrition = min(500, max(0, H.nutrition + rand(15, 30)))
|
||||
VOREStation Removal End */
|
||||
// Heal remaining damage.
|
||||
if(H.fire_stacks >= 0)
|
||||
if(H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
|
||||
H.adjustBruteLoss(-heal_rate)
|
||||
H.adjustFireLoss(-heal_rate)
|
||||
H.adjustOxyLoss(-heal_rate)
|
||||
H.adjustToxLoss(-heal_rate)
|
||||
/* else //VOREStation Edit Start.
|
||||
H.adjustToxLoss(2*heal_rate) // Doubled because 0.5 is miniscule, and fire_stacks are capped in both directions
|
||||
*/ //VOREStation Edit End
|
||||
var/nutrition_cost = 0
|
||||
var/nutrition_debt = H.getBruteLoss()
|
||||
var/starve_mod = 1
|
||||
if(H.nutrition <= 25)
|
||||
starve_mod = 0.75
|
||||
H.adjustBruteLoss(-heal_rate * starve_mod)
|
||||
nutrition_cost += nutrition_debt - H.getBruteLoss()
|
||||
|
||||
nutrition_debt = H.getFireLoss()
|
||||
H.adjustFireLoss(-heal_rate * starve_mod)
|
||||
nutrition_cost += nutrition_debt - H.getFireLoss()
|
||||
|
||||
nutrition_debt = H.getOxyLoss()
|
||||
H.adjustOxyLoss(-heal_rate * starve_mod)
|
||||
nutrition_cost += nutrition_debt - H.getOxyLoss()
|
||||
|
||||
nutrition_debt = H.getToxLoss()
|
||||
H.adjustToxLoss(-heal_rate * starve_mod)
|
||||
nutrition_cost += nutrition_debt - H.getToxLoss()
|
||||
H.nutrition -= (2 * nutrition_cost) //Costs Nutrition when damage is being repaired, corresponding to the amount of damage being repaired.
|
||||
H.nutrition = max(0, H.nutrition) //Ensure it's not below 0.
|
||||
//else//VOREStation Removal
|
||||
//H.adjustToxLoss(2*heal_rate) // Doubled because 0.5 is miniscule, and fire_stacks are capped in both directions
|
||||
|
||||
/datum/species/shapeshifter/promethean/get_blood_colour(var/mob/living/carbon/human/H)
|
||||
return (H ? rgb(H.r_skin, H.g_skin, H.b_skin) : ..())
|
||||
|
||||
|
||||
@@ -911,6 +911,15 @@ default behaviour is:
|
||||
to_chat(src, "<span class='notice'>You are now [resting ? "resting" : "getting up"]</span>")
|
||||
update_canmove()
|
||||
|
||||
//called when the mob receives a bright flash
|
||||
/mob/living/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash)
|
||||
if(override_blindness_check || !(disabilities & BLIND))
|
||||
overlay_fullscreen("flash", type)
|
||||
spawn(25)
|
||||
if(src)
|
||||
clear_fullscreen("flash", 25)
|
||||
return 1
|
||||
|
||||
/mob/living/proc/cannot_use_vents()
|
||||
if(mob_size > MOB_SMALL)
|
||||
return "You can't fit into that vent."
|
||||
@@ -1072,6 +1081,7 @@ default behaviour is:
|
||||
unbuckle_mob(L)
|
||||
L.Stun(5)
|
||||
//VOREStation Add End
|
||||
|
||||
return canmove
|
||||
|
||||
// Adds overlays for specific modifiers.
|
||||
@@ -1163,6 +1173,13 @@ default behaviour is:
|
||||
else
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_active"
|
||||
|
||||
// We just swapped hands, so the thing in our inactive hand will notice it's not the focus
|
||||
var/obj/item/I = get_inactive_hand()
|
||||
if(I)
|
||||
if(I.zoom)
|
||||
I.zoom()
|
||||
I.in_inactive_hand(src) //This'll do specific things, determined by the item
|
||||
return
|
||||
|
||||
/mob/living/proc/activate_hand(var/selhand) //0 or "r" or "right" for right hand; 1 or "l" or "left" for left hand.
|
||||
@@ -1257,3 +1274,7 @@ default behaviour is:
|
||||
|
||||
/mob/living/proc/make_hud_overlays()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/proc/has_vision()
|
||||
return !(eye_blind || (disabilities & BLIND) || stat || blinded)
|
||||
@@ -265,14 +265,14 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
|
||||
//Handle nonverbal and sign languages here
|
||||
if (speaking)
|
||||
if (speaking.flags & NONVERBAL)
|
||||
if (prob(30))
|
||||
src.custom_emote(1, "[pick(speaking.signlang_verb)].")
|
||||
|
||||
if (speaking.flags & SIGNLANG)
|
||||
log_say("(SIGN) [message]", src)
|
||||
return say_signlang(message, pick(speaking.signlang_verb), speaking)
|
||||
|
||||
if (speaking.flags & NONVERBAL)
|
||||
if (prob(30))
|
||||
src.custom_emote(1, "[pick(speaking.signlang_verb)].")
|
||||
|
||||
//These will contain the main receivers of the message
|
||||
var/list/listening = list()
|
||||
var/list/listening_obj = list()
|
||||
@@ -374,11 +374,19 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return 1
|
||||
|
||||
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language)
|
||||
var/list/potentials = get_mobs_and_objs_in_view_fast(src, world.view)
|
||||
var/list/mobs = potentials["mobs"]
|
||||
for(var/hearer in mobs)
|
||||
var/mob/M = hearer
|
||||
M.hear_signlang(message, verb, language, src)
|
||||
var/turf/T = get_turf(src)
|
||||
//We're in something, gesture to people inside the same thing
|
||||
if(loc != T)
|
||||
for(var/mob/M in loc)
|
||||
M.hear_signlang(message, verb, language, src)
|
||||
|
||||
//We're on a turf, gesture to visible as if we were a normal language
|
||||
else
|
||||
var/list/potentials = get_mobs_and_objs_in_view_fast(T, world.view)
|
||||
var/list/mobs = potentials["mobs"]
|
||||
for(var/hearer in mobs)
|
||||
var/mob/M = hearer
|
||||
M.hear_signlang(message, verb, language, src)
|
||||
return 1
|
||||
|
||||
/obj/effect/speech_bubble
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
remove_ai_verbs(src)
|
||||
|
||||
for(var/obj/machinery/ai_status_display/O in world)
|
||||
for(var/obj/machinery/ai_status_display/O in machines)
|
||||
spawn( 0 )
|
||||
O.mode = 2
|
||||
if (istype(loc, /obj/item/device/aicard))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/silicon/ai/Logout()
|
||||
..()
|
||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||
for(var/obj/machinery/ai_status_display/O in machines) //change status
|
||||
O.mode = 0
|
||||
if(!isturf(loc))
|
||||
if (client)
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
icon_state = "ai-crash"
|
||||
spawn(10)
|
||||
explosion(loc, 3, 6, 12, 15)
|
||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||
for(var/obj/machinery/ai_status_display/O in machines) //change status
|
||||
O.mode = 2
|
||||
return ..(gibbed)
|
||||
@@ -87,7 +87,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
if("submit")
|
||||
if(candidate)
|
||||
candidate.ready = 1
|
||||
for(var/obj/item/device/paicard/p in world)
|
||||
for(var/obj/item/device/paicard/p in all_pai_cards)
|
||||
if(p.looking_for_personality == 1)
|
||||
p.alertUpdate()
|
||||
usr << browse(null, "window=paiRecruit")
|
||||
|
||||
@@ -186,9 +186,8 @@ var/list/mob_hat_cache = list()
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] swipes [TU.his] ID card through \the [src], attempting to reboot it.</span>", "<span class='danger'>>You swipe your ID card through \the [src], attempting to reboot it.</span>")
|
||||
var/drones = 0
|
||||
for(var/mob/living/silicon/robot/drone/D in world)
|
||||
if(D.key && D.client)
|
||||
drones++
|
||||
for(var/mob/living/silicon/robot/drone/D in player_list)
|
||||
drones++
|
||||
if(drones < config.max_maint_drones)
|
||||
request_player()
|
||||
return
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
var/dat
|
||||
dat += "<B>Maintenance Units</B><BR>"
|
||||
|
||||
for(var/mob/living/silicon/robot/drone/D in world)
|
||||
for(var/mob/living/silicon/robot/drone/D in mob_list)
|
||||
if(D.z != src.z)
|
||||
continue
|
||||
dat += "<BR>[D.real_name] ([D.stat == 2 ? "<font color='red'>INACTIVE</FONT>" : "<font color='green'>ACTIVE</FONT>"])"
|
||||
@@ -68,8 +68,8 @@
|
||||
else if (href_list["ping"])
|
||||
|
||||
usr << "<span class='notice'>You issue a maintenance request for all active drones, highlighting [drone_call_area].</span>"
|
||||
for(var/mob/living/silicon/robot/drone/D in world)
|
||||
if(D.client && D.stat == 0)
|
||||
for(var/mob/living/silicon/robot/drone/D in player_list)
|
||||
if(D.stat == 0)
|
||||
D << "-- Maintenance drone presence requested in: [drone_call_area]."
|
||||
|
||||
else if (href_list["resync"])
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
/proc/count_drones()
|
||||
var/drones = 0
|
||||
for(var/mob/living/silicon/robot/drone/D in world)
|
||||
if(D.key && D.client)
|
||||
drones++
|
||||
for(var/mob/living/silicon/robot/drone/D in player_list)
|
||||
drones++
|
||||
return drones
|
||||
|
||||
/obj/machinery/drone_fabricator
|
||||
@@ -135,7 +134,7 @@
|
||||
return
|
||||
|
||||
var/list/all_fabricators = list()
|
||||
for(var/obj/machinery/drone_fabricator/DF in world)
|
||||
for(var/obj/machinery/drone_fabricator/DF in machines)
|
||||
if(DF.stat & NOPOWER || !DF.produce_drones)
|
||||
continue
|
||||
if(DF.drone_progress >= 100)
|
||||
|
||||
@@ -419,3 +419,6 @@
|
||||
|
||||
ghostize(0)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/silicon/has_vision()
|
||||
return 0 //NOT REAL EYES
|
||||
|
||||
@@ -0,0 +1,431 @@
|
||||
// A mob which only moves when it isn't being watched by living beings.
|
||||
//Weeping angels/SCP-173 hype
|
||||
//Horrible shitcoding and stolen code adaptations below. You have been warned.
|
||||
|
||||
/mob/living/simple_animal/hostile/statue
|
||||
name = "statue" // matches the name of the statue with the flesh-to-stone spell
|
||||
desc = "An incredibly lifelike marble carving. Its eyes seems to follow you..." // same as an ordinary statue with the added "eye following you" description
|
||||
icon = 'icons/obj/statue.dmi'
|
||||
tt_desc = "angelum weepicus"
|
||||
icon_state = "human_male"
|
||||
icon_living = "human_male"
|
||||
icon_dead = "human_male"
|
||||
intelligence_level = SA_HUMANOID
|
||||
stop_automated_movement = 1
|
||||
var/annoyance = 30 //stop staring you creep
|
||||
var/respond = 1
|
||||
var/banishable = 0
|
||||
faction = "statue"
|
||||
mob_size = MOB_HUGE
|
||||
response_help = "touches"
|
||||
response_disarm = "pushes"
|
||||
environment_smash = 2
|
||||
can_be_antagged = 1
|
||||
speed = -1
|
||||
maxHealth = 50000
|
||||
health = 50000
|
||||
status_flags = CANPUSH
|
||||
// investigates = 1
|
||||
a_intent = I_HURT
|
||||
density = 1
|
||||
mob_bump_flag = HEAVY
|
||||
mob_push_flags = ~HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
harm_intent_damage = 60
|
||||
melee_damage_lower = 50
|
||||
melee_damage_upper = 70
|
||||
attacktext = "clawed"
|
||||
attack_sound = 'sound/hallucinations/growl1.ogg'
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 9000
|
||||
run_at_them = 0
|
||||
|
||||
move_to_delay = 0 // Very fast
|
||||
|
||||
animate_movement = NO_STEPS // Do not animate movement, you jump around as you're a scary statue.
|
||||
|
||||
see_in_dark = 13
|
||||
view_range = 35 //So it can run at the victim when out of the view
|
||||
|
||||
melee_miss_chance = 0
|
||||
|
||||
|
||||
see_invisible = SEE_INVISIBLE_NOLIGHTING
|
||||
sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS
|
||||
var/last_hit = 0
|
||||
var/cannot_be_seen = 1
|
||||
var/mob/living/creator = null
|
||||
|
||||
|
||||
// No movement while seen code.
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/New(loc)
|
||||
..()
|
||||
// Give spells
|
||||
add_spell(new/spell/aoe_turf/flicker_lights)
|
||||
add_spell(new/spell/aoe_turf/blindness)
|
||||
add_spell(new/spell/aoe_turf/shatter)
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/DestroySurroundings()
|
||||
if(can_be_seen(get_turf(loc)))
|
||||
if(client)
|
||||
to_chat(src, "<span class='warning'>You cannot move, there are eyes on you!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/attackby(var/obj/item/O as obj, var/mob/user as mob) //banishing the statue is a risky job
|
||||
if(istype(O, /obj/item/weapon/nullrod))
|
||||
visible_message("<span class='warning'>[user] tries to banish [src] with [O]!</span>")
|
||||
if(do_after(user, 15, src))
|
||||
if(banishable)
|
||||
visible_message("<span class='warning'>[src] crumbles into dust!</span>")
|
||||
gib()
|
||||
else
|
||||
visible_message("<span class='warning'>[src] is too strong to be banished!</span>")
|
||||
Paralyse(rand(8,15))
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/death()
|
||||
new /obj/item/stack/material/marble(loc)
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/Move(turf/NewLoc)
|
||||
if(can_be_seen(NewLoc))
|
||||
if(client)
|
||||
to_chat(src, "<span class='warning'>You cannot move, there are eyes on you!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/Life()
|
||||
..()
|
||||
handle_target()
|
||||
handleAnnoyance()
|
||||
if(target_mob) //if there's a victim, statue will use its powers
|
||||
if((annoyance + 4) < 800)
|
||||
annoyance += 4
|
||||
else if ((annoyance - 2) > 0)
|
||||
annoyance -= 2
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/handle_target()
|
||||
if(target_mob) // If we have a target and we're AI controlled
|
||||
var/mob/watching = can_be_seen()
|
||||
// If they're not our target
|
||||
if(watching && (watching != target_mob))
|
||||
// This one is closer.
|
||||
if(get_dist(watching, src) > get_dist(target_mob, src))
|
||||
LoseTarget()
|
||||
target_mob = watching
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/handleAnnoyance()
|
||||
if(respond) //so it won't blind people 24/7
|
||||
respond = 0
|
||||
if (annoyance > 30)
|
||||
AI_blind()
|
||||
annoyance -= 30
|
||||
if (prob(30) && annoyance > 30)
|
||||
var/turf/T = get_turf(loc)
|
||||
if(T.get_lumcount() * 10 > 1.5)
|
||||
AI_flash()
|
||||
annoyance -= 30
|
||||
spawn(20)
|
||||
respond = 1
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/AI_blind()
|
||||
for(var/mob/living/L in oviewers(12, src)) //the range is so big, because it tries to keep out of sight and can't reengage if you get too far
|
||||
if (prob(70))
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if (H.species == "Diona" || H.species == "Promethean" || H == creator)// can't blink and organic
|
||||
return
|
||||
to_chat(L, pick("<span class='notice'>Your eyes feel very heavy.</span>", "<span class='notice'>You blink suddenly!</span>", "<span class='notice'>Your eyes close involuntarily!</span>"))
|
||||
L.Blind(2)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/AI_flash()
|
||||
if (prob(60))
|
||||
visible_message("The statue slowly points at the light.")
|
||||
for(var/obj/machinery/light/L in oview(12, src))
|
||||
L.flicker()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/AI_mirrorshmash()
|
||||
for(var/obj/structure/mirror/M in oview(4, src))
|
||||
if ((!M.shattered )||(!M.glass))
|
||||
visible_message("The statue slowly points at the mirror!")
|
||||
sleep(5)
|
||||
M.shatter()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/AttackTarget()
|
||||
if(can_be_seen(get_turf(loc)))
|
||||
if(client)
|
||||
to_chat(src, "<span class='warning'>You cannot attack, there are eyes on you!</span>")
|
||||
return
|
||||
else
|
||||
spawn(3) //a small delay
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/DoPunch(var/atom/A) //had to redo that, since it's supposed to target only head and upper body
|
||||
if(!Adjacent(A)) // They could've moved in the meantime.
|
||||
return FALSE
|
||||
|
||||
var/damage_to_do = rand(melee_damage_lower, melee_damage_upper)
|
||||
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
if(!isnull(M.outgoing_melee_damage_percent))
|
||||
damage_to_do *= M.outgoing_melee_damage_percent
|
||||
|
||||
// SA attacks can be blocked with shields.
|
||||
if(ishuman(A))
|
||||
var/mob/living/carbon/human/H = A
|
||||
H.adjustBruteLossByPart(damage_to_do*0.9, pick(BP_HEAD, BP_TORSO))
|
||||
playsound(src, attack_sound, 75, 1)
|
||||
|
||||
else if(A.attack_generic(src, damage_to_do, pick(attacktext), attack_armor_type, attack_armor_pen, attack_sharp, attack_edge) && attack_sound)
|
||||
playsound(src, attack_sound, 75, 1)
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/face_atom()
|
||||
if(!can_be_seen(get_turf(loc)))
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/can_be_seen(turf/destination)
|
||||
if(!cannot_be_seen)
|
||||
return null
|
||||
|
||||
var/turf/T = get_turf(loc)
|
||||
/* if(T && destination && T.lighting_overlay)
|
||||
if(T.get_lumcount() * 10 < 0.9 && destination.get_lumcount() * 10 < 0.9) // No one can see us in the darkness, right?
|
||||
return null
|
||||
if(T == destination)
|
||||
destination = null*/
|
||||
|
||||
// loop for viewers.
|
||||
var/list/check_list = list(src)
|
||||
if(destination)
|
||||
check_list += destination
|
||||
//&& (M.see_in_dark > 5)
|
||||
// This loop will, at most, loop twice.
|
||||
for(var/atom/check in check_list)
|
||||
for(var/mob/living/M in viewers(world.view + 1, check) - src)
|
||||
if(M != creator)
|
||||
if(!(M.sdisabilities & BLIND) || !(M.blinded)) //if not blinded
|
||||
if(M.has_vision() && !M.isSynthetic()) //is able to see the statue
|
||||
if(T && destination && T.lighting_overlay) // Check for darkness
|
||||
if(T.get_lumcount() * 10 < 0.9 && destination.get_lumcount() * 10 < 0.9) // No one can see us in the darkness, right? WRONG! Damn cats.
|
||||
if(M.see_in_dark > 5)
|
||||
return M
|
||||
return null
|
||||
return M
|
||||
for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you
|
||||
if(M.occupant && M.occupant.client && M.occupant != creator)
|
||||
if(M.occupant.has_vision() && !M.occupant.isSynthetic())
|
||||
return M.occupant
|
||||
for(var/obj/structure/mirror/M in view(3, check)) //Weeping angels hate mirrors. Probably because they're ugly af
|
||||
if ((!M.shattered )||(!M.glass))
|
||||
annoyance += 3
|
||||
if (prob(5) && (ai_inactive == 0))
|
||||
AI_mirrorshmash()
|
||||
annoyance -= 50
|
||||
return src //if it sees the mirror, it sees itself, right?
|
||||
return null
|
||||
|
||||
// Cannot talk
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/say()
|
||||
return 0
|
||||
|
||||
// Turn to dust when gibbed
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/gib()
|
||||
dust()
|
||||
|
||||
|
||||
// Stop attacking clientless mobs
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/proc/CanAttack(atom/the_target) //ignore clientless mobs
|
||||
if(isliving(the_target))
|
||||
var/mob/living/L = the_target
|
||||
if(!L.client && !L.ckey)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
// Statue powers
|
||||
|
||||
// Flicker lights
|
||||
/spell/aoe_turf/flicker_lights
|
||||
name = "Flicker Lights"
|
||||
desc = "You will trigger a large amount of lights around you to flicker."
|
||||
spell_flags = 0
|
||||
charge_max = 400
|
||||
range = 10
|
||||
|
||||
/spell/aoe_turf/flicker_lights/cast(list/targets, mob/user = usr)
|
||||
for(var/turf/T in targets)
|
||||
for(var/obj/machinery/light/L in T)
|
||||
L.flicker()
|
||||
return
|
||||
|
||||
//Blind AOE
|
||||
/spell/aoe_turf/blindness
|
||||
name = "Blindness"
|
||||
desc = "Your prey will be momentarily blind for you to advance on them."
|
||||
|
||||
message = "<span class='notice'>You glare your eyes.</span>"
|
||||
charge_max = 250
|
||||
spell_flags = 0
|
||||
range = 10
|
||||
|
||||
/spell/aoe_turf/blindness/cast(list/targets, mob/living/simple_animal/hostile/statue/user = usr)
|
||||
for(var/mob/living/L in targets)
|
||||
if(L == user || L == user.creator)
|
||||
continue
|
||||
var/turf/T = get_turf(L.loc)
|
||||
if(T && T in targets)
|
||||
L.Blind(4)
|
||||
return
|
||||
|
||||
|
||||
/spell/aoe_turf/shatter
|
||||
name = "Shatter mirrors!"
|
||||
desc = "That handsome devil has to wait. You have people to make into corpses."
|
||||
|
||||
message = "<span class='notice'>You glare your eyes.</span>"
|
||||
charge_max = 300
|
||||
spell_flags = 0
|
||||
range = 8
|
||||
|
||||
|
||||
|
||||
|
||||
/spell/aoe_turf/shatter/cast(list/targets, mob/user = usr)
|
||||
spawn(50)
|
||||
for(var/obj/structure/mirror/M in view(5, src))
|
||||
if ((!M.shattered )||(!M.glass))
|
||||
M.shatter()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/verb/toggle_darkness()
|
||||
set name = "Toggle Darkness"
|
||||
set desc = "You ARE the darkness."
|
||||
set category = "Abilities"
|
||||
seedarkness = !seedarkness
|
||||
plane_holder.set_vis(VIS_FULLBRIGHT, !seedarkness)
|
||||
to_chat(src,"You [seedarkness ? "now" : "no longer"] see darkness.")
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/restrained()
|
||||
. = ..()
|
||||
if(can_be_seen(loc))
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/ListTargets(dist = view_range)
|
||||
var/list/L = mobs_in_xray_view(dist, src)
|
||||
|
||||
for(var/obj/mecha/M in mechas_list)
|
||||
if ((M.z == src.z) && (get_dist(src, M) <= dist) && (isInSight(src,M)))
|
||||
L += M
|
||||
if(creator)
|
||||
L -= creator
|
||||
|
||||
return L
|
||||
|
||||
|
||||
|
||||
/obj/item/cursed_marble //slime cube copypaste
|
||||
name = "marble slab"
|
||||
desc = "A peculiar slab of marble, radiating with dark energy."
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
icon_state = "sheet-marble"
|
||||
description_info = "Summons the Statue - a mysterious powerful creature, that can move only when unsurveyed by living eyes."
|
||||
var/searching = 0
|
||||
|
||||
/obj/item/cursed_marble/attack_self(mob/user as mob)
|
||||
if(!searching)
|
||||
to_chat(user, "<span class='warning'>You rub the slab in hopes a wandering spirit wishes to inhabit it. [src] starts to sparkle!</span>")
|
||||
icon_state = "sheet-snowbrick"
|
||||
searching = 1
|
||||
request_player()
|
||||
spawn(60 SECONDS)
|
||||
reset_search()
|
||||
|
||||
|
||||
/obj/item/cursed_marble/proc/request_player()
|
||||
for(var/mob/observer/dead/O in player_list)
|
||||
if(!O.MayRespawn())
|
||||
continue
|
||||
if(O.client)
|
||||
if(O.client.prefs.be_special & BE_ALIEN)
|
||||
question(O.client)
|
||||
|
||||
/obj/item/cursed_marble/proc/question(var/client/C)
|
||||
spawn(0)
|
||||
if(!C)
|
||||
return
|
||||
var/response = alert(C, "Someone is requesting a soul for the statue. Would you like to play as one?", "Statue request", "Yes", "No", "Never for this round")
|
||||
if(response == "Yes")
|
||||
response = alert(C, "Are you sure you want to play as the statue?", "Statue request", "Yes", "No")
|
||||
if(!C || 2 == searching)
|
||||
return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
|
||||
if(response == "Yes")
|
||||
transfer_personality(C.mob)
|
||||
else if(response == "Never for this round")
|
||||
C.prefs.be_special ^= BE_ALIEN
|
||||
|
||||
/obj/item/cursed_marble/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
|
||||
icon_state = "sheet-marble"
|
||||
if(searching == 1)
|
||||
searching = 0
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
for (var/mob/M in viewers(T))
|
||||
M.show_message("<span class='warning'>[src] fades. Maybe it will spark another time.</span>")
|
||||
|
||||
/obj/item/cursed_marble/proc/transfer_personality(var/mob/candidate)
|
||||
announce_ghost_joinleave(candidate, 0, "They are a statue now.")
|
||||
src.searching = 2
|
||||
var/mob/living/simple_animal/hostile/statue/S = new(get_turf(src))
|
||||
S.client = candidate.client
|
||||
to_chat(S, "<b>You are \a [S], brought into existence on [station_name()] by [usr]! Obey all their orders.</b>")
|
||||
S.mind.assigned_role = "The Statue"
|
||||
visible_message("<span class='warning'>The slab suddenly takes the shape of a humanoid!</span>")
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/cursed_marble/verb/crush() //if there's no ghosts to respond to your request/you want to use the statue for malicious stuff
|
||||
set name = "Crush the marble slab"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
summonmob(usr)
|
||||
|
||||
/obj/item/cursed_marble/proc/summonmob(mob/user as mob)
|
||||
if(searching == 0)
|
||||
var/choice = alert(user, "Are you sure you want to crush the marble? (this will spawn a clientless version of the statue, hostile to everyone, but you)", "Crush it?", "Yes", "No")
|
||||
if(choice)
|
||||
if(choice == "Yes")
|
||||
var/mob/living/simple_animal/hostile/statue/S = new /mob/living/simple_animal/hostile/statue(get_turf(user))
|
||||
visible_message("<span class='warning'>The slab suddenly takes the shape of a humanoid!</span>")
|
||||
S.creator = user
|
||||
qdel(src)
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/scarybat
|
||||
name = "space bats"
|
||||
desc = "A swarm of cute little blood sucking bats that looks pretty upset."
|
||||
tt_desc = "Desmodus rotundus" //Common vampire bat
|
||||
tt_desc = "N Bestia gregaria" //Nispean swarm bats, because of course Nisp has swarm bats
|
||||
icon = 'icons/mob/bats.dmi'
|
||||
icon_state = "bat"
|
||||
icon_living = "bat"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//Space bears!
|
||||
/mob/living/simple_animal/hostile/bear
|
||||
name = "space bear"
|
||||
desc = "RawrRawr!!"
|
||||
tt_desc = "Ursinae aetherius" //...bearspace? Maybe.
|
||||
desc = "A product of Space Russia?"
|
||||
tt_desc = "U Ursinae aetherius" //...bearspace? Maybe.
|
||||
icon_state = "bear"
|
||||
icon_living = "bear"
|
||||
icon_dead = "bear_dead"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/carp
|
||||
name = "space carp"
|
||||
desc = "A ferocious, fang-bearing creature that resembles a fish."
|
||||
tt_desc = "Cyprinus aetherius" //carpspace? maybe
|
||||
tt_desc = "U Cyprinus aetherius" //carpspace? maybe
|
||||
icon_state = "carp"
|
||||
icon_living = "carp"
|
||||
icon_dead = "carp_dead"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/mob/living/simple_animal/cat
|
||||
name = "cat"
|
||||
desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
|
||||
tt_desc = "Felis catus"
|
||||
tt_desc = "E Felis silvestris catus"
|
||||
intelligence_level = SA_ANIMAL
|
||||
icon_state = "cat2"
|
||||
item_state = "cat2"
|
||||
@@ -156,7 +156,7 @@
|
||||
/mob/living/simple_animal/cat/fluff/Runtime
|
||||
name = "Runtime"
|
||||
desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
|
||||
tt_desc = "Felis medicalis"
|
||||
tt_desc = "E Felis silvestris medicalis" //a hypoallergenic breed produced by NT for... medical purposes? Sure.
|
||||
gender = FEMALE
|
||||
icon_state = "cat"
|
||||
item_state = "cat"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "corgi"
|
||||
real_name = "corgi"
|
||||
desc = "It's a corgi."
|
||||
tt_desc = "Canis familiaris"
|
||||
tt_desc = "E Canis lupus familiaris"
|
||||
intelligence_level = SA_ANIMAL
|
||||
icon_state = "corgi"
|
||||
icon_living = "corgi"
|
||||
@@ -38,7 +38,6 @@
|
||||
real_name = "Ian" //Intended to hold the name without altering it.
|
||||
gender = MALE
|
||||
desc = "It's a corgi."
|
||||
tt_desc = "Canis commandus"
|
||||
var/turns_since_scan = 0
|
||||
var/obj/movement_target
|
||||
response_help = "pets"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/mob/living/simple_animal/crab
|
||||
name = "crab"
|
||||
desc = "A hard-shelled crustacean. Seems quite content to lounge around all the time."
|
||||
tt_desc = "Ranina ranina"
|
||||
tt_desc = "E Cancer bellianus"
|
||||
icon_state = "crab"
|
||||
icon_living = "crab"
|
||||
icon_dead = "crab_dead"
|
||||
@@ -52,6 +52,7 @@
|
||||
/mob/living/simple_animal/giant_crab
|
||||
name = "giant crab"
|
||||
desc = "A large, hard-shelled crustacean. This one is mostly grey."
|
||||
tt_desc = "S Cancer holligus"
|
||||
icon_state = "sif_crab"
|
||||
icon_living = "sif_crab"
|
||||
icon_dead = "sif_crab_dead"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/mob/living/simple_animal/retaliate/goat
|
||||
name = "goat"
|
||||
desc = "Not known for their pleasant disposition."
|
||||
tt_desc = "Oreamnos americanus"
|
||||
tt_desc = "E Oreamnos americanus"
|
||||
icon_state = "goat"
|
||||
icon_living = "goat"
|
||||
icon_dead = "goat_dead"
|
||||
@@ -86,7 +86,7 @@
|
||||
/mob/living/simple_animal/cow
|
||||
name = "cow"
|
||||
desc = "Known for their milk, just don't tip them over."
|
||||
tt_desc = "Bos taurus"
|
||||
tt_desc = "E Bos taurus"
|
||||
icon_state = "cow"
|
||||
icon_living = "cow"
|
||||
icon_dead = "cow_dead"
|
||||
@@ -155,7 +155,7 @@
|
||||
/mob/living/simple_animal/chick
|
||||
name = "\improper chick"
|
||||
desc = "Adorable! They make such a racket though."
|
||||
tt_desc = "Gallus domesticus"
|
||||
tt_desc = "E Gallus gallus"
|
||||
icon_state = "chick"
|
||||
icon_living = "chick"
|
||||
icon_dead = "chick_dead"
|
||||
@@ -206,7 +206,7 @@ var/global/chicken_count = 0
|
||||
/mob/living/simple_animal/chicken
|
||||
name = "\improper chicken"
|
||||
desc = "Hopefully the eggs are good this season."
|
||||
tt_desc = "Gallus domesticus"
|
||||
tt_desc = "E Gallus gallus"
|
||||
icon_state = "chicken"
|
||||
icon_living = "chicken"
|
||||
icon_dead = "chicken_dead"
|
||||
|
||||
@@ -39,36 +39,42 @@
|
||||
|
||||
/mob/living/simple_animal/fish/bass
|
||||
name = "bass"
|
||||
tt_desc = "E Micropterus notius"
|
||||
icon_state = "bass-swim"
|
||||
icon_living = "bass-swim"
|
||||
icon_dead = "bass-dead"
|
||||
|
||||
/mob/living/simple_animal/fish/trout
|
||||
name = "trout"
|
||||
tt_desc = "E Salmo trutta"
|
||||
icon_state = "trout-swim"
|
||||
icon_living = "trout-swim"
|
||||
icon_dead = "trout-dead"
|
||||
|
||||
/mob/living/simple_animal/fish/salmon
|
||||
name = "salmon"
|
||||
tt_desc = "E Oncorhynchus nerka"
|
||||
icon_state = "salmon-swim"
|
||||
icon_living = "salmon-swim"
|
||||
icon_dead = "salmon-dead"
|
||||
|
||||
/mob/living/simple_animal/fish/perch
|
||||
name = "perch"
|
||||
tt_desc = "E Perca flavescens"
|
||||
icon_state = "perch-swim"
|
||||
icon_living = "perch-swim"
|
||||
icon_dead = "perch-dead"
|
||||
|
||||
/mob/living/simple_animal/fish/pike
|
||||
name = "pike"
|
||||
tt_desc = "E Esox aquitanicus"
|
||||
icon_state = "pike-swim"
|
||||
icon_living = "pike-swim"
|
||||
icon_dead = "pike-dead"
|
||||
|
||||
/mob/living/simple_animal/fish/koi
|
||||
name = "koi"
|
||||
tt_desc = "E Cyprinus rubrofuscus"
|
||||
icon_state = "koi-swim"
|
||||
icon_living = "koi-swim"
|
||||
icon_dead = "koi-dead"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/mob/living/simple_animal/hostile/giant_spider
|
||||
name = "giant spider"
|
||||
desc = "Furry and brown, it makes you shudder to look at it. This one has deep red eyes."
|
||||
tt_desc = "Atrax robustus gigantus"
|
||||
tt_desc = "X Brachypelma phorus"
|
||||
icon_state = "guard"
|
||||
icon_living = "guard"
|
||||
icon_dead = "guard_dead"
|
||||
@@ -68,6 +68,7 @@ Nurse Family
|
||||
//nursemaids - these create webs and eggs
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse
|
||||
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes."
|
||||
tt_desc = "X Brachypelma phorus laetus"
|
||||
icon_state = "nurse"
|
||||
icon_living = "nurse"
|
||||
icon_dead = "nurse_dead"
|
||||
@@ -102,6 +103,7 @@ Nurse Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/queen
|
||||
desc = "Absolutely gigantic, this creature is horror itself."
|
||||
tt_desc = "X Brachypelma phorus tyrannus"
|
||||
icon = 'icons/mob/64x64.dmi'
|
||||
icon_state = "spider_queen"
|
||||
icon_living = "spider_queen"
|
||||
@@ -124,6 +126,7 @@ Nurse Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/webslinger
|
||||
desc = "Furry and green, it makes you shudder to look at it. This one has brilliant green eyes, and a cloak of web."
|
||||
tt_desc = "X Brachypelma phorus balisticus"
|
||||
icon_state = "webslinger"
|
||||
icon_living = "webslinger"
|
||||
icon_dead = "webslinger_dead"
|
||||
@@ -164,6 +167,7 @@ Nurse Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/carrier
|
||||
desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes."
|
||||
tt_desc = "X Brachypelma phorus gerulus"
|
||||
icon_state = "carrier"
|
||||
icon_living = "carrier"
|
||||
icon_dead = "carrier_dead"
|
||||
@@ -223,6 +227,7 @@ Hunter Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
|
||||
tt_desc = "X Brachypelma phorus venandi"
|
||||
icon_state = "hunter"
|
||||
icon_living = "hunter"
|
||||
icon_dead = "hunter_dead"
|
||||
@@ -235,6 +240,7 @@ Hunter Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/lurker
|
||||
desc = "Translucent and white, it makes you shudder to look at it. This one has incandescent red eyes."
|
||||
tt_desc = "X Brachypelma phorus insidator"
|
||||
icon_state = "lurker"
|
||||
icon_living = "lurker"
|
||||
icon_dead = "lurker_dead"
|
||||
@@ -258,6 +264,7 @@ Hunter Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/tunneler
|
||||
desc = "Sandy and brown, it makes you shudder to look at it. This one has glittering yellow eyes."
|
||||
tt_desc = "X Brachypelma phorus cannalis"
|
||||
icon_state = "tunneler"
|
||||
icon_living = "tunneler"
|
||||
icon_dead = "tunneler_dead"
|
||||
@@ -288,6 +295,7 @@ Guard Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/pepper
|
||||
desc = "Red and brown, it makes you shudder to look at it. This one has glinting red eyes."
|
||||
tt_desc = "X Brachypelma phorus ignis"
|
||||
icon_state = "pepper"
|
||||
icon_living = "pepper"
|
||||
icon_dead = "pepper_dead"
|
||||
@@ -308,6 +316,7 @@ Guard Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/thermic
|
||||
desc = "Mirage-cloaked and orange, it makes you shudder to look at it. This one has simmering orange eyes."
|
||||
tt_desc = "X Brachypelma phorus incaendium"
|
||||
icon_state = "pit"
|
||||
icon_living = "pit"
|
||||
icon_dead = "pit_dead"
|
||||
@@ -324,6 +333,7 @@ Guard Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/electric
|
||||
desc = "Spined and yellow, it makes you shudder to look at it. This one has flickering gold eyes."
|
||||
tt_desc = "X Brachypelma phorus aromatitis"
|
||||
icon_state = "spark"
|
||||
icon_living = "spark"
|
||||
icon_dead = "spark_dead"
|
||||
@@ -347,6 +357,7 @@ Guard Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/phorogenic
|
||||
desc = "Crystalline and purple, it makes you shudder to look at it. This one has haunting purple eyes."
|
||||
tt_desc = "X Brachypelma phorus phorus"
|
||||
icon_state = "phoron"
|
||||
icon_living = "phoron"
|
||||
icon_dead = "phoron_dead"
|
||||
@@ -380,6 +391,7 @@ Guard Family
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/frost
|
||||
desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes."
|
||||
tt_desc = "X Brachypelma phorus pruinae"
|
||||
icon_state = "frost"
|
||||
icon_living = "frost"
|
||||
icon_dead = "frost_dead"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/goose
|
||||
name = "space goose"
|
||||
desc = "That's no duck. That's a space goose. You have a bad feeling about this."
|
||||
tt_desc = "Anser aetherius" //Goose space?!
|
||||
/mob/living/simple_animal/hostile/goose //hey are these even in the game
|
||||
name = "goose"
|
||||
desc = "It looks pretty angry!"
|
||||
tt_desc = "E Branta canadensis" //that iconstate is just a regular goose
|
||||
icon_state = "goose"
|
||||
icon_living = "goose"
|
||||
icon_dead = "goose_dead"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/simple_animal/lizard
|
||||
name = "Lizard"
|
||||
desc = "A cute tiny lizard."
|
||||
tt_desc = "Gekko gecko"
|
||||
tt_desc = "E Anolis cuvieri"
|
||||
icon = 'icons/mob/critter.dmi'
|
||||
icon_state = "lizard"
|
||||
icon_living = "lizard"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/yithian
|
||||
name = "yithian"
|
||||
desc = "A friendly creature vaguely resembling an oversized snail without a shell."
|
||||
tt_desc = "J Escargot escargot" // a product of Jade, which is a planet that totally exists
|
||||
icon_state = "yithian"
|
||||
icon_living = "yithian"
|
||||
icon_dead = "yithian_dead"
|
||||
@@ -11,6 +12,7 @@
|
||||
/mob/living/simple_animal/tindalos
|
||||
name = "tindalos"
|
||||
desc = "It looks like a large, flightless grasshopper."
|
||||
tt_desc = "J Locusta bruchus"
|
||||
icon_state = "tindalos"
|
||||
icon_living = "tindalos"
|
||||
icon_dead = "tindalos_dead"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "mouse"
|
||||
real_name = "mouse"
|
||||
desc = "It's a small rodent."
|
||||
tt_desc = "Mus musculus"
|
||||
tt_desc = "E Mus musculus"
|
||||
icon_state = "mouse_gray"
|
||||
item_state = "mouse_gray"
|
||||
icon_living = "mouse_gray"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
/mob/living/simple_animal/parrot
|
||||
name = "parrot"
|
||||
desc = "The parrot squawks, \"It's a parrot! BAWWK!\""
|
||||
tt_desc = "Poicephalus robustus"
|
||||
tt_desc = "E Ara macao"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_state = "parrot_fly"
|
||||
icon_living = "parrot_fly"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/retaliate/diyaab
|
||||
name = "diyaab"
|
||||
desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion."
|
||||
tt_desc = "S Choeros hirtus" //diyaab and shantak are technically reletives!
|
||||
faction = "diyaab"
|
||||
icon_state = "diyaab"
|
||||
icon_living = "diyaab"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/savik
|
||||
name = "savik"
|
||||
desc = "A fast, armoured predator accustomed to hiding and ambushing in cold terrain."
|
||||
tt_desc = "S Pistris tellus" //landshark
|
||||
faction = "savik"
|
||||
icon_state = "savik"
|
||||
icon_living = "savik"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/shantak
|
||||
name = "shantak"
|
||||
desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though."
|
||||
tt_desc = "S Choeros shantak"
|
||||
faction = "shantak"
|
||||
icon_state = "shantak"
|
||||
icon_living = "shantak"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/tomato
|
||||
name = "tomato"
|
||||
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
|
||||
tt_desc = "X Solanum abominable"
|
||||
icon_state = "tomato"
|
||||
icon_living = "tomato"
|
||||
icon_dead = "tomato_dead"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/tree
|
||||
name = "pine tree"
|
||||
desc = "A pissed off tree-like alien. It seems annoyed with the festivities..."
|
||||
tt_desc = "X Festivus tyrannus"
|
||||
icon = 'icons/obj/flora/pinetrees.dmi'
|
||||
icon_state = "pine_1"
|
||||
icon_living = "pine_1"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/clown
|
||||
name = "clown"
|
||||
desc = "A denizen of clown planet"
|
||||
tt_desc = "E Homo sapiens corydon" //this is an actual clown, as opposed to someone dressed up as one
|
||||
icon_state = "clown"
|
||||
icon_living = "clown"
|
||||
icon_dead = "clown_dead"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user