mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
Conflicts: code/setup.dm icons/mob/items_righthand.dmi maps/exodus-1.dmm maps/exodus-5.dmm
This commit is contained in:
@@ -36,7 +36,7 @@
|
||||
//Removes a few problematic characters
|
||||
/proc/sanitize_simple(var/t,var/list/repl_chars = list("\n"="#","\t"="#"))
|
||||
for(var/char in repl_chars)
|
||||
replacetext(t, char, repl_chars[char])
|
||||
t = replacetext(t, char, repl_chars[char])
|
||||
return t
|
||||
|
||||
/proc/readd_quotes(var/t)
|
||||
|
||||
@@ -374,7 +374,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
var/mob/living/silicon/ai/selected
|
||||
var/list/active = active_ais()
|
||||
for(var/mob/living/silicon/ai/A in active)
|
||||
if(!selected || (selected.connected_robots > A.connected_robots))
|
||||
if(!selected || (selected.connected_robots.len > A.connected_robots.len))
|
||||
selected = A
|
||||
|
||||
return selected
|
||||
|
||||
@@ -696,20 +696,31 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
name = "Weapons crate"
|
||||
contains = list(/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun/energy/laser,
|
||||
/obj/item/weapon/gun/energy/laser,
|
||||
/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/weapon/gun/projectile/sec,
|
||||
/obj/item/weapon/gun/projectile/sec,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/storage/box/flashbangs)
|
||||
cost = 30
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Weapons crate"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/flareguns
|
||||
name = "Flare guns crate"
|
||||
contains = list(/obj/item/weapon/gun/projectile/sec/flash,
|
||||
/obj/item/ammo_magazine/c45m/flash,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare,
|
||||
/obj/item/weapon/storage/box/flashshells)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Flare gun crate"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/eweapons
|
||||
name = "Experimental weapons crate"
|
||||
@@ -777,7 +788,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
name = "Energy weapons crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/laser,
|
||||
/obj/item/weapon/gun/energy/laser,
|
||||
/obj/item/weapon/gun/energy/gun)
|
||||
/obj/item/weapon/gun/energy/laser)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "energy weapons crate"
|
||||
@@ -789,9 +800,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
contains = list(/obj/item/clothing/suit/armor/bulletproof,
|
||||
/obj/item/clothing/suit/armor/bulletproof,
|
||||
/obj/item/weapon/storage/box/shotgunammo,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump,
|
||||
/obj/item/weapon/storage/box/shotgunshells,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat)
|
||||
cost = 50
|
||||
cost = 65
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Shotgun crate"
|
||||
access = access_armory
|
||||
|
||||
@@ -34,8 +34,7 @@ var/const/BORG_WIRE_CAMERA = 16
|
||||
|
||||
if (BORG_WIRE_AI_CONTROL) //Cut the AI wire to reset AI control
|
||||
if(!mended)
|
||||
if (R.connected_ai)
|
||||
R.connected_ai = null
|
||||
R.disconnect_from_ai()
|
||||
|
||||
if (BORG_WIRE_CAMERA)
|
||||
if(!isnull(R.camera) && !R.scrambledcodes)
|
||||
@@ -56,12 +55,8 @@ var/const/BORG_WIRE_CAMERA = 16
|
||||
if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI
|
||||
if(!R.emagged)
|
||||
var/mob/living/silicon/ai/new_ai = select_active_ai(R)
|
||||
if(new_ai && (new_ai != R.connected_ai))
|
||||
R.connected_ai.connected_robots -= src
|
||||
R.connected_ai = new_ai
|
||||
new_ai.connected_robots += src
|
||||
R.notify_ai(1)
|
||||
R.sync()
|
||||
R.connect_to_ai(new_ai)
|
||||
|
||||
if (BORG_WIRE_CAMERA)
|
||||
if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes)
|
||||
R.camera.kick_viewers() // Kick anyone watching the Cyborg's camera
|
||||
|
||||
@@ -38,6 +38,11 @@
|
||||
return cameras
|
||||
|
||||
/area/proc/atmosalert(danger_level, var/alarm_source)
|
||||
if (danger_level == 0)
|
||||
atmosphere_alarm.clearAlarm(master, alarm_source)
|
||||
else
|
||||
atmosphere_alarm.triggerAlarm(master, alarm_source, severity = danger_level)
|
||||
|
||||
//Check all the alarms before lowering atmosalm. Raising is perfectly fine.
|
||||
for (var/area/RA in related)
|
||||
for (var/obj/machinery/alarm/AA in RA)
|
||||
@@ -51,11 +56,6 @@
|
||||
else if (danger_level >= 2 && atmosalm < 2)
|
||||
air_doors_close()
|
||||
|
||||
if (danger_level == 0)
|
||||
atmosphere_alarm.clearAlarm(master, alarm_source)
|
||||
else
|
||||
atmosphere_alarm.triggerAlarm(master, alarm_source, severity = danger_level)
|
||||
|
||||
atmosalm = danger_level
|
||||
for(var/area/RA in related)
|
||||
for (var/obj/machinery/alarm/AA in RA)
|
||||
|
||||
@@ -207,6 +207,7 @@ its easier to just keep the beam vertical.
|
||||
f_name += "oil-stained [name][infix]."
|
||||
|
||||
user << "\icon[src] That's [f_name] [suffix]"
|
||||
user << desc
|
||||
|
||||
return distance == -1 || (get_dist(src, user) <= distance)
|
||||
|
||||
|
||||
@@ -32,15 +32,15 @@
|
||||
if(L.name == "carpspawn")
|
||||
ninjastart.Add(L)
|
||||
|
||||
if(ninjastart.len == 0 && latejoin.len > 0)
|
||||
ninja.current << "<B>\red No spawneable locations could be found. Defaulting to latejoin.</B>"
|
||||
if(ninjastart.len)
|
||||
return 1
|
||||
else
|
||||
ninja.current << "<B>\red No spawneable locations could be found. Aborting.</B>"
|
||||
return 0
|
||||
|
||||
if(ninjastart.len == 0 && latejoin.len > 0)
|
||||
ninja.current << "<B>\red No spawn locations could be found. Defaulting to late-join locations.</B>"
|
||||
return 1
|
||||
|
||||
ninja.current << "<B>\red No spawn locations could be found. Aborting.</B>"
|
||||
return 0
|
||||
|
||||
/datum/game_mode/ninja/pre_setup()
|
||||
for(var/datum/mind/ninja in ninjas)
|
||||
ninja.current << browse(null, "window=playersetup")
|
||||
|
||||
@@ -491,7 +491,7 @@
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "air_alarm.tmpl", src.name, 625, 625, master_ui = master_ui, custom_state = custom_state)
|
||||
ui = new(user, src, ui_key, "air_alarm.tmpl", src.name, 325, 625, master_ui = master_ui, custom_state = custom_state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
@@ -93,6 +93,6 @@
|
||||
/datum/topic_state/air_alarm/href_list(var/mob/user)
|
||||
var/list/extra_href = list()
|
||||
extra_href["remote_connection"] = 1
|
||||
extra_href["remote_access"] = user && (atmos_control.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO))
|
||||
extra_href["remote_access"] = user && (user.isAI() || atmos_control.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO))
|
||||
|
||||
return extra_href
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
var/obj/nano_module/alarm_monitor/engineering/alarm_monitor
|
||||
|
||||
/obj/machinery/computer/station_alert/New()
|
||||
..()
|
||||
alarm_monitor = new(src)
|
||||
alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon)
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/station_alert/Del()
|
||||
alarm_monitor.unregister(src)
|
||||
@@ -38,7 +38,7 @@
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
var/list/alarms = alarm_monitor.active_alarms()
|
||||
var/list/alarms = alarm_monitor.major_alarms()
|
||||
if(alarms.len)
|
||||
icon_state = "alert:2"
|
||||
else
|
||||
|
||||
@@ -86,12 +86,13 @@
|
||||
if(3.0)
|
||||
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];back=1'>Backup To Disk</A><BR>\n<A href='?src=\ref[];u_load=1'>Upload From disk</A><BR>\n<A href='?src=\ref[];del_all=1'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];screen=1'>Back</A>", src, src, src, src)
|
||||
if(4.0)
|
||||
var/icon/front = active1.fields["photo_front"]
|
||||
var/icon/side = active1.fields["photo_side"]
|
||||
usr << browse_rsc(front, "front.png")
|
||||
usr << browse_rsc(side, "side.png")
|
||||
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
|
||||
var/icon/front = active1.fields["photo_front"]
|
||||
var/icon/side = active1.fields["photo_side"]
|
||||
usr << browse_rsc(front, "front.png")
|
||||
usr << browse_rsc(side, "side.png")
|
||||
|
||||
dat += "<table><tr><td>Name: [active1.fields["name"]] \
|
||||
ID: [active1.fields["id"]]<BR>\n \
|
||||
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n \
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
..()
|
||||
initialize_directions = dir
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/Del()
|
||||
if(occupant)
|
||||
occupant.loc = loc
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/initialize()
|
||||
if(node) return
|
||||
var/node_connect = dir
|
||||
@@ -37,7 +42,6 @@
|
||||
if(!node)
|
||||
return
|
||||
if(!on)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
if(occupant)
|
||||
@@ -52,7 +56,6 @@
|
||||
if(abs(temperature_archived-air_contents.temperature) > 1)
|
||||
network.update = 1
|
||||
|
||||
updateUsrDialog()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -188,7 +191,6 @@
|
||||
var/mob/M = G:affecting
|
||||
if(put_mob(M))
|
||||
del(G)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/update_icon()
|
||||
|
||||
@@ -234,6 +234,12 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/cryopod/Del()
|
||||
if(occupant)
|
||||
occupant.loc = loc
|
||||
occupant.resting = 1
|
||||
..()
|
||||
|
||||
/obj/machinery/cryopod/initialize()
|
||||
..()
|
||||
|
||||
|
||||
@@ -141,9 +141,6 @@
|
||||
if(user.last_airflow > world.time - vsc.airflow_delay) //Fakkit
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if(!src.requiresID())
|
||||
user = null
|
||||
|
||||
if(density)
|
||||
if(allowed(user)) open()
|
||||
else do_animate("deny")
|
||||
@@ -208,10 +205,6 @@
|
||||
return
|
||||
if(src.operating > 0 || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
|
||||
src.add_fingerprint(user)
|
||||
if(!Adjacent(user))
|
||||
user = null
|
||||
if(!src.requiresID())
|
||||
user = null
|
||||
|
||||
if(istype(I, /obj/item/stack/sheet/metal))
|
||||
if(stat & BROKEN)
|
||||
@@ -437,6 +430,11 @@
|
||||
/obj/machinery/door/proc/requiresID()
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/allowed(mob/M)
|
||||
if(!requiresID())
|
||||
return ..(null) //don't care who they are or what they have, act as if they're NOTHING
|
||||
return ..(M)
|
||||
|
||||
/obj/machinery/door/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master)
|
||||
return 0
|
||||
|
||||
@@ -234,9 +234,6 @@
|
||||
|
||||
|
||||
src.add_fingerprint(user)
|
||||
if (!src.requiresID())
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
|
||||
if (src.allowed(user))
|
||||
if (src.density)
|
||||
|
||||
@@ -16,27 +16,30 @@
|
||||
var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
|
||||
|
||||
|
||||
proc/drive(amount)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
use_power(500)
|
||||
var/O_limit
|
||||
var/atom/target = get_edge_target_turf(src, dir)
|
||||
for(var/atom/movable/O in loc)
|
||||
if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
|
||||
O_limit++
|
||||
if(O_limit >= 20)
|
||||
for(var/mob/M in hearers(src, null))
|
||||
M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items."
|
||||
break
|
||||
use_power(500)
|
||||
spawn( 0 )
|
||||
O.throw_at(target, drive_range * power, power)
|
||||
flick("mass_driver1", src)
|
||||
/obj/machinery/mass_driver/proc/drive(amount)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
use_power(500)
|
||||
var/O_limit
|
||||
var/atom/target = get_edge_target_turf(src, dir)
|
||||
for(var/atom/movable/O in loc)
|
||||
if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
|
||||
O_limit++
|
||||
if(O_limit >= 20)
|
||||
for(var/mob/M in hearers(src, null))
|
||||
M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items."
|
||||
break
|
||||
use_power(500)
|
||||
spawn( 0 )
|
||||
O.throw_at(target, drive_range * power, power)
|
||||
flick("mass_driver1", src)
|
||||
return
|
||||
|
||||
emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
drive()
|
||||
..(severity)
|
||||
/obj/machinery/mass_driver/emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
drive()
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/mass_driver/process()
|
||||
return
|
||||
@@ -617,6 +617,7 @@
|
||||
/obj/machinery/suit_cycler/Del()
|
||||
del(wires) // qdel
|
||||
wires = null
|
||||
..()
|
||||
|
||||
/obj/machinery/suit_cycler/engineering
|
||||
name = "Engineering suit cycler"
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
if(robot)
|
||||
robot.SetLockDown(0)
|
||||
robot.notify_ai(1)
|
||||
|
||||
/obj/machinery/transformer/conveyor/New()
|
||||
..()
|
||||
|
||||
@@ -760,6 +760,18 @@
|
||||
user << "You screw the cell in place"
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/device/multitool))
|
||||
if(state>=3 && src.occupant)
|
||||
user << "You attempt to eject the pilot using the maintenance controls."
|
||||
if(src.occupant.stat)
|
||||
src.go_out()
|
||||
src.log_message("[src.occupant] was ejected using the maintenance controls.")
|
||||
else
|
||||
user << "<span class='warning'>Your attempt is rejected.</span>"
|
||||
src.occupant_message("<span class='warning'>An attempt to eject you was made using the maintenance controls.</span>")
|
||||
src.log_message("Eject attempt made using maintenance controls - rejected.")
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/cell))
|
||||
if(state==4)
|
||||
if(!src.cell)
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/obj/effect/landmark/start/ninja/New()
|
||||
..()
|
||||
ninjastart += loc
|
||||
ninjastart += src
|
||||
|
||||
//Costume spawner landmarks
|
||||
|
||||
|
||||
@@ -226,7 +226,6 @@
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
callHook("borgify", list(O))
|
||||
O.notify_ai(1)
|
||||
O.Namepick()
|
||||
|
||||
del(src)
|
||||
|
||||
@@ -36,12 +36,12 @@
|
||||
icon = 'icons/mob/custom-synthetic.dmi'
|
||||
R.icon_state = "[R.ckey]-Standard"
|
||||
del(R.module)
|
||||
R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name)
|
||||
R.module = null
|
||||
R.camera.remove_networks(list("Engineering","Medical","MINE"))
|
||||
R.updatename("Default")
|
||||
R.status_flags |= CANPUSH
|
||||
R.updateicon()
|
||||
R.notify_ai(2)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R)
|
||||
if(..()) return 0
|
||||
R.notify_ai(3, R.name, heldname)
|
||||
R.notify_ai(ROBOT_NOTIFICATION_NEW_NAME, R.name, heldname)
|
||||
R.name = heldname
|
||||
R.custom_name = heldname
|
||||
R.real_name = heldname
|
||||
@@ -84,7 +84,7 @@
|
||||
R.stat = CONSCIOUS
|
||||
dead_mob_list -= R
|
||||
living_mob_list |= R
|
||||
R.notify_ai(1)
|
||||
R.notify_ai(ROBOT_NOTIFICATION_NEW_UNIT)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -177,8 +177,8 @@
|
||||
icon_state = "energykill100"
|
||||
item_to_spawn()
|
||||
return pick(prob(2);/obj/item/weapon/gun/energy/laser,\
|
||||
prob(1);/obj/item/weapon/gun/energy/gun,\
|
||||
prob(2);/obj/item/weapon/gun/energy/stunrevolver)
|
||||
prob(2);/obj/item/weapon/gun/energy/gun,\
|
||||
prob(1);/obj/item/weapon/gun/energy/stunrevolver)
|
||||
|
||||
/obj/random/projectile
|
||||
name = "Random Projectile Weapon"
|
||||
@@ -206,15 +206,15 @@
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "45-10"
|
||||
item_to_spawn()
|
||||
return pick(prob(3);/obj/item/weapon/storage/box/beanbags,\
|
||||
prob(1);/obj/item/weapon/storage/box/shotgunammo,\
|
||||
prob(2);/obj/item/weapon/storage/box/shotgunshells,\
|
||||
prob(2);/obj/item/weapon/storage/box/stunshells,\
|
||||
prob(1);/obj/item/ammo_magazine/c45m,\
|
||||
prob(2);/obj/item/ammo_magazine/c45m/rubber,\
|
||||
prob(2);/obj/item/ammo_magazine/c45m/flash,\
|
||||
prob(1);/obj/item/ammo_magazine/mc9mmt,\
|
||||
prob(3);/obj/item/ammo_magazine/mc9mmt/rubber)
|
||||
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,\
|
||||
prob(2);/obj/item/weapon/storage/box/shotgunammo,\
|
||||
prob(4);/obj/item/weapon/storage/box/shotgunshells,\
|
||||
prob(1);/obj/item/weapon/storage/box/stunshells,\
|
||||
prob(2);/obj/item/ammo_magazine/c45m,\
|
||||
prob(4);/obj/item/ammo_magazine/c45m/rubber,\
|
||||
prob(4);/obj/item/ammo_magazine/c45m/flash,\
|
||||
prob(2);/obj/item/ammo_magazine/mc9mmt,\
|
||||
prob(6);/obj/item/ammo_magazine/mc9mmt/rubber)
|
||||
|
||||
|
||||
/obj/random/action_figure
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Holds item of clothing you shouldn't be showing off in the hallways."
|
||||
icon = 'icons/obj/closet.dmi'
|
||||
icon_state = "cabinet_closed"
|
||||
|
||||
density = 1
|
||||
|
||||
/obj/structure/undies_wardrobe/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
@@ -282,6 +282,12 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_w_uniform
|
||||
cost = 2
|
||||
|
||||
/datum/gear/blazer_blue
|
||||
display_name = "blazer, blue"
|
||||
path = /obj/item/clothing/under/blazer
|
||||
slot = slot_w_uniform
|
||||
cost = 2
|
||||
|
||||
/datum/gear/kilt
|
||||
display_name = "kilt"
|
||||
path = /obj/item/clothing/under/kilt
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/security
|
||||
name = "security armor"
|
||||
desc = "An armored vest that protects against some damage. This one has NanoTrasen corporate badge."
|
||||
desc = "An armored vest that protects against some damage. This one has a NanoTrasen corporate badge."
|
||||
icon_state = "armorsec"
|
||||
item_state = "armor"
|
||||
|
||||
@@ -139,53 +139,6 @@
|
||||
src.item_state = "reactiveoff"
|
||||
..()
|
||||
|
||||
|
||||
//All of the armor below is mostly unused
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/centcomm
|
||||
name = "Cent. Com. armor"
|
||||
desc = "A suit that protects against some damage."
|
||||
icon_state = "centcom"
|
||||
item_state = "centcom"
|
||||
w_class = 4//bulky item
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/heavy
|
||||
name = "heavy armor"
|
||||
desc = "A heavily armored suit that protects against moderate damage."
|
||||
icon_state = "heavy"
|
||||
item_state = "swat_suit"
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.90
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 3
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome/red
|
||||
name = "Thunderdome suit (red)"
|
||||
desc = "Reddish armor."
|
||||
icon_state = "tdred"
|
||||
item_state = "tdred"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome/green
|
||||
name = "Thunderdome suit (green)"
|
||||
desc = "Pukish armor."
|
||||
icon_state = "tdgreen"
|
||||
item_state = "tdgreen"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/suit/armor/tactical
|
||||
name = "tactical armor"
|
||||
desc = "A suit of armor most often used by Special Weapons and Tactics squads. Includes padded vest with pockets along with shoulder and kneeguards."
|
||||
@@ -228,6 +181,7 @@
|
||||
desc = "A set of armor worn by members of the NanoTrasen Emergency Response Team."
|
||||
icon_state = "ertarmor_cmd"
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0)
|
||||
|
||||
//Commander
|
||||
@@ -342,11 +296,57 @@
|
||||
icon_badge = "pcrcwebvest_badge"
|
||||
icon_nobadge = "pcrcwebvest_nobadge"
|
||||
|
||||
//Provides the protection of a merc voidsuit, but only covers the chest/groin, and also takes up a suit slot. In exchange it has no slowdown and provides storage.
|
||||
/obj/item/clothing/suit/storage/vest/heavy/merc
|
||||
name = "comfortable heavy armor vest"
|
||||
desc = "A heavy kevlar plate carrier in a fetching tan. Fits pretty well."
|
||||
name = "heavy armor vest"
|
||||
desc = "A high-quality heavy kevlar plate carrier in a fetching tan. The vest is surprisingly flexible, and possibly made of an advanced material."
|
||||
icon_state = "mercwebvest"
|
||||
item_state = "mercwebvest"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
slowdown = 0
|
||||
|
||||
//All of the armor below is mostly unused
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/centcomm
|
||||
name = "Cent. Com. armor"
|
||||
desc = "A suit that protects against some damage."
|
||||
icon_state = "centcom"
|
||||
item_state = "centcom"
|
||||
w_class = 4//bulky item
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/heavy
|
||||
name = "heavy armor"
|
||||
desc = "A heavily armored suit that protects against moderate damage."
|
||||
icon_state = "heavy"
|
||||
item_state = "swat_suit"
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.90
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 3
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome/red
|
||||
name = "Thunderdome suit (red)"
|
||||
desc = "Reddish armor."
|
||||
icon_state = "tdred"
|
||||
item_state = "tdred"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome/green
|
||||
name = "Thunderdome suit (green)"
|
||||
desc = "Pukish armor."
|
||||
icon_state = "tdgreen"
|
||||
item_state = "tdgreen"
|
||||
siemens_coefficient = 1
|
||||
|
||||
@@ -12,43 +12,43 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits.
|
||||
for(var/U in typesof(/obj/item/clothing/under)-blocked)
|
||||
var/obj/item/clothing/under/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/under/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits.
|
||||
for(var/U in typesof(/obj/item/clothing/under)-blocked)
|
||||
var/obj/item/clothing/under/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/under/chameleon/emp_act(severity)
|
||||
name = "psychedelic"
|
||||
desc = "Groovy!"
|
||||
icon_state = "psyche"
|
||||
item_color = "psyche"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/chameleon/verb/change()
|
||||
set name = "Change Jumpsuit Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select jumpsuit to change it to", "Chameleon Jumpsuit")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity)
|
||||
name = "psychedelic"
|
||||
desc = "Groovy!"
|
||||
icon_state = "psyche"
|
||||
item_color = "psyche"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Jumpsuit Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select jumpsuit to change it to", "Chameleon Jumpsuit")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//*****************
|
||||
//**Chameleon Hat**
|
||||
@@ -64,44 +64,44 @@
|
||||
body_parts_covered = 0
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/head/chameleon,/obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/head)-blocked)
|
||||
var/obj/item/clothing/head/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/head/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/head/chameleon,/obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/head)-blocked)
|
||||
var/obj/item/clothing/head/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/head/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "grey cap"
|
||||
desc = "It's a baseball hat in a tasteful grey colour."
|
||||
icon_state = "greysoft"
|
||||
item_color = "grey"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/head/chameleon/verb/change()
|
||||
set name = "Change Hat/Helmet Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select headwear to change it to", "Chameleon Hat")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "grey cap"
|
||||
desc = "It's a baseball hat in a tasteful grey colour."
|
||||
icon_state = "greysoft"
|
||||
item_color = "grey"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Hat/Helmet Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select headwear to change it to", "Chameleon Hat")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
flags_inv = A.flags_inv
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
flags_inv = A.flags_inv
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//******************
|
||||
//**Chameleon Suit**
|
||||
@@ -115,45 +115,45 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/suit/chameleon, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice,
|
||||
/obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits.
|
||||
for(var/U in typesof(/obj/item/clothing/suit)-blocked)
|
||||
var/obj/item/clothing/suit/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/suit/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/suit/chameleon, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice,
|
||||
/obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits.
|
||||
for(var/U in typesof(/obj/item/clothing/suit)-blocked)
|
||||
var/obj/item/clothing/suit/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/suit/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "armor"
|
||||
desc = "An armored vest that protects against some damage."
|
||||
icon_state = "armor"
|
||||
item_color = "armor"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/suit/chameleon/verb/change()
|
||||
set name = "Change Exosuit Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select exosuit to change it to", "Chameleon Exosuit")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "armor"
|
||||
desc = "An armored vest that protects against some damage."
|
||||
icon_state = "armor"
|
||||
item_color = "armor"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Exosuit Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select exosuit to change it to", "Chameleon Exosuit")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
flags_inv = A.flags_inv
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
flags_inv = A.flags_inv
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//*******************
|
||||
//**Chameleon Shoes**
|
||||
@@ -167,43 +167,43 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/shoes/chameleon, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes.
|
||||
for(var/U in typesof(/obj/item/clothing/shoes)-blocked)
|
||||
var/obj/item/clothing/shoes/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/shoes/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/shoes/chameleon, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes.
|
||||
for(var/U in typesof(/obj/item/clothing/shoes)-blocked)
|
||||
var/obj/item/clothing/shoes/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/shoes/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "black shoes"
|
||||
desc = "A pair of black shoes."
|
||||
icon_state = "black"
|
||||
item_state = "black"
|
||||
item_color = "black"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/shoes/chameleon/verb/change()
|
||||
set name = "Change Footwear Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select shoes to change it to", "Chameleon Shoes")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "black shoes"
|
||||
desc = "A pair of black shoes."
|
||||
icon_state = "black"
|
||||
item_state = "black"
|
||||
item_color = "black"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Footwear Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select shoes to change it to", "Chameleon Shoes")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//**********************
|
||||
//**Chameleon Backpack**
|
||||
@@ -216,48 +216,48 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/weapon/storage/backpack/chameleon, /obj/item/weapon/storage/backpack/satchel/withwallet)
|
||||
for(var/U in typesof(/obj/item/weapon/storage/backpack)-blocked)//Prevent infinite loops and bad backpacks.
|
||||
var/obj/item/weapon/storage/backpack/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/weapon/storage/backpack/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/weapon/storage/backpack/chameleon, /obj/item/weapon/storage/backpack/satchel/withwallet)
|
||||
for(var/U in typesof(/obj/item/weapon/storage/backpack)-blocked)//Prevent infinite loops and bad backpacks.
|
||||
var/obj/item/weapon/storage/backpack/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/backpack/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "backpack"
|
||||
desc = "You wear this on your back and put items into it."
|
||||
icon_state = "backpack"
|
||||
item_state = "backpack"
|
||||
update_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_back()
|
||||
|
||||
/obj/item/weapon/storage/backpack/chameleon/verb/change()
|
||||
set name = "Change Backpack Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select backpack to change it to", "Chameleon Backpack")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/weapon/storage/backpack/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "backpack"
|
||||
desc = "You wear this on your back and put items into it."
|
||||
icon_state = "backpack"
|
||||
item_state = "backpack"
|
||||
update_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_back()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Backpack Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
|
||||
var/picked = input("Select backpack to change it to", "Chameleon Backpack")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/weapon/storage/backpack/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
|
||||
//so our overlays update.
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_back()
|
||||
//so our overlays update.
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_back()
|
||||
|
||||
//********************
|
||||
//**Chameleon Gloves**
|
||||
@@ -272,43 +272,43 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/gloves/chameleon)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/gloves)-blocked)
|
||||
var/obj/item/clothing/gloves/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/gloves/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/gloves/chameleon)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/gloves)-blocked)
|
||||
var/obj/item/clothing/gloves/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/gloves/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "black gloves"
|
||||
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
|
||||
icon_state = "black"
|
||||
item_color = "brown"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/gloves/chameleon/verb/change()
|
||||
set name = "Change Gloves Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select gloves to change it to", "Chameleon Gloves")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "black gloves"
|
||||
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
|
||||
icon_state = "black"
|
||||
item_color = "brown"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Gloves Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select gloves to change it to", "Chameleon Gloves")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
flags_inv = A.flags_inv
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
flags_inv = A.flags_inv
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//******************
|
||||
//**Chameleon Mask**
|
||||
@@ -322,43 +322,43 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/mask/chameleon)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/mask)-blocked)
|
||||
var/obj/item/clothing/mask/V = new U
|
||||
if(V)
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/mask/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/mask/chameleon)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/mask)-blocked)
|
||||
var/obj/item/clothing/mask/V = new U
|
||||
if(V)
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "gas mask"
|
||||
desc = "It's a gas mask."
|
||||
icon_state = "gas_alt"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/mask/chameleon/verb/change()
|
||||
set name = "Change Mask Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select mask to change it to", "Chameleon Mask")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "gas mask"
|
||||
desc = "It's a gas mask."
|
||||
icon_state = "gas_alt"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Mask Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select mask to change it to", "Chameleon Mask")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
body_parts_covered = A.body_parts_covered
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//*********************
|
||||
//**Chameleon Glasses**
|
||||
@@ -372,41 +372,41 @@
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/glasses/chameleon)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/glasses)-blocked)
|
||||
var/obj/item/clothing/glasses/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
/obj/item/clothing/glasses/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/glasses/chameleon)//Prevent infinite loops and bad hats.
|
||||
for(var/U in typesof(/obj/item/clothing/glasses)-blocked)
|
||||
var/obj/item/clothing/glasses/V = new U
|
||||
src.clothing_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/clothing/glasses/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "Optical Meson Scanner"
|
||||
desc = "It's a set of mesons."
|
||||
icon_state = "meson"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/glasses/chameleon/verb/change()
|
||||
set name = "Change Glasses Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select glasses to change it to", "Chameleon Glasses")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
|
||||
name = "Optical Meson Scanner"
|
||||
desc = "It's a set of mesons."
|
||||
icon_state = "meson"
|
||||
update_icon()
|
||||
update_clothing_icon()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Glasses Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/picked = input("Select glasses to change it to", "Chameleon Glasses")as null|anything in clothing_choices
|
||||
if(!picked || !clothing_choices[picked])
|
||||
return
|
||||
var/newtype = clothing_choices[picked]
|
||||
var/obj/item/clothing/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
update_clothing_icon() //so our overlays update.
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
update_clothing_icon() //so our overlays update.
|
||||
|
||||
//*****************
|
||||
//**Chameleon Gun**
|
||||
@@ -423,46 +423,45 @@
|
||||
matter = list()
|
||||
var/list/gun_choices = list()
|
||||
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/weapon/gun/projectile/chameleon)
|
||||
for(var/U in typesof(/obj/item/weapon/gun/)-blocked)
|
||||
var/obj/item/weapon/gun/V = new U
|
||||
src.gun_choices[V.name] = U
|
||||
/obj/item/weapon/gun/projectile/chameleon/New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/weapon/gun/projectile/chameleon)
|
||||
for(var/U in typesof(/obj/item/weapon/gun/)-blocked)
|
||||
var/obj/item/weapon/gun/V = new U
|
||||
src.gun_choices[V.name] = U
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/chameleon/emp_act(severity)
|
||||
name = "desert eagle"
|
||||
desc = "It's a desert eagle."
|
||||
icon_state = "deagle"
|
||||
update_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_r_hand()
|
||||
M.update_inv_l_hand()
|
||||
|
||||
/obj/item/weapon/gun/projectile/chameleon/verb/change(picked in gun_choices)
|
||||
set name = "Change Gun Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!picked || !gun_choices[picked])
|
||||
return
|
||||
var/newtype = gun_choices[picked]
|
||||
var/obj/item/weapon/gun/A = new newtype
|
||||
|
||||
emp_act(severity)
|
||||
name = "desert eagle"
|
||||
desc = "It's a desert eagle."
|
||||
icon_state = "deagle"
|
||||
update_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_r_hand()
|
||||
M.update_inv_l_hand()
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
verb/change()
|
||||
set name = "Change Gun Appearance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
|
||||
var/picked = input("Select gun to change it to", "Chameleon Gun")as null|anything in gun_choices
|
||||
if(!picked || !gun_choices[picked])
|
||||
return
|
||||
var/newtype = gun_choices[picked]
|
||||
var/obj/item/weapon/gun/A = new newtype
|
||||
|
||||
desc = null
|
||||
permeability_coefficient = 0.90
|
||||
|
||||
desc = A.desc
|
||||
name = A.name
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
|
||||
//so our overlays update.
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_r_hand()
|
||||
M.update_inv_l_hand()
|
||||
//so our overlays update.
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_r_hand()
|
||||
M.update_inv_l_hand()
|
||||
|
||||
@@ -490,3 +490,10 @@
|
||||
item_state = "mai_yang"
|
||||
item_color = "mai_yang"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
|
||||
/obj/item/clothing/under/blazer
|
||||
name = "blue blazer"
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
icon_state = "blue_blazer"
|
||||
item_state = "blue_blazer"
|
||||
item_color = "blue_blazer"
|
||||
42
code/modules/examine/descriptions/medical.dm
Normal file
42
code/modules/examine/descriptions/medical.dm
Normal file
@@ -0,0 +1,42 @@
|
||||
/obj/machinery/bodyscanner
|
||||
description_info = "The advanced scanner detects and reports internal injuries such as bone fractures, internal bleeding, and organ damage. \
|
||||
This is useful if you are about to perform surgery.<br>\
|
||||
<br>\
|
||||
Click your target with Grab intent, then click on the scanner to place them in it. Click the red terminal to operate. \
|
||||
Right-click the scanner and click 'Eject Occupant' to remove them. You can enter the scanner yourself in a similar way, using the 'Enter Body Scanner' \
|
||||
verb."
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell
|
||||
description_info = "The cryogenic chamber, or 'cryo', treats most damage types, most notably genetic damage. It also stabilizes patients \
|
||||
in critical condition by placing them in stasis, so they can be treated at a later time.<br>\
|
||||
<br>\
|
||||
In order for it to work, it must be loaded with chemicals, and the temperature of the solution must reach a certain point. Additionally, it \
|
||||
requires a supply of pure oxygen, provided by canisters that are attached. The most commonly used chemicals in the chambers are Cryoxadone and \
|
||||
Clonexadone. Clonexadone is more effective in treating all damage, including Genetic damage, but is otherwise functionally identical.<br>\
|
||||
<br>\
|
||||
Activating the freezer nearby, and setting it to a temperature setting below 150, is recommended before operation! Further, any clothing the patient \
|
||||
is wearing that act as an insulator will reduce its effectiveness, and should be removed.<br>\
|
||||
<br>\
|
||||
Clicking the tube with a beaker full of chemicals in hand will place it in its storage to distribute when it is activated.<br>\
|
||||
<br>\
|
||||
Click your target with Grab intent, then click on the tube, with an empty hand, to place them in it. Click the tube again to open the menu. \
|
||||
Press the button on the menu to activate it. Once they have reached 100 health, right-click the cell and click 'Eject Occupant' to remove them. \
|
||||
Remember to turn it off, once you've finished, to save power and chemicals!"
|
||||
|
||||
/obj/machinery/optable
|
||||
description_info = "Click your target with Grab intent, then click on the table with an empty hand, to place them on it."
|
||||
|
||||
/obj/machinery/computer/operating
|
||||
description_info = "This console gives information on the status of the patient on the adjacent operating table, notably their consciousness."
|
||||
|
||||
/obj/machinery/sleeper
|
||||
description_info = "The sleeper allows you to clean the blood by means of dialysis, and to administer medication in a controlled environment.<br>\
|
||||
<br>\
|
||||
Click your target with Grab intent, then click on the sleeper to place them in it. Click the green console, with an empty hand, to open the menu. \
|
||||
Click 'Start Dialysis' to begin filtering unwanted chemicals from the occupant's blood. The beaker contained will begin to fill with their \
|
||||
contaminated blood, and will need to be emptied when full.<br>\
|
||||
<br>\
|
||||
You can also inject common medicines directly into their bloodstream.\
|
||||
<br>\
|
||||
Right-click the cell and click 'Eject Occupant' to remove them. You can enter the cell yourself by right clicking and selecting 'Enter Sleeper'. \
|
||||
Note that you cannot control the sleeper while inside of it."
|
||||
@@ -3,6 +3,6 @@
|
||||
interact with anyone else, except for other drones. They hold a wide array of tools to build, repair, maintain, and clean. \
|
||||
They fuction similarly to other synthetics, in that they require recharging regularly, have laws, and are resilient to many hazards, \
|
||||
such as fire, radiation, vacuum, and more. Ghosts can join the round as a maintenance drone by using the appropriate verb in the 'ghost' tab. \
|
||||
An inactive drone can be rebooted by swiping an ID card on it with engineering or robotics access."
|
||||
An inactive drone can be rebooted by swiping an ID card on it with engineering or robotics access, and an active drone can be shut down in the same manner."
|
||||
|
||||
description_antag = "An Electromagnetic Sequencer can be used to subvert the drone to your cause."
|
||||
@@ -13,3 +13,9 @@
|
||||
/obj/structure/lattice
|
||||
description_info = "Add a metal floor tile to build a floor on top of the lattice.<br>\
|
||||
Lattices can be made by applying metal rods to a space tile."
|
||||
|
||||
/obj/structure/bed
|
||||
description_info = "Click and drag yourself (or anyone) to this to buckle in. Click on this with an empty hand to undo the buckles.<br>\
|
||||
<br>\
|
||||
Anyone with restraints, such as handcuffs, will not be able to unbuckle themselves. They must use the Resist button, or verb, to break free of \
|
||||
the buckles, instead."
|
||||
91
code/modules/examine/descriptions/weapons.dm
Normal file
91
code/modules/examine/descriptions/weapons.dm
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
Note: This file is meant for actual weapons (guns, swords, etc), and not the stupid 'every obj is a weapon, except when it's not' thing.
|
||||
*/
|
||||
|
||||
//******
|
||||
//*Guns*
|
||||
//******
|
||||
|
||||
//This contains a lot of copypasta but I'm told it's better then a lot of New()s appending the var.
|
||||
/obj/item/weapon/gun
|
||||
description_info = "This is a gun. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire."
|
||||
|
||||
/obj/item/weapon/gun/energy
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire."
|
||||
description_antag = "This is a stealthy weapon which fires poisoned bolts at your target. When it hits someone, they will suffer a stun effect, in \
|
||||
addition to toxins. The energy crossbow recharges itself slowly, and can be concealed in your pocket or bag."
|
||||
|
||||
/obj/item/weapon/gun/energy/gun
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To switch between stun and lethal, click the weapon \
|
||||
in your hand. To recharge this weapon, use a weapon recharger."
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/taser
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/stunrevolver
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/nuclear
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To switch between stun and lethal, click the weapon \
|
||||
in your hand. Unlike most weapons, this weapon recharges itself."
|
||||
|
||||
/obj/item/weapon/gun/energy/captain
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. Unlike most weapons, this weapon recharges itself."
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger. \
|
||||
To use the scope, use the appropriate verb in the object tab."
|
||||
|
||||
/obj/item/weapon/gun/projectile
|
||||
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropiate ammo. The description \
|
||||
will tell you what caliber you need."
|
||||
|
||||
/obj/item/weapon/gun/projectile/chameleon
|
||||
description_info = null //The chameleon gun adopts the description_info of the weapon it is impersonating as, to make meta-ing harder.
|
||||
description_antag = "This gun can alter its appearance to mimick other weapons. To change the appearance, use the appropriate verb in the object tab. \
|
||||
The ammo loaded by default makes the gun useless for actual combat."
|
||||
|
||||
/obj/item/weapon/gun/projectile/chameleon/change(picked in gun_choices) //Making the gun change its help text to match the weapon's help text.
|
||||
..(picked)
|
||||
var/obj/O = gun_choices[picked]
|
||||
description_info = initial(O.description_info)
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump
|
||||
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. After firing, you will need to pump the gun, by clicking on the gun in your hand. To reload, load more shotgun \
|
||||
shells into the gun."
|
||||
|
||||
/obj/item/weapon/gun/projectile/heavysniper
|
||||
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. The gun's chamber can be opened or closed by using it in your hand. To reload, open the chamber, add a new bullet \
|
||||
then close it. To use the scope, use the appropriate verb in the object tab."
|
||||
|
||||
//*******
|
||||
//*Melee*
|
||||
//*******
|
||||
|
||||
/obj/item/weapon/melee/baton
|
||||
description_info = "The baton needs to be turned on to apply the stunning effect. Use it in your hand to toggle it on or off. If your intent is \
|
||||
set to 'harm', you will inflict damage when using it, regardless if it is on or not. Each stun reduces the baton's charge, which can be replenished by \
|
||||
putting it inside a weapon recharger."
|
||||
|
||||
/obj/item/weapon/melee/energy/sword
|
||||
description_antag = "The energy sword is a very strong melee weapon, capable of severing limbs easily, if they are targeted. It can also has a chance \
|
||||
to block projectiles and melee attacks while it is on and being held. The sword can be toggled on or off by using it in your hand. While it is off, \
|
||||
it can be concealed in your pocket or bag."
|
||||
|
||||
/obj/item/weapon/melee/cultblade
|
||||
description_antag = "This sword is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelivers are unable to use this weapon."
|
||||
@@ -11,26 +11,7 @@
|
||||
var/description_fluff = null //Green text about the atom's fluff, if any exists.
|
||||
var/description_antag = null //Malicious red text, for the antags.
|
||||
|
||||
/atom/examine(mob/user, var/distance = -1, var/infix = "", var/suffix = "")
|
||||
. = ..()
|
||||
user.description_holders["info"] = get_description_info()
|
||||
user.description_holders["fluff"] = get_description_fluff()
|
||||
if(user.mind && user.mind.special_role || isobserver(user)) //Runtime prevention, as ghosts don't have minds.
|
||||
user.description_holders["antag"] = get_description_antag()
|
||||
|
||||
if(name) //This shouldn't be needed but I'm paranoid.
|
||||
user.description_holders["name"] = "[src.name]" //\icon[src]
|
||||
|
||||
user.description_holders["icon"] = "\icon[src]"
|
||||
|
||||
if(desc)
|
||||
user << desc
|
||||
user.description_holders["desc"] = src.desc
|
||||
else
|
||||
user.description_holders["desc"] = null //This is needed, or else if you examine one thing with a desc, then another without, the panel will retain the first examined's desc.
|
||||
|
||||
//Override these if you need special behaviour for a specific type.
|
||||
|
||||
/atom/proc/get_description_info()
|
||||
if(description_info)
|
||||
return description_info
|
||||
@@ -46,11 +27,30 @@
|
||||
return description_antag
|
||||
return
|
||||
|
||||
/mob/
|
||||
var/description_holders[0]
|
||||
/mob/living/get_description_fluff()
|
||||
if(flavor_text) //Get flavor text for the green text.
|
||||
return flavor_text
|
||||
else //No flavor text? Try for hardcoded fluff instead.
|
||||
return ..()
|
||||
|
||||
/mob/Stat()
|
||||
..()
|
||||
/mob/living/carbon/human/get_description_fluff()
|
||||
return print_flavor_text(0)
|
||||
|
||||
/* The examine panel itself */
|
||||
|
||||
/client/var/description_holders[0]
|
||||
|
||||
/client/proc/update_description_holders(atom/A, update_antag_info=0)
|
||||
description_holders["info"] = A.get_description_info()
|
||||
description_holders["fluff"] = A.get_description_fluff()
|
||||
description_holders["antag"] = (update_antag_info)? A.get_description_antag() : ""
|
||||
|
||||
description_holders["name"] = "[A.name]"
|
||||
description_holders["icon"] = "\icon[A]"
|
||||
description_holders["desc"] = A.desc
|
||||
|
||||
/client/Stat()
|
||||
. = ..()
|
||||
if(statpanel("Examine"))
|
||||
stat(null,"[description_holders["icon"]] <font size='5'>[description_holders["name"]]</font>") //The name, written in big letters.
|
||||
stat(null,"[description_holders["desc"]]") //the default examine text.
|
||||
@@ -61,11 +61,11 @@
|
||||
if(description_holders["antag"])
|
||||
stat(null,"<font color='#8A0808'><b>[description_holders["antag"]]</b></font>") //Red, malicious antag-related text
|
||||
|
||||
/mob/living/get_description_fluff()
|
||||
if(flavor_text) //Get flavor text for the green text.
|
||||
return flavor_text
|
||||
else //No flavor text? Try for hardcoded fluff instead.
|
||||
return ..()
|
||||
//override examinate verb to update description holders when things are examined
|
||||
/mob/examinate(atom/A as mob|obj|turf in view())
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/get_description_fluff()
|
||||
return print_flavor_text(0)
|
||||
var/is_antag = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds
|
||||
if(client)
|
||||
client.update_description_holders(A, is_antag)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
if(!isnull(seed.chems["pacid"]))
|
||||
spawn(rand(5,25)) floor.ex_act(3)
|
||||
continue
|
||||
if(!Adjacent(floor))
|
||||
if(!Adjacent(floor) || !floor.Enter(src))
|
||||
continue
|
||||
neighbors |= floor
|
||||
// Update all of our friends.
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
if(age >= seed.get_trait(TRAIT_MATURATION))
|
||||
overlay_stage = seed.growth_stages
|
||||
else
|
||||
overlay_stage = max(1,round(age/round(seed.get_trait(TRAIT_MATURATION)/seed.growth_stages)))
|
||||
var/maturation = round(seed.get_trait(TRAIT_MATURATION)/seed.growth_stages)
|
||||
overlay_stage = maturation ? max(1,round(age/maturation)) : 1
|
||||
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]"
|
||||
var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
|
||||
if(!plant_overlay)
|
||||
|
||||
@@ -149,9 +149,6 @@
|
||||
else
|
||||
healths.icon_state = "health7"
|
||||
|
||||
if(pullin)
|
||||
pullin.icon_state = "pull[pulling ? 1 : 0]"
|
||||
|
||||
if (client)
|
||||
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
|
||||
|
||||
|
||||
@@ -225,7 +225,6 @@
|
||||
else
|
||||
healths.icon_state = "health7"
|
||||
|
||||
if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]"
|
||||
if (client)
|
||||
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
|
||||
|
||||
|
||||
@@ -451,7 +451,6 @@
|
||||
msg += "\n[t_He] is [pose]"
|
||||
|
||||
user << msg
|
||||
..()
|
||||
|
||||
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
|
||||
/proc/hasHUD(mob/M as mob, hudtype)
|
||||
|
||||
@@ -1250,9 +1250,6 @@
|
||||
if(pressure)
|
||||
pressure.icon_state = "pressure[pressure_alert]"
|
||||
|
||||
if(pullin)
|
||||
if(pulling) pullin.icon_state = "pull1"
|
||||
else pullin.icon_state = "pull0"
|
||||
// if(rest) //Not used with new UI
|
||||
// if(resting || lying || sleeping) rest.icon_state = "rest1"
|
||||
// else rest.icon_state = "rest0"
|
||||
|
||||
@@ -439,9 +439,6 @@
|
||||
if(pressure)
|
||||
pressure.icon_state = "pressure[pressure_alert]"
|
||||
|
||||
if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]"
|
||||
|
||||
|
||||
if (toxin) toxin.icon_state = "tox[phoron_alert ? 1 : 0]"
|
||||
if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
|
||||
if (fire) fire.icon_state = "fire[fire_alert ? 2 : 0]"
|
||||
|
||||
@@ -75,8 +75,9 @@
|
||||
for(var/camera in cameras)
|
||||
var/obj/machinery/camera/c = camera
|
||||
|
||||
if(!c)
|
||||
if(!istype(c))
|
||||
cameras -= c
|
||||
continue
|
||||
|
||||
if(!c.can_use())
|
||||
continue
|
||||
|
||||
@@ -54,8 +54,6 @@
|
||||
|
||||
/mob/living/silicon/robot/drone/init()
|
||||
laws = new /datum/ai_laws/drone()
|
||||
connected_ai = null
|
||||
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src)
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
|
||||
|
||||
@@ -226,9 +226,7 @@
|
||||
if(tra.current)
|
||||
var/I = image('icons/mob/mob.dmi', loc = tra.current, icon_state = "traitor")
|
||||
src.client.images += I
|
||||
if(src.connected_ai)
|
||||
src.connected_ai.connected_robots -= src
|
||||
src.connected_ai = null
|
||||
src.disconnect_from_ai()
|
||||
if(src.mind)
|
||||
if(!src.mind.special_role)
|
||||
src.mind.special_role = "traitor"
|
||||
@@ -264,8 +262,6 @@
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
|
||||
|
||||
if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]"
|
||||
//Oxygen and fire does nothing yet!!
|
||||
// if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]"
|
||||
// if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]"
|
||||
|
||||
@@ -165,11 +165,10 @@ var/list/robot_verbs_default = list(
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
|
||||
laws = new /datum/ai_laws/nanotrasen()
|
||||
additional_law_channels += "Binary"
|
||||
connected_ai = select_active_ai_with_fewest_borgs()
|
||||
if(connected_ai)
|
||||
connected_ai.connected_robots += src
|
||||
var/new_ai = select_active_ai_with_fewest_borgs()
|
||||
if(new_ai)
|
||||
lawupdate = 1
|
||||
sync()
|
||||
connect_to_ai(new_ai)
|
||||
else
|
||||
lawupdate = 0
|
||||
|
||||
@@ -366,7 +365,7 @@ var/list/robot_verbs_default = list(
|
||||
|
||||
choose_icon(6,module_sprites)
|
||||
radio.config(module.channels)
|
||||
notify_ai(2)
|
||||
notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name)
|
||||
|
||||
/mob/living/silicon/robot/proc/updatename(var/prefix as text)
|
||||
if(prefix)
|
||||
@@ -386,7 +385,7 @@ var/list/robot_verbs_default = list(
|
||||
else
|
||||
changed_name = "[modtype] [braintype]-[num2text(ident)]"
|
||||
|
||||
notify_ai(3, real_name, changed_name)
|
||||
notify_ai(ROBOT_NOTIFICATION_NEW_NAME, real_name, changed_name)
|
||||
real_name = changed_name
|
||||
name = real_name
|
||||
|
||||
@@ -803,7 +802,7 @@ var/list/robot_verbs_default = list(
|
||||
if(prob(50))
|
||||
emagged = 1
|
||||
lawupdate = 0
|
||||
connected_ai = null
|
||||
disconnect_from_ai()
|
||||
user << "You emag [src]'s interface."
|
||||
message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
|
||||
log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
|
||||
@@ -1135,8 +1134,7 @@ var/list/robot_verbs_default = list(
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/UnlinkSelf()
|
||||
if (src.connected_ai)
|
||||
src.connected_ai = null
|
||||
disconnect_from_ai()
|
||||
lawupdate = 0
|
||||
lockcharge = 0
|
||||
canmove = 1
|
||||
@@ -1246,14 +1244,29 @@ var/list/robot_verbs_default = list(
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/oldname, var/newname)
|
||||
/mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/first_arg, var/second_arg)
|
||||
if(!connected_ai)
|
||||
return
|
||||
switch(notifytype)
|
||||
if(1) //New Robot
|
||||
if(ROBOT_NOTIFICATION_NEW_UNIT) //New Robot
|
||||
connected_ai << "<br><br><span class='notice'>NOTICE - New [lowertext(braintype)] connection detected: <a href='byond://?src=\ref[connected_ai];track2=\ref[connected_ai];track=\ref[src]'>[name]</a></span><br>"
|
||||
if(2) //New Module
|
||||
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] module change detected: [name] has loaded the [module.name].</span><br>"
|
||||
if(3) //New Name
|
||||
if(oldname != newname)
|
||||
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].</span><br>"
|
||||
if(ROBOT_NOTIFICATION_NEW_MODULE) //New Module
|
||||
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] module change detected: [name] has loaded the [first_arg].</span><br>"
|
||||
if(ROBOT_NOTIFICATION_MODULE_RESET)
|
||||
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] module reset detected: [name] has unladed the [first_arg].</span><br>"
|
||||
if(ROBOT_NOTIFICATION_NEW_NAME) //New Name
|
||||
if(first_arg != second_arg)
|
||||
connected_ai << "<br><br><span class='notice'>NOTICE - [braintype] reclassification detected: [first_arg] is now designated as [second_arg].</span><br>"
|
||||
|
||||
/mob/living/silicon/robot/proc/disconnect_from_ai()
|
||||
if(connected_ai)
|
||||
connected_ai.connected_robots -= src
|
||||
connected_ai = null
|
||||
|
||||
/mob/living/silicon/robot/proc/connect_to_ai(var/mob/living/silicon/ai/AI)
|
||||
if(AI && AI != connected_ai)
|
||||
disconnect_from_ai()
|
||||
connected_ai = AI
|
||||
connected_ai.connected_robots |= src
|
||||
notify_ai(ROBOT_NOTIFICATION_NEW_UNIT)
|
||||
sync()
|
||||
|
||||
@@ -239,7 +239,7 @@
|
||||
if (!(status_flags & CANPUSH))
|
||||
return
|
||||
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M, M, src )
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src)
|
||||
|
||||
M.put_in_active_hand(G)
|
||||
|
||||
@@ -375,4 +375,4 @@
|
||||
|
||||
/mob/living/simple_animal/put_in_hands(var/obj/item/W) // No hands.
|
||||
W.loc = get_turf(src)
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -228,7 +228,7 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
if((is_blind(src) || usr.stat) && !isobserver(src))
|
||||
src << "<span class='notice'>Something is there but you can't see it.</span>"
|
||||
return
|
||||
return 1
|
||||
|
||||
face_atom(A)
|
||||
A.examine(src)
|
||||
@@ -616,6 +616,8 @@ var/list/slot_equipment_priority = list( \
|
||||
if(pulling)
|
||||
pulling.pulledby = null
|
||||
pulling = null
|
||||
if(pullin)
|
||||
pullin.icon_state = "pull1"
|
||||
|
||||
/mob/proc/start_pulling(var/atom/movable/AM)
|
||||
if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
|
||||
@@ -642,6 +644,9 @@ var/list/slot_equipment_priority = list( \
|
||||
src.pulling = AM
|
||||
AM.pulledby = src
|
||||
|
||||
if(pullin)
|
||||
pullin.icon_state = "pull0"
|
||||
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(H.pull_damage())
|
||||
|
||||
@@ -453,23 +453,18 @@
|
||||
if(istype(turf,/turf/space))
|
||||
continue
|
||||
|
||||
if(istype(src,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to.
|
||||
var/mob/living/carbon/human/H = src
|
||||
if((istype(turf,/turf/simulated/floor)) && (src.lastarea.has_gravity == 0) && !(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags & NOSLIP)))
|
||||
continue
|
||||
|
||||
|
||||
else
|
||||
if((istype(turf,/turf/simulated/floor)) && (src.lastarea.has_gravity == 0)) // No one else gets a chance.
|
||||
continue
|
||||
|
||||
|
||||
|
||||
/*
|
||||
if(istype(turf,/turf/simulated/floor) && (src.flags & NOGRAV))
|
||||
continue
|
||||
*/
|
||||
|
||||
if(istype(turf,/turf/simulated/floor)) // Floors don't count if they don't have gravity
|
||||
var/area/A = turf.loc
|
||||
if(istype(A) && A.has_gravity == 0)
|
||||
var/can_walk = 0
|
||||
|
||||
if(ishuman(src)) // Only humans can wear magboots, so we give them a chance to.
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags & NOSLIP))
|
||||
can_walk = 1
|
||||
|
||||
if(!can_walk)
|
||||
continue
|
||||
|
||||
dense_object++
|
||||
break
|
||||
|
||||
@@ -168,7 +168,6 @@
|
||||
O.mmi.transfer_identity(src)
|
||||
|
||||
callHook("borgify", list(O))
|
||||
O.notify_ai(1)
|
||||
O.Namepick()
|
||||
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
|
||||
@@ -30,11 +30,24 @@
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
AH.unregister(object)
|
||||
|
||||
/obj/nano_module/alarm_monitor/proc/active_alarms()
|
||||
/obj/nano_module/alarm_monitor/proc/all_alarms()
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
var/list/alarms = AH.alarms
|
||||
all_alarms += alarms
|
||||
all_alarms += AH.alarms
|
||||
|
||||
return all_alarms
|
||||
|
||||
/obj/nano_module/alarm_monitor/proc/major_alarms()
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.major_alarms()
|
||||
|
||||
return all_alarms
|
||||
|
||||
/obj/nano_module/alarm_monitor/proc/minor_alarms()
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.minor_alarms()
|
||||
|
||||
return all_alarms
|
||||
|
||||
|
||||
@@ -147,16 +147,18 @@
|
||||
if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"]))
|
||||
M = R
|
||||
break
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
|
||||
P.info = "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]<BR>\nSex: [G.fields["sex"]]<BR>\nAge: [G.fields["age"]]<BR>\nFingerprint: [G.fields["fingerprint"]]<BR>\nPhysical Status: [G.fields["p_stat"]]<BR>\nMental Status: [G.fields["m_stat"]]<BR>"
|
||||
P.info += "<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: [M.fields["b_type"]]<BR>\nDNA: [M.fields["b_dna"]]<BR>\n<BR>\nMinor Disabilities: [M.fields["mi_dis"]]<BR>\nDetails: [M.fields["mi_dis_d"]]<BR>\n<BR>\nMajor Disabilities: [M.fields["ma_dis"]]<BR>\nDetails: [M.fields["ma_dis_d"]]<BR>\n<BR>\nAllergies: [M.fields["alg"]]<BR>\nDetails: [M.fields["alg_d"]]<BR>\n<BR>\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)<BR>\nDetails: [M.fields["cdi_d"]]<BR>\n<BR>\nImportant Notes:<BR>\n\t[M.fields["notes"]]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
var/counter = 1
|
||||
while(M.fields["com_[counter]"])
|
||||
P.info += "[M.fields["com_[counter]"]]<BR>"
|
||||
counter++
|
||||
P.info += "</TT>"
|
||||
P.name = "Medical Record ([G.fields["name"]])"
|
||||
if(M)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
|
||||
P.info = "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]<BR>\nSex: [G.fields["sex"]]<BR>\nAge: [G.fields["age"]]<BR>\nFingerprint: [G.fields["fingerprint"]]<BR>\nPhysical Status: [G.fields["p_stat"]]<BR>\nMental Status: [G.fields["m_stat"]]<BR>"
|
||||
|
||||
P.info += "<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: [M.fields["b_type"]]<BR>\nDNA: [M.fields["b_dna"]]<BR>\n<BR>\nMinor Disabilities: [M.fields["mi_dis"]]<BR>\nDetails: [M.fields["mi_dis_d"]]<BR>\n<BR>\nMajor Disabilities: [M.fields["ma_dis"]]<BR>\nDetails: [M.fields["ma_dis_d"]]<BR>\n<BR>\nAllergies: [M.fields["alg"]]<BR>\nDetails: [M.fields["alg_d"]]<BR>\n<BR>\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)<BR>\nDetails: [M.fields["cdi_d"]]<BR>\n<BR>\nImportant Notes:<BR>\n\t[M.fields["notes"]]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
var/counter = 1
|
||||
while(M.fields["com_[counter]"])
|
||||
P.info += "[M.fields["com_[counter]"]]<BR>"
|
||||
counter++
|
||||
P.info += "</TT>"
|
||||
P.name = "Medical Record ([G.fields["name"]])"
|
||||
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
|
||||
//before the records have been generated, so we do this inside the loop.
|
||||
..()
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
var/stamps //The (text for the) stamps on the paper.
|
||||
var/fields //Amount of user created fields
|
||||
var/list/stamped
|
||||
var/ico[0] //Icons and
|
||||
var/offset_x[0] //offsets stored for later
|
||||
var/offset_y[0] //usage by the photocopier
|
||||
var/list/ico[0] //Icons and
|
||||
var/list/offset_x[0] //offsets stored for later
|
||||
var/list/offset_y[0] //usage by the photocopier
|
||||
var/rigged = 0
|
||||
var/spam_flag = 0
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
c.offset_y = copy.offset_y
|
||||
var/list/temp_overlays = copy.overlays //Iterates through stamps
|
||||
var/image/img //and puts a matching
|
||||
for (var/j = 1, j <= temp_overlays.len, j++) //gray overlay onto the copy
|
||||
for (var/j = 1, j <= min(temp_overlays.len, copy.ico.len), j++) //gray overlay onto the copy
|
||||
if (findtext(copy.ico[j], "cap") || findtext(copy.ico[j], "cent"))
|
||||
img = image('icons/obj/bureaucracy.dmi', "paper_stamp-circle")
|
||||
else if (findtext(copy.ico[j], "deny"))
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
name = "\improper STS-35 automatic rifle"
|
||||
desc = "A durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 7.62mm rounds. It is unmarked."
|
||||
icon_state = "arifle"
|
||||
item_state = "shotgun"
|
||||
item_state = "l6closednomag" //placeholder
|
||||
w_class = 4
|
||||
force = 10
|
||||
caliber = "a762"
|
||||
@@ -68,7 +68,8 @@
|
||||
name = "\improper W-T 550 Saber"
|
||||
desc = "A cheap, mass produced Ward-Takahashi PDW. Uses 9mm rounds."
|
||||
icon_state = "wt550"
|
||||
w_class = 3.0
|
||||
item_state = "c20r" //placeholder
|
||||
w_class = 3
|
||||
caliber = "9mm"
|
||||
origin_tech = "combat=5;materials=2"
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -89,7 +90,7 @@
|
||||
name = "\improper Z8 Bulldog"
|
||||
desc = "An older model bullpup carbine, made by the now defunct Zendai Foundries. Uses armor piercing 5.56mm rounds. Makes you feel like a space marine when you hold it."
|
||||
icon_state = "carbine"
|
||||
item_state = "shotgun"
|
||||
item_state = "l6closednomag" //placeholder
|
||||
w_class = 4
|
||||
force = 10
|
||||
caliber = "a556"
|
||||
@@ -128,6 +129,8 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/z8/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0)
|
||||
if(use_launcher)
|
||||
launcher.Fire(target, user, params, pointblank, reflex)
|
||||
if(!launcher.chambered)
|
||||
use_launcher = 0 //switch back automatically
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -65,6 +65,11 @@
|
||||
origin_tech = "combat=3;materials=1"
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare
|
||||
name = "signal shotgun"
|
||||
desc = "A double-barreled shotgun meant to fire signal flash shells."
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/flash
|
||||
|
||||
//this is largely hacky and bad :( -Pete
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "\improper PTRS-7 rifle"
|
||||
desc = "A portable anti-armour rifle fitted with a scope. Originally designed to used against armoured exosuits, it is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells."
|
||||
icon_state = "heavysniper"
|
||||
item_state = "shotgun"
|
||||
item_state = "l6closednomag" //placeholder
|
||||
w_class = 4
|
||||
force = 10
|
||||
slot_flags = SLOT_BACK
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
else if(istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
chance = round(damage/D.maxhealth*180)
|
||||
if(D.glass) chance *= 2
|
||||
else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder))
|
||||
chance = 100
|
||||
else if(istype(A, /obj/machinery) || istype(A, /obj/structure))
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
if(Robot.mmi) del(Robot.mmi)
|
||||
Robot.notify_ai(1)
|
||||
else
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
|
||||
|
||||
@@ -546,13 +546,9 @@
|
||||
new_item.desc = src.desc
|
||||
|
||||
if(talkative)
|
||||
new_item.talking_atom = new()
|
||||
talking_atom.holder_atom = new_item
|
||||
talking_atom.init()
|
||||
new_item.talking_atom = new(new_item)
|
||||
|
||||
del(src)
|
||||
|
||||
else if(talkative)
|
||||
src.talking_atom = new()
|
||||
talking_atom.holder_atom = src
|
||||
talking_atom.init()
|
||||
src.talking_atom = new(src)
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
var/talk_interval = 50
|
||||
var/talk_chance = 10
|
||||
|
||||
/datum/talking_atom/New(atom/holder)
|
||||
holder_atom = holder
|
||||
init()
|
||||
|
||||
/datum/talking_atom/proc/init()
|
||||
if(holder_atom)
|
||||
processing_objects.Add(src)
|
||||
@@ -55,7 +59,7 @@
|
||||
|
||||
if(prob(30))
|
||||
var/list/options = list("[holder_atom] seems to be listening intently to [source]...",\
|
||||
"[holder_atom] seems to be focussing on [source]...",\
|
||||
"[holder_atom] seems to be focusing on [source]...",\
|
||||
"[holder_atom] seems to turn it's attention to [source]...")
|
||||
holder_atom.loc.visible_message("\blue \icon[holder_atom] [pick(options)]")
|
||||
|
||||
|
||||
@@ -778,6 +778,12 @@ var/list/be_special_flags = list(
|
||||
|
||||
#define NANO_IGNORE_DISTANCE 1
|
||||
|
||||
// Robot AI notifications
|
||||
#define ROBOT_NOTIFICATION_NEW_UNIT 1
|
||||
#define ROBOT_NOTIFICATION_NEW_NAME 2
|
||||
#define ROBOT_NOTIFICATION_NEW_MODULE 3
|
||||
#define ROBOT_NOTIFICATION_MODULE_RESET 4
|
||||
|
||||
#define DEFAULT_JOB_TYPE /datum/job/assistant
|
||||
|
||||
// Appearance change flags
|
||||
@@ -792,3 +798,4 @@ var/list/be_special_flags = list(
|
||||
#define APPEARANCE_EYE_COLOR 256
|
||||
#define APPEARANCE_ALL_HAIR APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR
|
||||
#define APPEARANCE_ALL 511
|
||||
|
||||
|
||||
Reference in New Issue
Block a user