mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-21 15:42:53 +00:00
Merge remote-tracking branch 'refs/remotes/PolarisSS13/master' into elevator-fix
This commit is contained in:
@@ -35,9 +35,8 @@
|
|||||||
#define ORGAN_BLEEDING (1<<1)
|
#define ORGAN_BLEEDING (1<<1)
|
||||||
#define ORGAN_BROKEN (1<<2)
|
#define ORGAN_BROKEN (1<<2)
|
||||||
#define ORGAN_DESTROYED (1<<3)
|
#define ORGAN_DESTROYED (1<<3)
|
||||||
#define ORGAN_SPLINTED (1<<4)
|
#define ORGAN_DEAD (1<<4)
|
||||||
#define ORGAN_DEAD (1<<5)
|
#define ORGAN_MUTATED (1<<5)
|
||||||
#define ORGAN_MUTATED (1<<6)
|
|
||||||
|
|
||||||
#define DROPLIMB_EDGE 0
|
#define DROPLIMB_EDGE 0
|
||||||
#define DROPLIMB_BLUNT 1
|
#define DROPLIMB_BLUNT 1
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ var/global/datum/shuttle_controller/shuttle_controller
|
|||||||
shuttle.docking_controller_tag = "centcom_shuttle"
|
shuttle.docking_controller_tag = "centcom_shuttle"
|
||||||
shuttle.dock_target_station = "centcom_shuttle_dock_airlock"
|
shuttle.dock_target_station = "centcom_shuttle_dock_airlock"
|
||||||
shuttle.dock_target_offsite = "centcom_shuttle_bay"
|
shuttle.dock_target_offsite = "centcom_shuttle_bay"
|
||||||
shuttles["Centcom"] = shuttle
|
shuttles["CentCom"] = shuttle
|
||||||
process_shuttles += shuttle
|
process_shuttles += shuttle
|
||||||
|
|
||||||
shuttle = new()
|
shuttle = new()
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/******************** Nanotrasen/Malf ********************/
|
/******************** NanoTrasen/Malf ********************/
|
||||||
/datum/ai_laws/nanotrasen
|
/datum/ai_laws/nanotrasen
|
||||||
name = "NT Default"
|
name = "NT Default"
|
||||||
selectable = 1
|
selectable = 1
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
set_zeroth_law(config.law_zero)
|
set_zeroth_law(config.law_zero)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/************* Nanotrasen Aggressive *************/
|
/************* NanoTrasen Aggressive *************/
|
||||||
/datum/ai_laws/nanotrasen_aggressive
|
/datum/ai_laws/nanotrasen_aggressive
|
||||||
name = "NT Aggressive"
|
name = "NT Aggressive"
|
||||||
selectable = 1
|
selectable = 1
|
||||||
|
|||||||
@@ -43,15 +43,15 @@
|
|||||||
|
|
||||||
/datum/locations/exodus
|
/datum/locations/exodus
|
||||||
name = "NSS Exodus"
|
name = "NSS Exodus"
|
||||||
desc = "A highly profitable research, mining, and supply dock for Nanotrasen that serves as one of their many facilities in exploiting the \
|
desc = "A highly profitable research, mining, and supply dock for NanoTrasen that serves as one of their many facilities in exploiting the \
|
||||||
wonders of phoron. It is currently orbiting around Erebus and maintains close contact with the NAS Crescent. The station itself has been \
|
wonders of phoron. It is currently orbiting around Erebus and maintains close contact with the NAS Crescent. The station itself has been \
|
||||||
a target for a large number of Mercenaries and other companies wishing to steal Nanotrasen's secrets."
|
a target for a large number of Mercenaries and other companies wishing to steal NanoTrasen's secrets."
|
||||||
|
|
||||||
/datum/locations/crescent
|
/datum/locations/crescent
|
||||||
name = "NAS Crescent"
|
name = "NAS Crescent"
|
||||||
desc = "The main hub for Nanotrasen in the Nyx system and is commonly referred to it by their workers as central command or \"Centcomm\". \
|
desc = "The main hub for NanoTrasen in the Nyx system and is commonly referred to it by their workers as central command or \"CentCom\". \
|
||||||
The Crescent refines and stores much of the products that stations (such as the Exodus) bring in. It is also a large refueling and supply \
|
The Crescent refines and stores much of the products that stations (such as the Exodus) bring in. It is also a large refueling and supply \
|
||||||
station of phoron and tritium in the Nyx system due to Nanotrasen being able to outsell almost any other company."
|
station of phoron and tritium in the Nyx system due to NanoTrasen being able to outsell almost any other company."
|
||||||
|
|
||||||
/datum/locations/emerald_habitation
|
/datum/locations/emerald_habitation
|
||||||
name = "Emerald Habitation"
|
name = "Emerald Habitation"
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
/datum/locations/northern_star //Inception joke here
|
/datum/locations/northern_star //Inception joke here
|
||||||
name = "Northern Star"
|
name = "Northern Star"
|
||||||
desc = "The Northern Star is an asteroid colony owned and operated by Nanotrasen, among many other asteroid installations. \
|
desc = "The Northern Star is an asteroid colony owned and operated by NanoTrasen, among many other asteroid installations. \
|
||||||
Originally conceived as 'just another pitstop' for weary asteroid miners, it has grown to become a significant installation in the Kara subsystem."
|
Originally conceived as 'just another pitstop' for weary asteroid miners, it has grown to become a significant installation in the Kara subsystem."
|
||||||
|
|
||||||
/datum/locations/northern_star/New(var/creator)
|
/datum/locations/northern_star/New(var/creator)
|
||||||
|
|||||||
@@ -42,6 +42,11 @@
|
|||||||
icon_state = "halterneck_bra"
|
icon_state = "halterneck_bra"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
|
/datum/category_item/underwear/top/tubetop
|
||||||
|
name = "Tube Top"
|
||||||
|
icon_state = "tubetop"
|
||||||
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/top/fishnet_base
|
/datum/category_item/underwear/top/fishnet_base
|
||||||
name = "Fishnet top"
|
name = "Fishnet top"
|
||||||
icon_state = "fishnet_body"
|
icon_state = "fishnet_body"
|
||||||
|
|||||||
@@ -68,3 +68,19 @@
|
|||||||
/datum/category_item/underwear/undershirt/shirt_blue_striped
|
/datum/category_item/underwear/undershirt/shirt_blue_striped
|
||||||
name = "Shirt, blue stripes"
|
name = "Shirt, blue stripes"
|
||||||
icon_state = "shirt_stripes_s"
|
icon_state = "shirt_stripes_s"
|
||||||
|
|
||||||
|
/datum/category_item/underwear/undershirt/bowling
|
||||||
|
name = "Bowling Shirt, Red"
|
||||||
|
icon_state = "bowling"
|
||||||
|
|
||||||
|
/datum/category_item/underwear/undershirt/bowlingp
|
||||||
|
name = "Bowling Shirt, Pink"
|
||||||
|
icon_state = "bowlingp"
|
||||||
|
|
||||||
|
/datum/category_item/underwear/undershirt/bowlinga
|
||||||
|
name = "Bowling Shirt, Aqua"
|
||||||
|
icon_state = "bowlinga"
|
||||||
|
|
||||||
|
/datum/category_item/underwear/undershirt/bowlingw
|
||||||
|
name = "Bowling Shirt, White"
|
||||||
|
icon_state = "bowlingw"
|
||||||
@@ -41,6 +41,7 @@ var/datum/antagonist/mercenary/mercs
|
|||||||
if(player.backbag == 2) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(player), slot_back)
|
if(player.backbag == 2) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(player), slot_back)
|
||||||
if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(player), slot_back)
|
if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(player), slot_back)
|
||||||
if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back)
|
if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back)
|
||||||
|
if(player.backbag == 5) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(player), slot_back)
|
||||||
player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack)
|
player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack)
|
||||||
player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack)
|
player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack)
|
||||||
player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT
|
player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ var/datum/antagonist/wizard/wizards
|
|||||||
if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
|
if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
|
||||||
if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(wizard_mob), slot_back)
|
if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(wizard_mob), slot_back)
|
||||||
if(wizard_mob.backbag == 4) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(wizard_mob), slot_back)
|
if(wizard_mob.backbag == 4) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(wizard_mob), slot_back)
|
||||||
|
if(wizard_mob.backbag == 5) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
|
||||||
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack)
|
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack)
|
||||||
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
|
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
|
||||||
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand)
|
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand)
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ area/space/atmosalert()
|
|||||||
icon_state = "shuttle2"
|
icon_state = "shuttle2"
|
||||||
|
|
||||||
/area/shuttle/escape/centcom
|
/area/shuttle/escape/centcom
|
||||||
name = "\improper Emergency Shuttle Centcom"
|
name = "\improper Emergency Shuttle CentCom"
|
||||||
icon_state = "shuttle"
|
icon_state = "shuttle"
|
||||||
|
|
||||||
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
||||||
@@ -304,7 +304,7 @@ area/space/atmosalert()
|
|||||||
|
|
||||||
/area/shuttle/transport1/centcom
|
/area/shuttle/transport1/centcom
|
||||||
icon_state = "shuttle"
|
icon_state = "shuttle"
|
||||||
name = "\improper Transport Shuttle Centcom"
|
name = "\improper Transport Shuttle CentCom"
|
||||||
|
|
||||||
/area/shuttle/transport1/station
|
/area/shuttle/transport1/station
|
||||||
icon_state = "shuttle"
|
icon_state = "shuttle"
|
||||||
@@ -346,7 +346,7 @@ area/space/atmosalert()
|
|||||||
icon_state = "shuttlered2"
|
icon_state = "shuttlered2"
|
||||||
|
|
||||||
/area/shuttle/administration/centcom
|
/area/shuttle/administration/centcom
|
||||||
name = "\improper Administration Shuttle Centcom"
|
name = "\improper Administration Shuttle CentCom"
|
||||||
icon_state = "shuttlered"
|
icon_state = "shuttlered"
|
||||||
|
|
||||||
/area/shuttle/administration/station
|
/area/shuttle/administration/station
|
||||||
@@ -354,7 +354,7 @@ area/space/atmosalert()
|
|||||||
icon_state = "shuttlered2"
|
icon_state = "shuttlered2"
|
||||||
|
|
||||||
/area/shuttle/trade/centcom
|
/area/shuttle/trade/centcom
|
||||||
name = "\improper Trade Shuttle Centcom"
|
name = "\improper Trade Shuttle CentCom"
|
||||||
icon_state = "shuttlered"
|
icon_state = "shuttlered"
|
||||||
|
|
||||||
/area/shuttle/trade/station
|
/area/shuttle/trade/station
|
||||||
@@ -415,34 +415,34 @@ area/space/atmosalert()
|
|||||||
// CENTCOM
|
// CENTCOM
|
||||||
|
|
||||||
/area/centcom
|
/area/centcom
|
||||||
name = "\improper Centcom"
|
name = "\improper CentCom"
|
||||||
icon_state = "centcom"
|
icon_state = "centcom"
|
||||||
requires_power = 0
|
requires_power = 0
|
||||||
lighting_use_dynamic = 0
|
lighting_use_dynamic = 0
|
||||||
|
|
||||||
/area/centcom/control
|
/area/centcom/control
|
||||||
name = "\improper Centcom Control"
|
name = "\improper CentCom Control"
|
||||||
|
|
||||||
/area/centcom/evac
|
/area/centcom/evac
|
||||||
name = "\improper Centcom Emergency Shuttle"
|
name = "\improper CentCom Emergency Shuttle"
|
||||||
|
|
||||||
/area/centcom/suppy
|
/area/centcom/suppy
|
||||||
name = "\improper Centcom Supply Shuttle"
|
name = "\improper CentCom Supply Shuttle"
|
||||||
|
|
||||||
/area/centcom/ferry
|
/area/centcom/ferry
|
||||||
name = "\improper Centcom Transport Shuttle"
|
name = "\improper CentCom Transport Shuttle"
|
||||||
|
|
||||||
/area/centcom/shuttle
|
/area/centcom/shuttle
|
||||||
name = "\improper Centcom Administration Shuttle"
|
name = "\improper CentCom Administration Shuttle"
|
||||||
|
|
||||||
/area/centcom/test
|
/area/centcom/test
|
||||||
name = "\improper Centcom Testing Facility"
|
name = "\improper CentCom Testing Facility"
|
||||||
|
|
||||||
/area/centcom/living
|
/area/centcom/living
|
||||||
name = "\improper Centcom Living Quarters"
|
name = "\improper CentCom Living Quarters"
|
||||||
|
|
||||||
/area/centcom/specops
|
/area/centcom/specops
|
||||||
name = "\improper Centcom Special Ops"
|
name = "\improper CentCom Special Ops"
|
||||||
|
|
||||||
/area/centcom/creed
|
/area/centcom/creed
|
||||||
name = "Creed's Office"
|
name = "Creed's Office"
|
||||||
@@ -458,15 +458,15 @@ area/space/atmosalert()
|
|||||||
name = "\improper Tram Station"
|
name = "\improper Tram Station"
|
||||||
|
|
||||||
/area/centcom/security
|
/area/centcom/security
|
||||||
name = "\improper Centcom Security"
|
name = "\improper CentCom Security"
|
||||||
icon_state = "centcom_security"
|
icon_state = "centcom_security"
|
||||||
|
|
||||||
/area/centcom/medical
|
/area/centcom/medical
|
||||||
name = "\improper Centcom Medical"
|
name = "\improper CentCom Medical"
|
||||||
icon_state = "centcom_medical"
|
icon_state = "centcom_medical"
|
||||||
|
|
||||||
/area/centcom/command
|
/area/centcom/command
|
||||||
name = "\improper Centcom Command" //Central Command Command totally isn't RAS Syndrome in action.
|
name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action.
|
||||||
icon_state = "centcom_command"
|
icon_state = "centcom_command"
|
||||||
|
|
||||||
/area/centcom/main_hall
|
/area/centcom/main_hall
|
||||||
@@ -474,15 +474,15 @@ area/space/atmosalert()
|
|||||||
icon_state = "centcom_hallway1"
|
icon_state = "centcom_hallway1"
|
||||||
|
|
||||||
/area/centcom/bar
|
/area/centcom/bar
|
||||||
name = "\improper Centcom Bar"
|
name = "\improper CentCom Bar"
|
||||||
icon_state = "centcom_crew"
|
icon_state = "centcom_crew"
|
||||||
|
|
||||||
/area/centcom/restaurant
|
/area/centcom/restaurant
|
||||||
name = "\improper Centcom Restaurant"
|
name = "\improper CentCom Restaurant"
|
||||||
icon_state = "centcom_crew"
|
icon_state = "centcom_crew"
|
||||||
|
|
||||||
/area/centcom/bathroom
|
/area/centcom/bathroom
|
||||||
name = "\improper Centcom Bathroom"
|
name = "\improper CentCom Bathroom"
|
||||||
icon_state = "centcom_crew"
|
icon_state = "centcom_crew"
|
||||||
|
|
||||||
//SYNDICATES
|
//SYNDICATES
|
||||||
@@ -2531,20 +2531,20 @@ area/space/atmosalert()
|
|||||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||||
|
|
||||||
/area/tcommsat/entrance
|
/area/tcommsat/entrance
|
||||||
name = "\improper Telecoms Teleporter"
|
name = "\improper Telecomms Teleporter"
|
||||||
icon_state = "tcomsatentrance"
|
icon_state = "tcomsatentrance"
|
||||||
|
|
||||||
/area/tcommsat/chamber
|
/area/tcommsat/chamber
|
||||||
name = "\improper Telecoms Central Compartment"
|
name = "\improper Telecomms Central Compartment"
|
||||||
icon_state = "tcomsatcham"
|
icon_state = "tcomsatcham"
|
||||||
|
|
||||||
/area/tcomsat
|
/area/tcomsat
|
||||||
name = "\improper Telecoms Satellite"
|
name = "\improper Telecomms Satellite"
|
||||||
icon_state = "tcomsatlob"
|
icon_state = "tcomsatlob"
|
||||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||||
|
|
||||||
/area/tcomfoyer
|
/area/tcomfoyer
|
||||||
name = "\improper Telecoms Foyer"
|
name = "\improper Telecomms Foyer"
|
||||||
icon_state = "tcomsatentrance"
|
icon_state = "tcomsatentrance"
|
||||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||||
|
|
||||||
@@ -2559,7 +2559,7 @@ area/space/atmosalert()
|
|||||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||||
|
|
||||||
/area/tcommsat/computer
|
/area/tcommsat/computer
|
||||||
name = "\improper Telecoms Control Room"
|
name = "\improper Telecomms Control Room"
|
||||||
icon_state = "tcomsatcomp"
|
icon_state = "tcomsatcomp"
|
||||||
|
|
||||||
/area/tcommsat/lounge
|
/area/tcommsat/lounge
|
||||||
@@ -2631,7 +2631,7 @@ area/space/atmosalert()
|
|||||||
requires_power = 0
|
requires_power = 0
|
||||||
|
|
||||||
/area/awaymission/spacebattle/cruiser
|
/area/awaymission/spacebattle/cruiser
|
||||||
name = "\improper Nanotrasen Cruiser"
|
name = "\improper NanoTrasen Cruiser"
|
||||||
|
|
||||||
/area/awaymission/spacebattle/syndicate1
|
/area/awaymission/spacebattle/syndicate1
|
||||||
name = "\improper Syndicate Assault Ship 1"
|
name = "\improper Syndicate Assault Ship 1"
|
||||||
|
|||||||
@@ -492,3 +492,20 @@ its easier to just keep the beam vertical.
|
|||||||
else if(ismob(I))
|
else if(ismob(I))
|
||||||
var/mob/M = I
|
var/mob/M = I
|
||||||
M.show_message(message, 2, deaf_message, 1)
|
M.show_message(message, 2, deaf_message, 1)
|
||||||
|
|
||||||
|
/atom/movable/proc/dropInto(var/atom/destination)
|
||||||
|
while(istype(destination))
|
||||||
|
var/atom/drop_destination = destination.onDropInto(src)
|
||||||
|
if(!istype(drop_destination) || drop_destination == destination)
|
||||||
|
return forceMove(destination)
|
||||||
|
destination = drop_destination
|
||||||
|
return forceMove(null)
|
||||||
|
|
||||||
|
/atom/proc/onDropInto(var/atom/movable/AM)
|
||||||
|
return // If onDropInto returns null, then dropInto will forceMove AM into us.
|
||||||
|
|
||||||
|
/atom/movable/onDropInto(var/atom/movable/AM)
|
||||||
|
return loc // If onDropInto returns something, then dropInto will attempt to drop AM there.
|
||||||
|
|
||||||
|
/atom/proc/InsertedContents()
|
||||||
|
return contents
|
||||||
|
|||||||
@@ -63,13 +63,35 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/atom/movable/proc/forceMove(atom/destination)
|
/atom/movable/proc/forceMove(atom/destination)
|
||||||
if(destination)
|
if(loc == destination)
|
||||||
if(loc)
|
|
||||||
loc.Exited(src)
|
|
||||||
loc = destination
|
|
||||||
loc.Entered(src)
|
|
||||||
return 1
|
|
||||||
return 0
|
return 0
|
||||||
|
var/is_origin_turf = isturf(loc)
|
||||||
|
var/is_destination_turf = isturf(destination)
|
||||||
|
// It is a new area if:
|
||||||
|
// Both the origin and destination are turfs with different areas.
|
||||||
|
// When either origin or destination is a turf and the other is not.
|
||||||
|
var/is_new_area = (is_origin_turf ^ is_destination_turf) || (is_origin_turf && is_destination_turf && loc.loc != destination.loc)
|
||||||
|
|
||||||
|
var/atom/origin = loc
|
||||||
|
loc = destination
|
||||||
|
|
||||||
|
if(origin)
|
||||||
|
origin.Exited(src, destination)
|
||||||
|
if(is_origin_turf)
|
||||||
|
for(var/atom/movable/AM in origin)
|
||||||
|
AM.Uncrossed(src)
|
||||||
|
if(is_new_area && is_origin_turf)
|
||||||
|
origin.loc.Exited(src, destination)
|
||||||
|
|
||||||
|
if(destination)
|
||||||
|
destination.Entered(src, origin)
|
||||||
|
if(is_destination_turf) // If we're entering a turf, cross all movable atoms
|
||||||
|
for(var/atom/movable/AM in loc)
|
||||||
|
if(AM != src)
|
||||||
|
AM.Crossed(src)
|
||||||
|
if(is_new_area && is_destination_turf)
|
||||||
|
destination.loc.Entered(src, origin)
|
||||||
|
return 1
|
||||||
|
|
||||||
//called when src is thrown into hit_atom
|
//called when src is thrown into hit_atom
|
||||||
/atom/movable/proc/throw_impact(atom/hit_atom, var/speed)
|
/atom/movable/proc/throw_impact(atom/hit_atom, var/speed)
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
//This is a generic proc that should be called by other ling armor procs to equip them.
|
//This is a generic proc that should be called by other ling armor procs to equip them.
|
||||||
/mob/proc/changeling_generic_armor(var/armor_type, var/helmet_type, var/boot_type)
|
/mob/proc/changeling_generic_armor(var/armor_type, var/helmet_type, var/boot_type, var/chem_cost)
|
||||||
var/datum/changeling/changeling = changeling_power(20,1,100,CONSCIOUS)
|
|
||||||
if(!changeling)
|
|
||||||
return
|
|
||||||
|
|
||||||
if(!ishuman(src))
|
if(!ishuman(src))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/mob/living/carbon/human/M = src
|
var/mob/living/carbon/human/M = src
|
||||||
|
|
||||||
|
if(istype(M.wear_suit, armor_type) || istype(M.head, helmet_type) || istype(M.shoes, boot_type))
|
||||||
|
chem_cost = 0
|
||||||
|
|
||||||
|
var/datum/changeling/changeling = changeling_power(chem_cost, 1, 100, CONSCIOUS)
|
||||||
|
|
||||||
|
if(!changeling)
|
||||||
|
return
|
||||||
|
|
||||||
//First, check if we're already wearing the armor, and if so, take it off.
|
//First, check if we're already wearing the armor, and if so, take it off.
|
||||||
if(istype(M.wear_suit, armor_type) || istype(M.head, helmet_type) || istype(M.shoes, boot_type))
|
if(istype(M.wear_suit, armor_type) || istype(M.head, helmet_type) || istype(M.shoes, boot_type))
|
||||||
M.visible_message("<span class='warning'>[M] casts off their [M.wear_suit.name]!</span>",
|
M.visible_message("<span class='warning'>[M] casts off their [M.wear_suit.name]!</span>",
|
||||||
@@ -39,7 +44,7 @@
|
|||||||
var/obj/item/clothing/shoes/B = new boot_type(src)
|
var/obj/item/clothing/shoes/B = new boot_type(src)
|
||||||
src.equip_to_slot_or_del(B, slot_shoes)
|
src.equip_to_slot_or_del(B, slot_shoes)
|
||||||
|
|
||||||
src.mind.changeling.chem_charges -= 20
|
src.mind.changeling.chem_charges -= chem_cost
|
||||||
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
|
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
|
||||||
M.update_inv_wear_suit()
|
M.update_inv_wear_suit()
|
||||||
M.update_inv_head()
|
M.update_inv_head()
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
if(changeling_generic_weapon(/obj/item/weapon/melee/arm_blade/greater))
|
if(changeling_generic_weapon(/obj/item/weapon/melee/arm_blade/greater))
|
||||||
src << "<span class='notice'>We prepare an extra sharp blade.</span>"
|
src << "<span class='notice'>We prepare an extra sharp blade.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
/mob/proc/changeling_spacesuit()
|
/mob/proc/changeling_spacesuit()
|
||||||
set category = "Changeling"
|
set category = "Changeling"
|
||||||
set name = "Organic Space Suit (20)"
|
set name = "Organic Space Suit (20)"
|
||||||
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling,/obj/item/clothing/head/helmet/space/changeling,/obj/item/clothing/shoes/magboots/changeling))
|
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling,/obj/item/clothing/head/helmet/space/changeling,/obj/item/clothing/shoes/magboots/changeling, 20))
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
set category = "Changeling"
|
set category = "Changeling"
|
||||||
set name = "Organic Spacearmor (20)"
|
set name = "Organic Spacearmor (20)"
|
||||||
|
|
||||||
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling/armored,/obj/item/clothing/head/helmet/space/changeling/armored,/obj/item/clothing/shoes/magboots/changeling/armored))
|
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling/armored,/obj/item/clothing/head/helmet/space/changeling/armored,/obj/item/clothing/shoes/magboots/changeling/armored, 20))
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
if(changeling_generic_weapon(/obj/item/weapon/electric_hand/efficent))
|
if(changeling_generic_weapon(/obj/item/weapon/electric_hand/efficent))
|
||||||
src << "<span class='notice'>We will shock others more efficently.</span>"
|
src << "<span class='notice'>We will shock others more efficently.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
if(changeling_generic_weapon(/obj/item/weapon/electric_hand,0)) //Chemical cost is handled in the equip proc.
|
if(changeling_generic_weapon(/obj/item/weapon/electric_hand,0)) //Chemical cost is handled in the equip proc.
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
duration = duration + 150
|
duration = duration + 150
|
||||||
src << "<span class='notice'>They will be deprived of sight for longer.</span>"
|
src << "<span class='notice'>They will be deprived of sight for longer.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
spawn(duration)
|
spawn(duration)
|
||||||
T.disabilities &= ~NEARSIGHTED
|
T.disabilities &= ~NEARSIGHTED
|
||||||
T.eye_blind = 10
|
T.eye_blind = 10
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
range = range + 3
|
range = range + 3
|
||||||
src << "<span class='notice'>We can fire our next sting from five squares away.</span>"
|
src << "<span class='notice'>We can fire our next sting from five squares away.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
changeling.sting_range = range
|
changeling.sting_range = range
|
||||||
src.verbs -= /mob/proc/changeling_boost_range
|
src.verbs -= /mob/proc/changeling_boost_range
|
||||||
spawn(5)
|
spawn(5)
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
inject_amount = inject_amount * 1.5
|
inject_amount = inject_amount * 1.5
|
||||||
src << "<span class='notice'>We inject extra chemicals.</span>"
|
src << "<span class='notice'>We inject extra chemicals.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
if(T.reagents)
|
if(T.reagents)
|
||||||
T.reagents.add_reagent("cryotoxin", inject_amount)
|
T.reagents.add_reagent("cryotoxin", inject_amount)
|
||||||
feedback_add_details("changeling_powers","CS")
|
feedback_add_details("changeling_powers","CS")
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
duration = duration + 100
|
duration = duration + 100
|
||||||
src << "<span class='notice'>They will be unable to hear for a little longer.</span>"
|
src << "<span class='notice'>They will be unable to hear for a little longer.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
T << "<span class='danger'>Your ears pop and begin ringing loudly!</span>"
|
T << "<span class='danger'>Your ears pop and begin ringing loudly!</span>"
|
||||||
T.sdisabilities |= DEAF
|
T.sdisabilities |= DEAF
|
||||||
spawn(duration) T.sdisabilities &= ~DEAF
|
spawn(duration) T.sdisabilities &= ~DEAF
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
i = i * 2
|
i = i * 2
|
||||||
src << "<span class='notice'>Our toxin will be extra potent, when it strikes.</span>"
|
src << "<span class='notice'>Our toxin will be extra potent, when it strikes.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
spawn(2 MINUTES)
|
spawn(2 MINUTES)
|
||||||
if(T) //We might not exist in two minutes, for whatever reason.
|
if(T) //We might not exist in two minutes, for whatever reason.
|
||||||
T << "<span class='danger'>You feel a burning sensation flowing through your veins!</span>"
|
T << "<span class='danger'>You feel a burning sensation flowing through your veins!</span>"
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
effect = effect + 20
|
effect = effect + 20
|
||||||
src << "<span class='notice'>We make them extremely weak.</span>"
|
src << "<span class='notice'>We make them extremely weak.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
var/health_to_take_away = H.maxHealth * (effect / 100)
|
var/health_to_take_away = H.maxHealth * (effect / 100)
|
||||||
|
|
||||||
H.maxHealth -= health_to_take_away
|
H.maxHealth -= health_to_take_away
|
||||||
|
|||||||
@@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
src << "<span class='notice'>We feel unstoppable.</span>"
|
src << "<span class='notice'>We feel unstoppable.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
spawn(1)
|
spawn(1)
|
||||||
var/i = 30
|
var/i = 30
|
||||||
while(i)
|
while(i)
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
heal_amount = heal_amount * 2
|
heal_amount = heal_amount * 2
|
||||||
src << "<span class='notice'>We will heal much faster.</span>"
|
src << "<span class='notice'>We will heal much faster.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
|
|
||||||
spawn(0)
|
spawn(0)
|
||||||
src << "<span class='notice'>We begin to heal ourselves.</span>"
|
src << "<span class='notice'>We begin to heal ourselves.</span>"
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
heal_amount = heal_amount * 2
|
heal_amount = heal_amount * 2
|
||||||
src << "<span class='notice'>We will heal much faster.</span>"
|
src << "<span class='notice'>We will heal much faster.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
|
|
||||||
for(var/i = 0, i<10,i++)
|
for(var/i = 0, i<10,i++)
|
||||||
if(C)
|
if(C)
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
healing_amount = C.maxHealth
|
healing_amount = C.maxHealth
|
||||||
src << "<span class='notice'>We completely heal ourselves.</span>"
|
src << "<span class='notice'>We completely heal ourselves.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
spawn(0)
|
spawn(0)
|
||||||
C.adjustBruteLoss(-healing_amount)
|
C.adjustBruteLoss(-healing_amount)
|
||||||
C.adjustFireLoss(-healing_amount)
|
C.adjustFireLoss(-healing_amount)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/datum/power/changeling/recursive_enhancement
|
/datum/power/changeling/recursive_enhancement
|
||||||
name = "Recursive Enhancement"
|
name = "Recursive Enhancement"
|
||||||
desc = "We cause our next ability use to have increased or additional effects."
|
desc = "We cause our abilities to have increased or additional effects."
|
||||||
helptext = "To check the effects for each ability, check the blue text underneath the ability in the evolution menu."
|
helptext = "To check the effects for each ability, check the blue text underneath the ability in the evolution menu."
|
||||||
ability_icon_state = "ling_recursive_enhancement"
|
ability_icon_state = "ling_recursive_enhancement"
|
||||||
genomecost = 3
|
genomecost = 3
|
||||||
@@ -9,16 +9,16 @@
|
|||||||
//Increases macimum chemical storage
|
//Increases macimum chemical storage
|
||||||
/mob/proc/changeling_recursive_enhancement()
|
/mob/proc/changeling_recursive_enhancement()
|
||||||
set category = "Changeling"
|
set category = "Changeling"
|
||||||
set name = "Recursive Enhancement (10)"
|
set name = "Recursive Enhancement"
|
||||||
set desc = "Empowers our next ability."
|
set desc = "Empowers our abilities."
|
||||||
var/datum/changeling/changeling = changeling_power(10,0,100,UNCONSCIOUS)
|
var/datum/changeling/changeling = changeling_power(0,0,100,UNCONSCIOUS)
|
||||||
if(!changeling)
|
if(!changeling)
|
||||||
return 0
|
return 0
|
||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
src << "<span class='warning'>We have already prepared to enhance our next ability.</span>"
|
src << "<span class='warning'>We will no longer empower our abilities.</span>"
|
||||||
|
src.mind.changeling.recursive_enhancement = 0
|
||||||
return 0
|
return 0
|
||||||
src << "<span class='notice'>We empower ourselves. Our next ability will be extra potent.</span>"
|
src << "<span class='notice'>We empower ourselves. Our abilities will now be extra potent.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 1
|
src.mind.changeling.recursive_enhancement = 1
|
||||||
src.mind.changeling.chem_charges -= 10
|
|
||||||
feedback_add_details("changeling_powers","RE")
|
feedback_add_details("changeling_powers","RE")
|
||||||
return 1
|
return 1
|
||||||
@@ -12,6 +12,8 @@
|
|||||||
ling_datum.purchased_powers = list() //Then wipe all the powers we bought.
|
ling_datum.purchased_powers = list() //Then wipe all the powers we bought.
|
||||||
ling_datum.geneticpoints = ling_datum.max_geneticpoints //Now refund our points to the maximum.
|
ling_datum.geneticpoints = ling_datum.max_geneticpoints //Now refund our points to the maximum.
|
||||||
ling_datum.chem_recharge_rate = 0.5 //If glands were bought, revert that upgrade.
|
ling_datum.chem_recharge_rate = 0.5 //If glands were bought, revert that upgrade.
|
||||||
|
src.mind.changeling.recursive_enhancement = 0 //Ensures this is cleared
|
||||||
|
|
||||||
ling_datum.chem_storage = 50
|
ling_datum.chem_storage = 50
|
||||||
if(ishuman(src))
|
if(ishuman(src))
|
||||||
var/mob/living/carbon/human/H = src
|
var/mob/living/carbon/human/H = src
|
||||||
|
|||||||
@@ -40,7 +40,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
range = range * 2
|
range = range * 2
|
||||||
src << "<span class='notice'>We are extra loud.</span>"
|
src << "<span class='notice'>We are extra loud.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
|
|
||||||
for(var/mob/living/M in range(range, src))
|
for(var/mob/living/M in range(range, src))
|
||||||
if(iscarbon(M))
|
if(iscarbon(M))
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
duration = duration + 10
|
duration = duration + 10
|
||||||
src << "<span class='notice'>They will be unable to cry out in fear for a little longer.</span>"
|
src << "<span class='notice'>They will be unable to cry out in fear for a little longer.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
T.silent += duration
|
T.silent += duration
|
||||||
feedback_add_details("changeling_powers","SS")
|
feedback_add_details("changeling_powers","SS")
|
||||||
return 1
|
return 1
|
||||||
@@ -39,7 +39,6 @@
|
|||||||
if(src.mind.changeling.recursive_enhancement)
|
if(src.mind.changeling.recursive_enhancement)
|
||||||
H.invisibility = INVISIBILITY_OBSERVER
|
H.invisibility = INVISIBILITY_OBSERVER
|
||||||
src << "<span class='notice'>We are now truly invisible.</span>"
|
src << "<span class='notice'>We are now truly invisible.</span>"
|
||||||
src.mind.changeling.recursive_enhancement = 0
|
|
||||||
|
|
||||||
while(H.m_intent == "walk" && H.mind.changeling.cloaked && !H.stat) //This loop will keep going until the player uncloaks.
|
while(H.m_intent == "walk" && H.mind.changeling.cloaked && !H.stat) //This loop will keep going until the player uncloaks.
|
||||||
if(mind.changeling.chem_recharge_rate != 0) //Without this, there is an exploit that can be done, if one buys engorged chem sacks while cloaked.
|
if(mind.changeling.chem_recharge_rate != 0) //Without this, there is an exploit that can be done, if one buys engorged chem sacks while cloaked.
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ datum
|
|||||||
target = targeta
|
target = targeta
|
||||||
job = joba
|
job = joba
|
||||||
weight = get_points(job)
|
weight = get_points(job)
|
||||||
explanation_text = "Frame [target.current.real_name], the [target.assigned_role] for a crime and make sure they are arrested and brought back to the Centcom station alive. We'll handle the rest from there."
|
explanation_text = "Frame [target.current.real_name], the [target.assigned_role] for a crime and make sure they are arrested and brought back to the CentCom station alive. We'll handle the rest from there."
|
||||||
|
|
||||||
check_completion()
|
check_completion()
|
||||||
if(!emergency_shuttle.returned())
|
if(!emergency_shuttle.returned())
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
the omniscience of the AI and rival the most hardened weapons your station is capable of. Tread lightly and \
|
the omniscience of the AI and rival the most hardened weapons your station is capable of. Tread lightly and \
|
||||||
only hope this unknown assassin isn't here for you."
|
only hope this unknown assassin isn't here for you."
|
||||||
config_tag = "ninja"
|
config_tag = "ninja"
|
||||||
required_players = 1
|
required_players = 5
|
||||||
required_players_secret = 3
|
required_players_secret = 5
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
end_on_antag_death = 0
|
end_on_antag_death = 0
|
||||||
antag_tags = list(MODE_NINJA)
|
antag_tags = list(MODE_NINJA)
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
their powers can be used for good or if their arrival foreshadows the destruction of the entire colony, or worse."
|
their powers can be used for good or if their arrival foreshadows the destruction of the entire colony, or worse."
|
||||||
config_tag = "technomancer"
|
config_tag = "technomancer"
|
||||||
votable = 0
|
votable = 0
|
||||||
required_players = 8
|
required_players = 5
|
||||||
required_players_secret = 10
|
required_players_secret = 5
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
end_on_antag_death = 0
|
end_on_antag_death = 0
|
||||||
antag_tags = list(MODE_TECHNOMANCER)
|
antag_tags = list(MODE_TECHNOMANCER)
|
||||||
@@ -23,5 +23,6 @@
|
|||||||
config_tag = "autotraitor"
|
config_tag = "autotraitor"
|
||||||
antag_tags = list(MODE_AUTOTRAITOR)
|
antag_tags = list(MODE_AUTOTRAITOR)
|
||||||
round_autoantag = 1
|
round_autoantag = 1
|
||||||
required_players_secret = 1
|
required_players_secret = 0
|
||||||
|
required_enemies = 0
|
||||||
antag_scaling_coeff = 5
|
antag_scaling_coeff = 5
|
||||||
|
|||||||
@@ -237,10 +237,10 @@ proc/get_all_job_icons() //For all existing HUD icons
|
|||||||
return I.rank
|
return I.rank
|
||||||
|
|
||||||
var/centcom = get_all_centcom_jobs()
|
var/centcom = get_all_centcom_jobs()
|
||||||
if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job
|
if(I.assignment in centcom) //Return with the NT logo if it is a CentCom job
|
||||||
return "Centcom"
|
return "CentCom"
|
||||||
if(I.rank in centcom)
|
if(I.rank in centcom)
|
||||||
return "Centcom"
|
return "CentCom"
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||||
if(has_alt_title(H, alt_title,"Visitor")) //I doubt someone visiting the station would want to wear an ugly grey uniform
|
if(has_alt_title(H, alt_title,"Visitor")) //I doubt someone visiting the station would want to wear an ugly grey uniform
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform)
|
||||||
else if(has_alt_title(H, alt_title,"Resident"))
|
else if(has_alt_title(H, alt_title,"Resident"))
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/cap(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/cap(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/com(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/captain(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/captain(H), slot_w_uniform)
|
||||||
if(H.age>49)
|
if(H.age>49)
|
||||||
// Since we can have something other than the default uniform at this
|
// Since we can have something other than the default uniform at this
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
|
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
|
||||||
@@ -86,6 +87,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/hydroponics(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/hydroponics(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/hyd(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/hyd(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/hyd(H), slot_back)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
@@ -171,6 +173,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||||
@@ -265,6 +268,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
||||||
@@ -73,6 +74,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
|
||||||
@@ -111,6 +113,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/atmos(H), slot_l_store)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/atmos(H), slot_l_store)
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||||
|
|
||||||
/datum/job/proc/equip_survival(var/mob/living/carbon/human/H)
|
/datum/job/proc/equip_survival(var/mob/living/carbon/human/H)
|
||||||
if(!H) return 0
|
if(!H) return 0
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt)
|
||||||
@@ -63,6 +64,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
|
||||||
if(has_alt_title(H, alt_title,"Emergency Physician"))
|
if(has_alt_title(H, alt_title,"Emergency Physician"))
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
||||||
@@ -78,6 +80,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/vir(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/vir(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/viro(H), slot_back)
|
||||||
else if(has_alt_title(H, alt_title,"Medical Doctor"))
|
else if(has_alt_title(H, alt_title,"Medical Doctor"))
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||||
@@ -128,6 +131,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/chem(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/chem(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/chem(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -185,6 +189,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||||
if(has_alt_title(H, alt_title,"Psychiatrist"))
|
if(has_alt_title(H, alt_title,"Psychiatrist"))
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform)
|
||||||
else if(has_alt_title(H, alt_title,"Psychologist"))
|
else if(has_alt_title(H, alt_title,"Psychologist"))
|
||||||
@@ -221,6 +226,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
|
||||||
if(has_alt_title(H, alt_title,"Emergency Medical Technician"))
|
if(has_alt_title(H, alt_title,"Emergency Medical Technician"))
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -70,6 +71,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -101,6 +103,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear)
|
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||||
@@ -70,6 +71,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
|
||||||
@@ -108,6 +110,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
|
||||||
@@ -151,6 +154,7 @@
|
|||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||||
|
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
|
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
|
||||||
|
|||||||
@@ -329,7 +329,7 @@
|
|||||||
organStatus["broken"] = E.broken_description
|
organStatus["broken"] = E.broken_description
|
||||||
if(E.status & ORGAN_ROBOT)
|
if(E.status & ORGAN_ROBOT)
|
||||||
organStatus["robotic"] = 1
|
organStatus["robotic"] = 1
|
||||||
if(E.status & ORGAN_SPLINTED)
|
if(E.splinted)
|
||||||
organStatus["splinted"] = 1
|
organStatus["splinted"] = 1
|
||||||
if(E.status & ORGAN_BLEEDING)
|
if(E.status & ORGAN_BLEEDING)
|
||||||
organStatus["bleeding"] = 1
|
organStatus["bleeding"] = 1
|
||||||
@@ -483,7 +483,7 @@
|
|||||||
break
|
break
|
||||||
if(istype(e, /obj/item/organ/external/chest) && occupant.is_lung_ruptured())
|
if(istype(e, /obj/item/organ/external/chest) && occupant.is_lung_ruptured())
|
||||||
lung_ruptured = "Lung ruptured:"
|
lung_ruptured = "Lung ruptured:"
|
||||||
if(e.status & ORGAN_SPLINTED)
|
if(e.splinted)
|
||||||
splint = "Splinted:"
|
splint = "Splinted:"
|
||||||
if(e.status & ORGAN_BLEEDING)
|
if(e.status & ORGAN_BLEEDING)
|
||||||
bled = "Bleeding:"
|
bled = "Bleeding:"
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ mob/living/proc/near_camera()
|
|||||||
|
|
||||||
/mob/living/proc/tracking_status()
|
/mob/living/proc/tracking_status()
|
||||||
// Easy checks first.
|
// Easy checks first.
|
||||||
// Don't detect mobs on Centcom. Since the wizard den is on Centcomm, we only need this.
|
// Don't detect mobs on CentCom. Since the wizard den is on CentCom, we only need this.
|
||||||
var/obj/item/weapon/card/id/id = GetIdCard()
|
var/obj/item/weapon/card/id/id = GetIdCard()
|
||||||
if(id && id.prevent_tracking())
|
if(id && id.prevent_tracking())
|
||||||
return TRACKING_TERMINATE
|
return TRACKING_TERMINATE
|
||||||
|
|||||||
@@ -173,7 +173,7 @@
|
|||||||
src.updateDialog()
|
src.updateDialog()
|
||||||
|
|
||||||
// OMG CENTCOMM LETTERHEAD
|
// OMG CENTCOMM LETTERHEAD
|
||||||
if("MessageCentcomm")
|
if("MessageCentCom")
|
||||||
if(src.authenticated==2)
|
if(src.authenticated==2)
|
||||||
if(centcomm_message_cooldown)
|
if(centcomm_message_cooldown)
|
||||||
usr << "\red Arrays recycling. Please stand by."
|
usr << "\red Arrays recycling. Please stand by."
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
||||||
if(!input || !(usr in view(1,src)))
|
if(!input || !(usr in view(1,src)))
|
||||||
return
|
return
|
||||||
Centcomm_announce(input, usr)
|
CentCom_announce(input, usr)
|
||||||
usr << "\blue Message transmitted."
|
usr << "\blue Message transmitted."
|
||||||
log_say("[key_name(usr)] has made an IA [boss_short] announcement: [input]")
|
log_say("[key_name(usr)] has made an IA [boss_short] announcement: [input]")
|
||||||
centcomm_message_cooldown = 1
|
centcomm_message_cooldown = 1
|
||||||
@@ -295,7 +295,7 @@
|
|||||||
if (src.authenticated==2)
|
if (src.authenticated==2)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
|
||||||
if(src.emagged == 0)
|
if(src.emagged == 0)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageCentcomm'>Send an emergency message to [boss_short]</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageCentCom'>Send an emergency message to [boss_short]</A> \]"
|
||||||
else
|
else
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/file/program/communications
|
/datum/file/program/communications
|
||||||
name = "Centcom communications relay"
|
name = "CentCom communications relay"
|
||||||
desc = "Used to connect to Centcom."
|
desc = "Used to connect to CentCom."
|
||||||
active_state = "comm"
|
active_state = "comm"
|
||||||
req_access = list(access_heads)
|
req_access = list(access_heads)
|
||||||
|
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
computer.updateDialog()
|
computer.updateDialog()
|
||||||
|
|
||||||
// OMG CENTCOMM LETTERHEAD
|
// OMG CENTCOMM LETTERHEAD
|
||||||
if("MessageCentcomm" in href_list)
|
if("MessageCentCom" in href_list)
|
||||||
if(!computer.radio.subspace)
|
if(!computer.radio.subspace)
|
||||||
return
|
return
|
||||||
if(authenticated==2)
|
if(authenticated==2)
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", ""))
|
var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", ""))
|
||||||
if(!input || !interactable())
|
if(!input || !interactable())
|
||||||
return
|
return
|
||||||
Centcomm_announce(input, usr)
|
CentCom_announce(input, usr)
|
||||||
usr << "Message transmitted."
|
usr << "Message transmitted."
|
||||||
log_say("[key_name(usr)] has made a [boss_short] announcement: [input]")
|
log_say("[key_name(usr)] has made a [boss_short] announcement: [input]")
|
||||||
centcomm_message_cooldown = 1
|
centcomm_message_cooldown = 1
|
||||||
@@ -288,7 +288,7 @@
|
|||||||
if (authenticated==2)
|
if (authenticated==2)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
|
||||||
if(computer.emagged == 0)
|
if(computer.emagged == 0)
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentcomm'>Send an emergency message to [boss_short]</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentCom'>Send an emergency message to [boss_short]</A> \]"
|
||||||
else
|
else
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||||
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
|
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||||
|
|||||||
@@ -62,13 +62,13 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Centcom root authorization certificate
|
CentCom root authorization certificate
|
||||||
|
|
||||||
Non-destructive, officially sanctioned.
|
Non-destructive, officially sanctioned.
|
||||||
Has the same effect on computers as an emag.
|
Has the same effect on computers as an emag.
|
||||||
*/
|
*/
|
||||||
/datum/file/centcom_auth
|
/datum/file/centcom_auth
|
||||||
name = "Centcom Root Access Token"
|
name = "CentCom Root Access Token"
|
||||||
extension = "auth"
|
extension = "auth"
|
||||||
volume = 100
|
volume = 100
|
||||||
copy()
|
copy()
|
||||||
|
|||||||
@@ -178,7 +178,7 @@
|
|||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentCom Support.</span>"
|
||||||
else
|
else
|
||||||
transfer_and_vend(CH, C)
|
transfer_and_vend(CH, C)
|
||||||
|
|
||||||
@@ -328,7 +328,7 @@
|
|||||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call [boss_short] Support.</span>"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentCom Support.</span>"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
transfer_and_reimburse(CH)
|
transfer_and_reimburse(CH)
|
||||||
|
|||||||
@@ -586,7 +586,7 @@
|
|||||||
var/electrified = 0
|
var/electrified = 0
|
||||||
|
|
||||||
//Departments that the cycler can paint suits to look like.
|
//Departments that the cycler can paint suits to look like.
|
||||||
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos")
|
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard")
|
||||||
//Species that the suits can be configured to fit.
|
//Species that the suits can be configured to fit.
|
||||||
var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari")
|
var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari")
|
||||||
|
|
||||||
@@ -616,7 +616,7 @@
|
|||||||
name = "Engineering suit cycler"
|
name = "Engineering suit cycler"
|
||||||
model_text = "Engineering"
|
model_text = "Engineering"
|
||||||
req_access = list(access_construction)
|
req_access = list(access_construction)
|
||||||
departments = list("Engineering","Atmos")
|
departments = list("Engineering","Atmos","HAZMAT","Construction")
|
||||||
|
|
||||||
/obj/machinery/suit_cycler/mining
|
/obj/machinery/suit_cycler/mining
|
||||||
name = "Mining suit cycler"
|
name = "Mining suit cycler"
|
||||||
@@ -634,7 +634,7 @@
|
|||||||
name = "Medical suit cycler"
|
name = "Medical suit cycler"
|
||||||
model_text = "Medical"
|
model_text = "Medical"
|
||||||
req_access = list(access_medical)
|
req_access = list(access_medical)
|
||||||
departments = list("Medical")
|
departments = list("Medical","Biohazard")
|
||||||
|
|
||||||
/obj/machinery/suit_cycler/syndicate
|
/obj/machinery/suit_cycler/syndicate
|
||||||
name = "Nonstandard suit cycler"
|
name = "Nonstandard suit cycler"
|
||||||
@@ -751,7 +751,7 @@
|
|||||||
|
|
||||||
//Clear the access reqs, disable the safeties, and open up all paintjobs.
|
//Clear the access reqs, disable the safeties, and open up all paintjobs.
|
||||||
user << "<span class='danger'>You run the sequencer across the interface, corrupting the operating protocols.</span>"
|
user << "<span class='danger'>You run the sequencer across the interface, corrupting the operating protocols.</span>"
|
||||||
departments = list("Engineering","Mining","Medical","Security","Atmos","^%###^%$")
|
departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","^%###^%$")
|
||||||
species = list("Human","Tajara","Skrell","Unathi", "Teshari")
|
species = list("Human","Tajara","Skrell","Unathi", "Teshari")
|
||||||
|
|
||||||
emagged = 1
|
emagged = 1
|
||||||
@@ -1018,6 +1018,33 @@
|
|||||||
suit.name = "atmospherics voidsuit"
|
suit.name = "atmospherics voidsuit"
|
||||||
suit.icon_state = "rig-atmos"
|
suit.icon_state = "rig-atmos"
|
||||||
suit.item_state = "atmos_voidsuit"
|
suit.item_state = "atmos_voidsuit"
|
||||||
|
if("HAZMAT")
|
||||||
|
if(helmet)
|
||||||
|
helmet.name = "HAZMAT voidsuit helmet"
|
||||||
|
helmet.icon_state = "rig0-engineering_rad"
|
||||||
|
helmet.item_state = "rig0-engineering_rad"
|
||||||
|
if(suit)
|
||||||
|
suit.name = "HAZMAT voidsuit"
|
||||||
|
suit.icon_state = "rig-engineering_rad"
|
||||||
|
suit.item_state = "eng_voidsuit_rad"
|
||||||
|
if("Construction")
|
||||||
|
if(helmet)
|
||||||
|
helmet.name = "Construction voidsuit helmet"
|
||||||
|
helmet.icon_state = "rig0-engineering_con"
|
||||||
|
helmet.item_state = "rig0-engineering_con"
|
||||||
|
if(suit)
|
||||||
|
suit.name = "Construction voidsuit"
|
||||||
|
suit.icon_state = "rig-engineering_con"
|
||||||
|
suit.item_state = "eng_voidsuit_con"
|
||||||
|
if("Biohazard")
|
||||||
|
if(helmet)
|
||||||
|
helmet.name = "Biohazard voidsuit helmet"
|
||||||
|
helmet.icon_state = "rig0-medical_bio"
|
||||||
|
helmet.item_state = "rig0-medical_bio"
|
||||||
|
if(suit)
|
||||||
|
suit.name = "Biohazard voidsuit"
|
||||||
|
suit.icon_state = "rig-medical_bio"
|
||||||
|
suit.item_state = "medical_voidsuit_bio"
|
||||||
if("^%###^%$" || "Mercenary")
|
if("^%###^%$" || "Mercenary")
|
||||||
if(helmet)
|
if(helmet)
|
||||||
helmet.name = "blood-red voidsuit helmet"
|
helmet.name = "blood-red voidsuit helmet"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
autolinkers = list("r_relay")
|
autolinkers = list("r_relay")
|
||||||
|
|
||||||
/obj/machinery/telecomms/relay/preset/centcom
|
/obj/machinery/telecomms/relay/preset/centcom
|
||||||
id = "Centcom Relay"
|
id = "CentCom Relay"
|
||||||
hide = 1
|
hide = 1
|
||||||
toggled = 1
|
toggled = 1
|
||||||
//anchored = 1
|
//anchored = 1
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
"receiverA", "broadcasterA")
|
"receiverA", "broadcasterA")
|
||||||
|
|
||||||
/obj/machinery/telecomms/hub/preset_cent
|
/obj/machinery/telecomms/hub/preset_cent
|
||||||
id = "CentComm Hub"
|
id = "CentCom Hub"
|
||||||
network = "tcommsat"
|
network = "tcommsat"
|
||||||
produces_heat = 0
|
produces_heat = 0
|
||||||
autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay",
|
autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay",
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/telecomms/receiver/preset_cent
|
/obj/machinery/telecomms/receiver/preset_cent
|
||||||
id = "CentComm Receiver"
|
id = "CentCom Receiver"
|
||||||
network = "tcommsat"
|
network = "tcommsat"
|
||||||
produces_heat = 0
|
produces_heat = 0
|
||||||
autolinkers = list("receiverCent")
|
autolinkers = list("receiverCent")
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
autolinkers = list("processor4", "engineering", "common")
|
autolinkers = list("processor4", "engineering", "common")
|
||||||
|
|
||||||
/obj/machinery/telecomms/bus/preset_cent
|
/obj/machinery/telecomms/bus/preset_cent
|
||||||
id = "CentComm Bus"
|
id = "CentCom Bus"
|
||||||
network = "tcommsat"
|
network = "tcommsat"
|
||||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||||
produces_heat = 0
|
produces_heat = 0
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
autolinkers = list("processor4")
|
autolinkers = list("processor4")
|
||||||
|
|
||||||
/obj/machinery/telecomms/processor/preset_cent
|
/obj/machinery/telecomms/processor/preset_cent
|
||||||
id = "CentComm Processor"
|
id = "CentCom Processor"
|
||||||
network = "tcommsat"
|
network = "tcommsat"
|
||||||
produces_heat = 0
|
produces_heat = 0
|
||||||
autolinkers = list("processorCent")
|
autolinkers = list("processorCent")
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
autolinkers = list("security")
|
autolinkers = list("security")
|
||||||
|
|
||||||
/obj/machinery/telecomms/server/presets/centcomm
|
/obj/machinery/telecomms/server/presets/centcomm
|
||||||
id = "CentComm Server"
|
id = "CentCom Server"
|
||||||
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
freq_listening = list(ERT_FREQ, DTH_FREQ)
|
||||||
produces_heat = 0
|
produces_heat = 0
|
||||||
autolinkers = list("centcomm")
|
autolinkers = list("centcomm")
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
autolinkers = list("broadcasterA")
|
autolinkers = list("broadcasterA")
|
||||||
|
|
||||||
/obj/machinery/telecomms/broadcaster/preset_cent
|
/obj/machinery/telecomms/broadcaster/preset_cent
|
||||||
id = "CentComm Broadcaster"
|
id = "CentCom Broadcaster"
|
||||||
network = "tcommsat"
|
network = "tcommsat"
|
||||||
produces_heat = 0
|
produces_heat = 0
|
||||||
autolinkers = list("broadcasterCent")
|
autolinkers = list("broadcasterCent")
|
||||||
@@ -41,10 +41,10 @@
|
|||||||
|
|
||||||
/datum/poster/tg_9
|
/datum/poster/tg_9
|
||||||
name = "Missing Gloves"
|
name = "Missing Gloves"
|
||||||
desc = "This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases."
|
desc = "This poster is about the uproar that followed NanoTrasen's financial cuts towards insulated-glove purchases."
|
||||||
icon_state="poster9"
|
icon_state="poster9"
|
||||||
|
|
||||||
/datum/poster/tg_10
|
/datum/poster/tg_10
|
||||||
name = "Hacking Guide"
|
name = "Hacking Guide"
|
||||||
desc = "This poster details the internal workings of the common Nanotrasen airlock."
|
desc = "This poster details the internal workings of the common NanoTrasen airlock."
|
||||||
icon_state="poster10"
|
icon_state="poster10"
|
||||||
@@ -97,6 +97,7 @@ var/list/civilian_cartridges = list(
|
|||||||
name = "\improper ChemWhiz cartridge"
|
name = "\improper ChemWhiz cartridge"
|
||||||
icon_state = "cart-chem"
|
icon_state = "cart-chem"
|
||||||
access_reagent_scanner = 1
|
access_reagent_scanner = 1
|
||||||
|
access_medical = 1
|
||||||
|
|
||||||
/obj/item/weapon/cartridge/security
|
/obj/item/weapon/cartridge/security
|
||||||
name = "\improper R.O.B.U.S.T. cartridge"
|
name = "\improper R.O.B.U.S.T. cartridge"
|
||||||
|
|||||||
@@ -143,13 +143,25 @@ REAGENT SCANNER
|
|||||||
user.show_message("<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
|
user.show_message("<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
|
||||||
if(ishuman(M))
|
if(ishuman(M))
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
|
for(var/name_i in H.internal_organs_by_name)
|
||||||
|
var/obj/item/organ/internal/i = H.internal_organs_by_name[name_i]
|
||||||
|
if(istype(i, /obj/item/organ/internal/appendix))
|
||||||
|
var/obj/item/organ/internal/appendix/a = H.internal_organs_by_name[name_i]
|
||||||
|
if(a.inflamed > 3)
|
||||||
|
user.show_message(text("<span class='warning'>Severe inflamation detected in subject [a.name].</span>"), 1)
|
||||||
|
else if(a.inflamed > 2)
|
||||||
|
user.show_message(text("<span class='warning'>Moderate inflamation detected in subject [a.name].</span>"), 1)
|
||||||
|
else if(a.inflamed >= 1)
|
||||||
|
user.show_message(text("<span class='warning'>Mild inflamation detected in subject [a.name].</span>"), 1)
|
||||||
|
|
||||||
|
|
||||||
for(var/name in H.organs_by_name)
|
for(var/name in H.organs_by_name)
|
||||||
var/obj/item/organ/external/e = H.organs_by_name[name]
|
var/obj/item/organ/external/e = H.organs_by_name[name]
|
||||||
if(!e)
|
if(!e)
|
||||||
continue
|
continue
|
||||||
var/limb = e.name
|
var/limb = e.name
|
||||||
if(e.status & ORGAN_BROKEN)
|
if(e.status & ORGAN_BROKEN)
|
||||||
if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!(e.status & ORGAN_SPLINTED)))
|
if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!e.splinted))
|
||||||
user << "<span class='warning'>Unsecured fracture in subject [limb]. Splinting recommended for transport.</span>"
|
user << "<span class='warning'>Unsecured fracture in subject [limb]. Splinting recommended for transport.</span>"
|
||||||
if(e.has_infected_wound())
|
if(e.has_infected_wound())
|
||||||
user << "<span class='warning'>Infected wound detected in subject [limb]. Disinfection recommended.</span>"
|
user << "<span class='warning'>Infected wound detected in subject [limb]. Disinfection recommended.</span>"
|
||||||
@@ -165,6 +177,7 @@ REAGENT SCANNER
|
|||||||
for(var/datum/wound/W in e.wounds) if(W.internal)
|
for(var/datum/wound/W in e.wounds) if(W.internal)
|
||||||
user.show_message(text("<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span>"), 1)
|
user.show_message(text("<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span>"), 1)
|
||||||
break
|
break
|
||||||
|
|
||||||
if(M:vessel)
|
if(M:vessel)
|
||||||
var/blood_volume = H.vessel.get_reagent_amount("blood")
|
var/blood_volume = H.vessel.get_reagent_amount("blood")
|
||||||
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
|
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
|
||||||
|
|||||||
@@ -264,7 +264,7 @@
|
|||||||
if(!(affecting.organ_tag in splintable_organs))
|
if(!(affecting.organ_tag in splintable_organs))
|
||||||
user << "<span class='danger'>You can't use \the [src] to apply a splint there!</span>"
|
user << "<span class='danger'>You can't use \the [src] to apply a splint there!</span>"
|
||||||
return
|
return
|
||||||
if(affecting.status & ORGAN_SPLINTED)
|
if(affecting.splinted)
|
||||||
user << "<span class='danger'>[M]'s [limb] is already splinted!</span>"
|
user << "<span class='danger'>[M]'s [limb] is already splinted!</span>"
|
||||||
return
|
return
|
||||||
if (M != user)
|
if (M != user)
|
||||||
@@ -275,17 +275,21 @@
|
|||||||
user << "<span class='danger'>You can't apply a splint to the arm you're using!</span>"
|
user << "<span class='danger'>You can't apply a splint to the arm you're using!</span>"
|
||||||
return
|
return
|
||||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
if(do_after(user, 50))
|
if(do_after(user, 50, M))
|
||||||
if (M != user)
|
if(M == user && prob(75))
|
||||||
user.visible_message("<span class='danger'>[user] finishes applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
else
|
|
||||||
if(prob(25))
|
|
||||||
user.visible_message("<span class='danger'>[user] successfully applies \the [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
|
||||||
else
|
|
||||||
user.visible_message("<span class='danger'>[user] fumbles \the [src].</span>", "<span class='danger'>You fumble \the [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
|
||||||
return
|
return
|
||||||
affecting.status |= ORGAN_SPLINTED
|
var/obj/item/stack/medical/splint/S = split(1)
|
||||||
use(1)
|
if(S)
|
||||||
|
if(affecting.apply_splint(S))
|
||||||
|
S.forceMove(affecting)
|
||||||
|
if (M != user)
|
||||||
|
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
|
else
|
||||||
|
user.visible_message("<span class='danger'>\The [user] successfully applies [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
|
return
|
||||||
|
S.dropInto(src.loc) //didn't get applied, so just drop it
|
||||||
|
user.visible_message("<span class='danger'>\The [user] fails to apply [src].</span>", "<span class='danger'>You fail to apply [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,11 @@ var/last_chew = 0
|
|||||||
|
|
||||||
last_chew = world.time
|
last_chew = world.time
|
||||||
|
|
||||||
|
/obj/item/weapon/handcuffs/fuzzy
|
||||||
|
name = "fuzzy cuffs"
|
||||||
|
icon_state = "fuzzycuff"
|
||||||
|
desc = "Use this to keep... 'prisoners' in line."
|
||||||
|
|
||||||
/obj/item/weapon/handcuffs/cable
|
/obj/item/weapon/handcuffs/cable
|
||||||
name = "cable restraints"
|
name = "cable restraints"
|
||||||
desc = "Looks like some cables tied together. Could be used to tie something up."
|
desc = "Looks like some cables tied together. Could be used to tie something up."
|
||||||
|
|||||||
@@ -164,12 +164,10 @@ Implant Specifics:<BR>"}
|
|||||||
if (malfunction == MALFUNCTION_PERMANENT)
|
if (malfunction == MALFUNCTION_PERMANENT)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/need_gib = null
|
|
||||||
if(istype(imp_in, /mob/))
|
if(istype(imp_in, /mob/))
|
||||||
var/mob/T = imp_in
|
var/mob/T = imp_in
|
||||||
message_admins("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
|
message_admins("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
|
||||||
log_game("Explosive implant triggered in [T] ([T.key]).")
|
log_game("Explosive implant triggered in [T] ([T.key]).")
|
||||||
need_gib = 1
|
|
||||||
|
|
||||||
if(ishuman(imp_in))
|
if(ishuman(imp_in))
|
||||||
if (elevel == "Localized Limb")
|
if (elevel == "Localized Limb")
|
||||||
@@ -180,11 +178,11 @@ Implant Specifics:<BR>"}
|
|||||||
if (istype(part,/obj/item/organ/external/chest) || \
|
if (istype(part,/obj/item/organ/external/chest) || \
|
||||||
istype(part,/obj/item/organ/external/groin) || \
|
istype(part,/obj/item/organ/external/groin) || \
|
||||||
istype(part,/obj/item/organ/external/head))
|
istype(part,/obj/item/organ/external/head))
|
||||||
part.createwound(BRUISE, 60) //mangle them instead
|
part.createwound(BRUISE, 80) //mangle them instead
|
||||||
explosion(get_turf(imp_in), -1, -1, 2, 3)
|
explosion(get_turf(imp_in), -1, -1, 1, 3)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
else
|
else
|
||||||
explosion(get_turf(imp_in), -1, -1, 2, 3)
|
explosion(get_turf(imp_in), -1, -1, 1, 3)
|
||||||
part.droplimb(0,DROPLIMB_BLUNT)
|
part.droplimb(0,DROPLIMB_BLUNT)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
if (elevel == "Destroy Body")
|
if (elevel == "Destroy Body")
|
||||||
@@ -197,9 +195,6 @@ Implant Specifics:<BR>"}
|
|||||||
else
|
else
|
||||||
explosion(get_turf(imp_in), 0, 1, 3, 6)
|
explosion(get_turf(imp_in), 0, 1, 3, 6)
|
||||||
|
|
||||||
if(need_gib)
|
|
||||||
imp_in.gib()
|
|
||||||
|
|
||||||
var/turf/t = get_turf(imp_in)
|
var/turf/t = get_turf(imp_in)
|
||||||
|
|
||||||
if(t)
|
if(t)
|
||||||
@@ -249,10 +244,10 @@ Implant Specifics:<BR>"}
|
|||||||
if (istype(part,/obj/item/organ/external/chest) || \
|
if (istype(part,/obj/item/organ/external/chest) || \
|
||||||
istype(part,/obj/item/organ/external/groin) || \
|
istype(part,/obj/item/organ/external/groin) || \
|
||||||
istype(part,/obj/item/organ/external/head))
|
istype(part,/obj/item/organ/external/head))
|
||||||
part.createwound(BRUISE, 60) //mangle them instead
|
part.createwound(BRUISE, 80) //mangle them instead
|
||||||
else
|
else
|
||||||
part.droplimb(0,DROPLIMB_BLUNT)
|
part.droplimb(0,DROPLIMB_BLUNT)
|
||||||
explosion(get_turf(imp_in), -1, -1, 2, 3)
|
explosion(get_turf(imp_in), -1, -1, 1, 3)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/item/weapon/implant/chem
|
/obj/item/weapon/implant/chem
|
||||||
|
|||||||
@@ -280,3 +280,59 @@
|
|||||||
name = "emergency response team medical backpack"
|
name = "emergency response team medical backpack"
|
||||||
desc = "A spacious backpack with lots of pockets, worn by medical members of an Emergency Response Team."
|
desc = "A spacious backpack with lots of pockets, worn by medical members of an Emergency Response Team."
|
||||||
icon_state = "ert_medical"
|
icon_state = "ert_medical"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Courier Bags
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger
|
||||||
|
name = "messenger bag"
|
||||||
|
desc = "A sturdy backpack worn over one shoulder."
|
||||||
|
icon_state = "courierbag"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "backpack", slot_l_hand_str = "backpack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/chem
|
||||||
|
name = "chemistry messenger bag"
|
||||||
|
desc = "A serile backpack worn over one shoulder. This one is in Chemsitry colors."
|
||||||
|
icon_state = "courierbagchem"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "chempack", slot_l_hand_str = "chempack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/med
|
||||||
|
name = "medical messenger bag"
|
||||||
|
desc = "A sterile backpack worn over one shoulder used in medical departments."
|
||||||
|
icon_state = "courierbagmed"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/viro
|
||||||
|
name = "virology messenger bag"
|
||||||
|
desc = "A sterile backpack worn over one shoulder. This one is in Virology colors."
|
||||||
|
icon_state = "courierbagviro"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "viropack", slot_l_hand_str = "viropack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/tox
|
||||||
|
name = "research messenger bag"
|
||||||
|
desc = "A backpack worn over one shoulder. Useful for holding science materials."
|
||||||
|
icon_state = "courierbagtox"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "toxpack", slot_l_hand_str = "toxpack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/com
|
||||||
|
name = "command messenger bag"
|
||||||
|
desc = "A special backpack worn over one shoulder. This one is made specifically for officers."
|
||||||
|
icon_state = "courierbagcom"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "captainpack", slot_l_hand_str = "captainpack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/engi
|
||||||
|
name = "engineering messenger bag"
|
||||||
|
icon_state = "courierbagengi"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "engiepack", slot_l_hand_str = "engiepack")
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/hyd
|
||||||
|
name = "hydroponics messenger bag"
|
||||||
|
desc = "A backpack worn over one shoulder. This one is designed for plant-related work."
|
||||||
|
icon_state = "courierbaghyd"
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/backpack/messenger/sec
|
||||||
|
name = "security messenger bag"
|
||||||
|
desc = "A tactical backpack worn over one shoulder. This one is in Security colors."
|
||||||
|
icon_state = "courierbagsec"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack")
|
||||||
@@ -56,6 +56,7 @@
|
|||||||
/obj/item/weapon/extinguisher/mini,
|
/obj/item/weapon/extinguisher/mini,
|
||||||
/obj/item/device/flashlight/maglight,
|
/obj/item/device/flashlight/maglight,
|
||||||
/obj/item/weapon/tape_roll,
|
/obj/item/weapon/tape_roll,
|
||||||
|
/obj/item/device/integrated_electronics/wirer,
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/utility/full/New()
|
/obj/item/weapon/storage/belt/utility/full/New()
|
||||||
|
|||||||
@@ -127,10 +127,10 @@
|
|||||||
filled = TRUE
|
filled = TRUE
|
||||||
|
|
||||||
/obj/item/weapon/storage/toolbox/lunchbox/nt
|
/obj/item/weapon/storage/toolbox/lunchbox/nt
|
||||||
name = "Nanotrasen brand lunchbox"
|
name = "NanoTrasen brand lunchbox"
|
||||||
icon_state = "lunchbox_nanotrasen"
|
icon_state = "lunchbox_nanotrasen"
|
||||||
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
|
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
|
||||||
desc = "A little lunchbox. This one is branded with the Nanotrasen logo!"
|
desc = "A little lunchbox. This one is branded with the NanoTrasen logo!"
|
||||||
|
|
||||||
/obj/item/weapon/storage/toolbox/lunchbox/nt/filled
|
/obj/item/weapon/storage/toolbox/lunchbox/nt/filled
|
||||||
filled = TRUE
|
filled = TRUE
|
||||||
|
|||||||
@@ -11,11 +11,9 @@
|
|||||||
..()
|
..()
|
||||||
if (!prob(spawn_nothing_percentage))
|
if (!prob(spawn_nothing_percentage))
|
||||||
spawn_item()
|
spawn_item()
|
||||||
|
|
||||||
/obj/random/initialize()
|
|
||||||
..()
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
|
||||||
// this function should return a specific item to spawn
|
// this function should return a specific item to spawn
|
||||||
/obj/random/proc/item_to_spawn()
|
/obj/random/proc/item_to_spawn()
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -394,3 +394,6 @@
|
|||||||
var/shake_dir = pick(-1, 1)
|
var/shake_dir = pick(-1, 1)
|
||||||
animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
|
animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
|
||||||
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
|
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
|
||||||
|
|
||||||
|
/obj/structure/closet/onDropInto(var/atom/movable/AM)
|
||||||
|
return
|
||||||
|
|||||||
@@ -517,9 +517,9 @@
|
|||||||
new /obj/item/clothing/under/color/yellow(src)
|
new /obj/item/clothing/under/color/yellow(src)
|
||||||
new /obj/item/clothing/under/color/green(src)
|
new /obj/item/clothing/under/color/green(src)
|
||||||
new /obj/item/clothing/under/color/pink(src)
|
new /obj/item/clothing/under/color/pink(src)
|
||||||
new /obj/item/clothing/under/skirt/plaid_blue(src)
|
new /obj/item/clothing/under/skirt/outfit/plaid_blue(src)
|
||||||
new /obj/item/clothing/under/skirt/plaid_red(src)
|
new /obj/item/clothing/under/skirt/outfit/plaid_red(src)
|
||||||
new /obj/item/clothing/under/skirt/plaid_purple(src)
|
new /obj/item/clothing/under/skirt/outfit/plaid_purple(src)
|
||||||
new /obj/item/clothing/shoes/blue(src)
|
new /obj/item/clothing/shoes/blue(src)
|
||||||
new /obj/item/clothing/shoes/yellow(src)
|
new /obj/item/clothing/shoes/yellow(src)
|
||||||
new /obj/item/clothing/shoes/green(src)
|
new /obj/item/clothing/shoes/green(src)
|
||||||
|
|||||||
@@ -265,7 +265,7 @@
|
|||||||
|
|
||||||
/obj/structure/closet/crate/contraband
|
/obj/structure/closet/crate/contraband
|
||||||
name = "Poster crate"
|
name = "Poster crate"
|
||||||
desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist."
|
desc = "A random assortment of posters manufactured by providers NOT listed under NanoTrasen's whitelist."
|
||||||
icon_state = "crate"
|
icon_state = "crate"
|
||||||
icon_opened = "crateopen"
|
icon_opened = "crateopen"
|
||||||
icon_closed = "crate"
|
icon_closed = "crate"
|
||||||
|
|||||||
@@ -238,7 +238,7 @@
|
|||||||
#define FOOTSTEP_SPRITE_AMT 2
|
#define FOOTSTEP_SPRITE_AMT 2
|
||||||
|
|
||||||
/turf/snow/Entered(atom/A)
|
/turf/snow/Entered(atom/A)
|
||||||
if(ismob(A))
|
if(isliving(A))
|
||||||
var/mdir = "[A.dir]"
|
var/mdir = "[A.dir]"
|
||||||
if(crossed_dirs[mdir])
|
if(crossed_dirs[mdir])
|
||||||
crossed_dirs[mdir] = min(crossed_dirs[mdir] + 1, FOOTSTEP_SPRITE_AMT)
|
crossed_dirs[mdir] = min(crossed_dirs[mdir] + 1, FOOTSTEP_SPRITE_AMT)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ var/const/station_orig = "Northern Star" //station_name can't be const due to ev
|
|||||||
var/const/station_short = "Northern Star"
|
var/const/station_short = "Northern Star"
|
||||||
var/const/dock_name = "Vir Interstellar Spaceport"
|
var/const/dock_name = "Vir Interstellar Spaceport"
|
||||||
var/const/boss_name = "Central Command"
|
var/const/boss_name = "Central Command"
|
||||||
var/const/boss_short = "Centcomm"
|
var/const/boss_short = "CentCom"
|
||||||
var/const/company_name = "NanoTrasen"
|
var/const/company_name = "NanoTrasen"
|
||||||
var/const/company_short = "NT"
|
var/const/company_short = "NT"
|
||||||
var/const/star_name = "Vir"
|
var/const/star_name = "Vir"
|
||||||
|
|||||||
@@ -1323,19 +1323,19 @@
|
|||||||
M.Weaken(20)
|
M.Weaken(20)
|
||||||
M.stuttering = 20
|
M.stuttering = 20
|
||||||
|
|
||||||
else if(href_list["CentcommReply"])
|
else if(href_list["CentComReply"])
|
||||||
var/mob/living/L = locate(href_list["CentcommReply"])
|
var/mob/living/L = locate(href_list["CentComReply"])
|
||||||
if(!istype(L))
|
if(!istype(L))
|
||||||
usr << "This can only be used on instances of type /mob/living/"
|
usr << "This can only be used on instances of type /mob/living/"
|
||||||
return
|
return
|
||||||
|
|
||||||
if(L.can_centcom_reply())
|
if(L.can_centcom_reply())
|
||||||
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from Centcomm", ""))
|
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from CentCom", ""))
|
||||||
if(!input) return
|
if(!input) return
|
||||||
|
|
||||||
src.owner << "You sent [input] to [L] via a secure channel."
|
src.owner << "You sent [input] to [L] via a secure channel."
|
||||||
log_admin("[src.owner] replied to [key_name(L)]'s Centcomm message with the message [input].")
|
log_admin("[src.owner] replied to [key_name(L)]'s CentCom message with the message [input].")
|
||||||
message_admins("[src.owner] replied to [key_name(L)]'s Centcom message with: \"[input]\"")
|
message_admins("[src.owner] replied to [key_name(L)]'s CentCom message with: \"[input]\"")
|
||||||
if(!isAI(L))
|
if(!isAI(L))
|
||||||
L << "<span class='info'>You hear something crackle in your headset for a moment before a voice speaks.</span>"
|
L << "<span class='info'>You hear something crackle in your headset for a moment before a voice speaks.</span>"
|
||||||
L << "<span class='info'>Please stand by for a message from Central Command.</span>"
|
L << "<span class='info'>Please stand by for a message from Central Command.</span>"
|
||||||
|
|||||||
@@ -27,8 +27,8 @@
|
|||||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
//log_admin("HELP: [key_name(src)]: [msg]")
|
//log_admin("HELP: [key_name(src)]: [msg]")
|
||||||
|
|
||||||
/proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage)
|
/proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage)
|
||||||
msg = "\blue <b><font color=orange>[uppertext(boss_short)]M[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
msg = "\blue <b><font color=orange>[uppertext(boss_short)]M[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentComReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||||
for(var/client/C in admins)
|
for(var/client/C in admins)
|
||||||
if(R_ADMIN & C.holder.rights)
|
if(R_ADMIN & C.holder.rights)
|
||||||
C << msg
|
C << msg
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
pref.all_underwear -= underwear_category_name
|
pref.all_underwear -= underwear_category_name
|
||||||
|
|
||||||
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
|
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
|
||||||
if(pref.backbag > 4 || pref.backbag < 1)
|
if(pref.backbag > 5 || pref.backbag < 1)
|
||||||
pref.backbag = 1 //Same as above
|
pref.backbag = 1 //Same as above
|
||||||
character.backbag = pref.backbag
|
character.backbag = pref.backbag
|
||||||
|
|
||||||
|
|||||||
@@ -248,3 +248,23 @@
|
|||||||
/datum/gear/head/beretg/New()
|
/datum/gear/head/beretg/New()
|
||||||
..()
|
..()
|
||||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
|
|
||||||
|
/datum/gear/head/sombrero
|
||||||
|
display_name = "sombrero"
|
||||||
|
path = /obj/item/clothing/head/sombrero
|
||||||
|
|
||||||
|
/datum/gear/head/flatcapg
|
||||||
|
display_name = "flat cap"
|
||||||
|
path = /obj/item/clothing/head/flatcap/grey
|
||||||
|
|
||||||
|
/datum/gear/head/flatcapg/New()
|
||||||
|
..()
|
||||||
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
|
|
||||||
|
/datum/gear/head/bow
|
||||||
|
display_name = "hair bow"
|
||||||
|
path = /obj/item/clothing/head/hairflower/bow
|
||||||
|
|
||||||
|
/datum/gear/head/bow/New()
|
||||||
|
..()
|
||||||
|
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/obj/item/clothing/head/centhat
|
/obj/item/clothing/head/centhat
|
||||||
name = "\improper CentComm. hat"
|
name = "\improper CentCom. hat"
|
||||||
icon_state = "centcom"
|
icon_state = "centcom"
|
||||||
desc = "It's good to be emperor."
|
desc = "It's good to be emperor."
|
||||||
siemens_coefficient = 0.9
|
siemens_coefficient = 0.9
|
||||||
@@ -32,6 +32,12 @@
|
|||||||
/obj/item/clothing/head/hairflower/orange
|
/obj/item/clothing/head/hairflower/orange
|
||||||
icon_state = "hairflower_orange"
|
icon_state = "hairflower_orange"
|
||||||
|
|
||||||
|
/obj/item/clothing/head/hairflower/bow
|
||||||
|
icon_state = "bow"
|
||||||
|
name = "hair bow"
|
||||||
|
desc = "A ribbon tied into a bow with a clip on the back to attach to hair."
|
||||||
|
item_state_slots = list(slot_r_hand_str = "pill", slot_l_hand_str = "pill")
|
||||||
|
|
||||||
/obj/item/clothing/head/powdered_wig
|
/obj/item/clothing/head/powdered_wig
|
||||||
name = "powdered wig"
|
name = "powdered wig"
|
||||||
desc = "A powdered wig."
|
desc = "A powdered wig."
|
||||||
@@ -144,6 +150,10 @@
|
|||||||
item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective")
|
item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective")
|
||||||
siemens_coefficient = 0.9 //...what?
|
siemens_coefficient = 0.9 //...what?
|
||||||
|
|
||||||
|
/obj/item/clothing/head/flatcap/grey
|
||||||
|
icon_state = "flat_capg"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft")
|
||||||
|
|
||||||
/obj/item/clothing/head/pirate
|
/obj/item/clothing/head/pirate
|
||||||
name = "pirate hat"
|
name = "pirate hat"
|
||||||
desc = "Yarr."
|
desc = "Yarr."
|
||||||
@@ -300,3 +310,9 @@
|
|||||||
desc = "A beret, an artists favorite headwear."
|
desc = "A beret, an artists favorite headwear."
|
||||||
icon_state = "beret_g"
|
icon_state = "beret_g"
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/head/sombrero
|
||||||
|
name = "sombrero"
|
||||||
|
desc = "A wide-brimmed hat popularly worn in Mexico."
|
||||||
|
icon_state = "sombrero"
|
||||||
|
body_parts_covered = 0
|
||||||
|
|||||||
@@ -173,15 +173,25 @@
|
|||||||
usable = 1
|
usable = 1
|
||||||
active = 1
|
active = 1
|
||||||
permanent = 1
|
permanent = 1
|
||||||
|
var/datum/effect/effect/system/smoke_spread/bad/smoke
|
||||||
|
var/smoke_strength = 8
|
||||||
|
|
||||||
engage_string = "Detonate"
|
engage_string = "Detonate"
|
||||||
|
|
||||||
interface_name = "dead man's switch"
|
interface_name = "dead man's switch"
|
||||||
interface_desc = "An integrated self-destruct module. When the wearer dies, so does the surrounding area. Do not press this button."
|
interface_desc = "An integrated self-destruct module. When the wearer dies, they vanish in smoke. Do not press this button."
|
||||||
var/list/explosion_values = list(1,2,4,5)
|
|
||||||
|
/obj/item/rig_module/self_destruct/New()
|
||||||
|
..()
|
||||||
|
src.smoke = PoolOrNew(/datum/effect/effect/system/smoke_spread/bad)
|
||||||
|
src.smoke.attach(src)
|
||||||
|
|
||||||
|
/obj/item/rig_module/self_destruct/Destroy()
|
||||||
|
qdel(smoke)
|
||||||
|
smoke = null
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/rig_module/self_destruct/small
|
|
||||||
explosion_values = list(0,0,3,4)
|
|
||||||
|
|
||||||
/obj/item/rig_module/self_destruct/activate()
|
/obj/item/rig_module/self_destruct/activate()
|
||||||
return
|
return
|
||||||
@@ -202,8 +212,8 @@
|
|||||||
/obj/item/rig_module/self_destruct/engage(var/skip_check)
|
/obj/item/rig_module/self_destruct/engage(var/skip_check)
|
||||||
if(!skip_check && usr && alert(usr, "Are you sure you want to push that button?", "Self-destruct", "No", "Yes") == "No")
|
if(!skip_check && usr && alert(usr, "Are you sure you want to push that button?", "Self-destruct", "No", "Yes") == "No")
|
||||||
return
|
return
|
||||||
explosion(get_turf(src), explosion_values[1], explosion_values[2], explosion_values[3], explosion_values[4])
|
|
||||||
if(holder && holder.wearer)
|
if(holder && holder.wearer)
|
||||||
holder.wearer.drop_from_inventory(src)
|
smoke.set_up(10, 0, holder.loc)
|
||||||
qdel(holder)
|
for(var/i = 1 to smoke_strength)
|
||||||
qdel(src)
|
smoke.start(272727)
|
||||||
|
holder.wearer.ash()
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit.
|
var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit.
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/equipped(mob/M)
|
/obj/item/clothing/suit/space/equipped(mob/M)
|
||||||
check_limb_support()
|
check_limb_support(M)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/dropped(var/mob/user)
|
/obj/item/clothing/suit/space/dropped(var/mob/user)
|
||||||
@@ -77,14 +77,24 @@
|
|||||||
/obj/item/clothing/suit/space/proc/check_limb_support(var/mob/living/carbon/human/user)
|
/obj/item/clothing/suit/space/proc/check_limb_support(var/mob/living/carbon/human/user)
|
||||||
|
|
||||||
// If this isn't set, then we don't need to care.
|
// If this isn't set, then we don't need to care.
|
||||||
if(!supporting_limbs || !supporting_limbs.len)
|
if(!istype(user) || isnull(supporting_limbs))
|
||||||
return
|
|
||||||
|
|
||||||
if(!istype(user) || user.wear_suit == src)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(user.wear_suit == src)
|
||||||
|
for(var/obj/item/organ/external/E in user.bad_external_organs)
|
||||||
|
if(E.is_broken() && E.apply_splint(src))
|
||||||
|
user << "You feel [src] constrict about your [E.name], supporting it."
|
||||||
|
supporting_limbs |= E
|
||||||
|
else
|
||||||
// Otherwise, remove the splints.
|
// Otherwise, remove the splints.
|
||||||
for(var/obj/item/organ/external/E in supporting_limbs)
|
for(var/obj/item/organ/external/E in supporting_limbs)
|
||||||
E.status &= ~ ORGAN_SPLINTED
|
if(E.splinted == src && E.remove_splint(src))
|
||||||
user << "The suit stops supporting your [E.name]."
|
user << "\The [src] stops supporting your [E.name]."
|
||||||
supporting_limbs = list()
|
supporting_limbs.Cut()
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/proc/handle_fracture(var/mob/living/carbon/human/user, var/obj/item/organ/external/E)
|
||||||
|
if(!istype(user) || isnull(supporting_limbs))
|
||||||
|
return
|
||||||
|
if(E.is_broken() && E.apply_splint(src))
|
||||||
|
user << "You feel [src] constrict about your [E.name], supporting it."
|
||||||
|
supporting_limbs |= E
|
||||||
|
|||||||
@@ -7,6 +7,16 @@
|
|||||||
item_state_slots = list(slot_r_hand_str = "eng_helm", slot_l_hand_str = "eng_helm")
|
item_state_slots = list(slot_r_hand_str = "eng_helm", slot_l_hand_str = "eng_helm")
|
||||||
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 35, bio = 100, rad = 80)
|
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/void/engineering/hazmat
|
||||||
|
name = "HAZMAT voidsuit helmet"
|
||||||
|
icon_state = "rig0-engineering_rad"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "eng_helm_rad", slot_l_hand_str = "eng_helm_rad")
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/void/engineering/construction
|
||||||
|
name = "construction voidsuit helmet"
|
||||||
|
icon_state = "rig0-engineering_con"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "eng_helm_con", slot_l_hand_str = "eng_helm_con")
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/void/engineering
|
/obj/item/clothing/suit/space/void/engineering
|
||||||
name = "engineering voidsuit"
|
name = "engineering voidsuit"
|
||||||
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
|
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
|
||||||
@@ -16,6 +26,16 @@
|
|||||||
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 35, bio = 100, rad = 80)
|
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/void/engineering/hazmat
|
||||||
|
name = "HAZMAT voidsuit"
|
||||||
|
icon_state = "rig-engineering_rad"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "eng_voidsuit_rad", slot_l_hand_str = "eng_voidsuit_rad")
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/void/engineering/construction
|
||||||
|
name = "contstruction voidsuit"
|
||||||
|
icon_state = "rig-engineering_con"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "eng_voidsuit_con", slot_l_hand_str = "eng_voidsuit_con")
|
||||||
|
|
||||||
//Mining
|
//Mining
|
||||||
/obj/item/clothing/head/helmet/space/void/mining
|
/obj/item/clothing/head/helmet/space/void/mining
|
||||||
name = "mining voidsuit helmet"
|
name = "mining voidsuit helmet"
|
||||||
@@ -40,6 +60,11 @@
|
|||||||
item_state_slots = list(slot_r_hand_str = "medical_helm", slot_l_hand_str = "medical_helm")
|
item_state_slots = list(slot_r_hand_str = "medical_helm", slot_l_hand_str = "medical_helm")
|
||||||
armor = list(melee = 30, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 50)
|
armor = list(melee = 30, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 50)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/void/medical/bio
|
||||||
|
name = "biohazard voidsuit helmet"
|
||||||
|
icon_state = "rig0-medical_bio"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "medical_helm_bio", slot_l_hand_str = "medical_helm_bio")
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/void/medical
|
/obj/item/clothing/suit/space/void/medical
|
||||||
name = "medical voidsuit"
|
name = "medical voidsuit"
|
||||||
desc = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding."
|
desc = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding."
|
||||||
@@ -48,6 +73,11 @@
|
|||||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
|
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
|
||||||
armor = list(melee = 30, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 50)
|
armor = list(melee = 30, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 50)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/void/medical/bio
|
||||||
|
name = "biohazard voidsuit"
|
||||||
|
icon_state = "rig-medical_bio"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "medical_voidsuit_bio", slot_l_hand_str = "medical_voidsuit_bio")
|
||||||
|
|
||||||
//Security
|
//Security
|
||||||
/obj/item/clothing/head/helmet/space/void/security
|
/obj/item/clothing/head/helmet/space/void/security
|
||||||
name = "security voidsuit helmet"
|
name = "security voidsuit helmet"
|
||||||
|
|||||||
@@ -323,6 +323,12 @@
|
|||||||
icon_badge = "detectivevest_badge"
|
icon_badge = "detectivevest_badge"
|
||||||
icon_nobadge = "detectivevest_nobadge"
|
icon_nobadge = "detectivevest_nobadge"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/storage/vest/press
|
||||||
|
name = "press vest"
|
||||||
|
desc = "A simple kevlar plate carrier. This one has the word 'Press' embroidered on patches on the back and front."
|
||||||
|
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
|
||||||
|
allowed = list(/obj/item/device/flashlight,/obj/item/device/taperecorder,/obj/item/weapon/pen,/obj/item/device/camera_film,/obj/item/device/camera)
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/vest/heavy
|
/obj/item/clothing/suit/storage/vest/heavy
|
||||||
name = "heavy armor vest"
|
name = "heavy armor vest"
|
||||||
desc = "A heavy kevlar plate carrier with webbing attached."
|
desc = "A heavy kevlar plate carrier with webbing attached."
|
||||||
|
|||||||
@@ -91,10 +91,10 @@
|
|||||||
//Argh, skirts be below this line -> ------------------------------
|
//Argh, skirts be below this line -> ------------------------------
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt
|
/obj/item/clothing/under/skirt
|
||||||
name = "black skirt"
|
name = "short black skirt"
|
||||||
desc = "A black skirt, very fancy!"
|
desc = "A skirt that is a shiny black."
|
||||||
icon_state = "blackskirt"
|
icon_state = "skirt_short_black"
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
body_parts_covered = LOWER_TORSO
|
||||||
rolled_sleeves = -1
|
rolled_sleeves = -1
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt/khaki
|
/obj/item/clothing/under/skirt/khaki
|
||||||
@@ -102,11 +102,6 @@
|
|||||||
desc = "A skirt that is a khaki color."
|
desc = "A skirt that is a khaki color."
|
||||||
icon_state = "skirt_khaki"
|
icon_state = "skirt_khaki"
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt/black
|
|
||||||
name = "short black skirt"
|
|
||||||
desc = "A skirt that is a shiny black."
|
|
||||||
icon_state = "skirt_short_black"
|
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt/blue
|
/obj/item/clothing/under/skirt/blue
|
||||||
name = "short blue skirt"
|
name = "short blue skirt"
|
||||||
desc = "A skirt that is a shiny blue."
|
desc = "A skirt that is a shiny blue."
|
||||||
@@ -122,19 +117,25 @@
|
|||||||
desc = "A skirt that is swept to one side."
|
desc = "A skirt that is swept to one side."
|
||||||
icon_state = "skirt_swept"
|
icon_state = "skirt_swept"
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt/plaid_blue
|
/obj/item/clothing/under/skirt/outfit
|
||||||
|
name = "black skirt"
|
||||||
|
desc = "A black skirt, very fancy!"
|
||||||
|
icon_state = "blackskirt"
|
||||||
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||||
|
|
||||||
|
/obj/item/clothing/under/skirt/outfit/plaid_blue
|
||||||
name = "blue plaid skirt"
|
name = "blue plaid skirt"
|
||||||
desc = "A preppy blue skirt with a white blouse."
|
desc = "A preppy blue skirt with a white blouse."
|
||||||
icon_state = "plaid_blue"
|
icon_state = "plaid_blue"
|
||||||
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt/plaid_red
|
/obj/item/clothing/under/skirt/outfit/plaid_red
|
||||||
name = "red plaid skirt"
|
name = "red plaid skirt"
|
||||||
desc = "A preppy red skirt with a white blouse."
|
desc = "A preppy red skirt with a white blouse."
|
||||||
icon_state = "plaid_red"
|
icon_state = "plaid_red"
|
||||||
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
|
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
|
||||||
|
|
||||||
/obj/item/clothing/under/skirt/plaid_purple
|
/obj/item/clothing/under/skirt/outfit/plaid_purple
|
||||||
name = "blue purple skirt"
|
name = "blue purple skirt"
|
||||||
desc = "A preppy purple skirt with a white blouse."
|
desc = "A preppy purple skirt with a white blouse."
|
||||||
icon_state = "plaid_purple"
|
icon_state = "plaid_purple"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ var/list/weighted_mundaneevent_locations = list()
|
|||||||
|
|
||||||
//distance is measured in AU and co-relates to travel time
|
//distance is measured in AU and co-relates to travel time
|
||||||
/datum/trade_destination/centcomm
|
/datum/trade_destination/centcomm
|
||||||
name = "CentComm"
|
name = "CentCom"
|
||||||
description = "NanoTrasen's administrative centre for Tau Ceti."
|
description = "NanoTrasen's administrative centre for Tau Ceti."
|
||||||
distance = 1.2
|
distance = 1.2
|
||||||
willing_to_buy = list()
|
willing_to_buy = list()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
that while in space, across star systems, and that the consumer can afford and use without training, is much more recent, and is thanks to the backbone \
|
that while in space, across star systems, and that the consumer can afford and use without training, is much more recent, and is thanks to the backbone \
|
||||||
that is the Exonet.<br>\
|
that is the Exonet.<br>\
|
||||||
<br>\
|
<br>\
|
||||||
The Exonet is the predominant interstellar telecom system, servicing trillions of devices across a large portion of human-controlled space. \
|
The Exonet is the predominant interstellar telecomm system, servicing trillions of devices across a large portion of human-controlled space. \
|
||||||
It is distributed by a massive network of telecommunication satellites, some privately owned and others owned by the systems<6D> local governments, \
|
It is distributed by a massive network of telecommunication satellites, some privately owned and others owned by the systems<6D> local governments, \
|
||||||
that utilize FTL technologies to bounce data between satellites at speeds that would not be possible at sub-light technology. This communicator \
|
that utilize FTL technologies to bounce data between satellites at speeds that would not be possible at sub-light technology. This communicator \
|
||||||
uses a protocol called Exonet Protocol Version 2, generally shortened to EPv2.<br>\
|
uses a protocol called Exonet Protocol Version 2, generally shortened to EPv2.<br>\
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
Exonets at the root node(s), and is typically arranged in a tree structure. The root node(s) are generally government-owned and are very secure \
|
Exonets at the root node(s), and is typically arranged in a tree structure. The root node(s) are generally government-owned and are very secure \
|
||||||
and resilient to failure.<br>\
|
and resilient to failure.<br>\
|
||||||
<br>\
|
<br>\
|
||||||
This node is privately owned and maintained by Nanotrasen, and allows the colonists of the "+station_orig+" to have access to the Exonet."
|
This node is privately owned and maintained by NanoTrasen, and allows the colonists of the "+station_orig+" to have access to the Exonet."
|
||||||
|
|
||||||
description_antag = "An EMP will disable this device for a short period of time. A longer downage can be achieved by turning it off, or rigging \
|
description_antag = "An EMP will disable this device for a short period of time. A longer downage can be achieved by turning it off, or rigging \
|
||||||
the APC it uses to turn off remotely, such as with a signaler in the right wire."
|
the APC it uses to turn off remotely, such as with a signaler in the right wire."
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
for(var/datum/playingcard/P in cards)
|
for(var/datum/playingcard/P in cards)
|
||||||
H.cards += P
|
H.cards += P
|
||||||
H.concealed = src.concealed
|
H.concealed = src.concealed
|
||||||
user.drop_from_inventory(src,user.loc)
|
user.drop_from_inventory(src)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
H.update_icon()
|
H.update_icon()
|
||||||
return
|
return
|
||||||
|
|||||||
368
code/modules/integrated_electronics/_defines.dm
Normal file
368
code/modules/integrated_electronics/_defines.dm
Normal file
@@ -0,0 +1,368 @@
|
|||||||
|
#define DATA_CHANNEL "data channel"
|
||||||
|
#define PULSE_CHANNEL "pulse channel"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit
|
||||||
|
name = "integrated circuit"
|
||||||
|
desc = "It's a tiny chip! This one doesn't seem to do much, however."
|
||||||
|
icon = 'icons/obj/electronic_assemblies.dmi'
|
||||||
|
icon_state = "template"
|
||||||
|
w_class = 1
|
||||||
|
var/extended_desc = null
|
||||||
|
var/list/inputs = list()
|
||||||
|
var/list/outputs = list()
|
||||||
|
var/list/activators = list()
|
||||||
|
var/number_of_inputs = 0 //This is how many input pins are created
|
||||||
|
var/number_of_outputs = 0 //Likewise for output
|
||||||
|
var/number_of_activators = 0 //Guess
|
||||||
|
var/list/input_names = list()
|
||||||
|
var/list/output_names = list()
|
||||||
|
var/list/activator_names = list()
|
||||||
|
var/last_used = 0 //Uses world.time
|
||||||
|
var/complexity = 1 //This acts as a limitation on building machines, more resource-intensive components cost more 'space'.
|
||||||
|
var/power_required = 5 //w
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/examine(mob/user)
|
||||||
|
..()
|
||||||
|
user << "This board has [inputs.len] input [inputs.len != 1 ? "pins" : "pin"] and \
|
||||||
|
[outputs.len] output [outputs.len != 1 ? "pins" : "pin"]."
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
if(I.linked.len)
|
||||||
|
user << "\The [I.name] is connected to [I.get_linked_to_desc()]."
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
if(O.linked.len)
|
||||||
|
user << "\The [O.name] is connected to [O.get_linked_to_desc()]."
|
||||||
|
for(var/datum/integrated_io/activate/A in activators)
|
||||||
|
if(A.linked.len)
|
||||||
|
user << "\The [A.name] is connected to [A.get_linked_to_desc()]."
|
||||||
|
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/New()
|
||||||
|
..()
|
||||||
|
var/i = 0
|
||||||
|
if(number_of_inputs)
|
||||||
|
for(i = number_of_inputs, i > 0, i--)
|
||||||
|
inputs.Add(new /datum/integrated_io/input(src))
|
||||||
|
|
||||||
|
if(number_of_outputs)
|
||||||
|
for(i = number_of_outputs, i > 0, i--)
|
||||||
|
outputs.Add(new /datum/integrated_io/output(src))
|
||||||
|
|
||||||
|
if(number_of_activators)
|
||||||
|
for(i = number_of_activators, i > 0, i--)
|
||||||
|
activators.Add(new /datum/integrated_io/activate(src))
|
||||||
|
|
||||||
|
apply_names_to_io()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/proc/apply_names_to_io()
|
||||||
|
var/i = 1
|
||||||
|
if(input_names.len)
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.name = "[input_names[i]]"
|
||||||
|
i++
|
||||||
|
i = 1
|
||||||
|
if(output_names.len)
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.name = "[output_names[i]]"
|
||||||
|
i++
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
if(activator_names.len)
|
||||||
|
for(var/datum/integrated_io/activate/A in activators)
|
||||||
|
A.name = "[activator_names[i]]"
|
||||||
|
i++
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/Destroy()
|
||||||
|
for(var/datum/integrated_io/I in inputs)
|
||||||
|
qdel(I)
|
||||||
|
for(var/datum/integrated_io/O in outputs)
|
||||||
|
qdel(O)
|
||||||
|
for(var/datum/integrated_io/A in activators)
|
||||||
|
qdel(A)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/emp_act(severity)
|
||||||
|
for(var/datum/integrated_io/io in inputs + outputs + activators)
|
||||||
|
io.scramble()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/verb/rename_component()
|
||||||
|
set name = "Rename Circuit"
|
||||||
|
set category = "Object"
|
||||||
|
set desc = "Rename your circuit, useful to stay organized."
|
||||||
|
|
||||||
|
var/mob/M = usr
|
||||||
|
|
||||||
|
if(!M.canmove || M.stat || M.restrained())
|
||||||
|
return
|
||||||
|
|
||||||
|
var/input = sanitizeSafe(input("What do you want to name the circuit?", ,""), MAX_NAME_LEN)
|
||||||
|
|
||||||
|
if(src && input)
|
||||||
|
M << "<span class='notice'>The circuit '[src.name]' is now labeled '[input]'.</span>"
|
||||||
|
name = input
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/proc/get_pin_ref(var/pin_type, var/pin_number)
|
||||||
|
switch(pin_type)
|
||||||
|
if("input")
|
||||||
|
if(pin_number > inputs.len)
|
||||||
|
return null
|
||||||
|
return inputs[pin_number]
|
||||||
|
if("output")
|
||||||
|
if(pin_number > outputs.len)
|
||||||
|
return null
|
||||||
|
return outputs[pin_number]
|
||||||
|
if("activator")
|
||||||
|
if(pin_number > activators.len)
|
||||||
|
return null
|
||||||
|
return activators[pin_number]
|
||||||
|
return null
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/interact(mob/user)
|
||||||
|
if(get_dist(get_turf(src), user) > 1)
|
||||||
|
user.unset_machine(src)
|
||||||
|
return
|
||||||
|
var/HTML = "<html><head><title>[src.name]</title></head><body>"
|
||||||
|
HTML += "<div align='center'>"
|
||||||
|
HTML += "<table border='1' style='undefined;table-layout: fixed; width: 424px'>"
|
||||||
|
|
||||||
|
HTML += "<br><a href='?src=\ref[src];user=\ref[user]'>\[Refresh\]</a> | "
|
||||||
|
HTML += "<a href='?src=\ref[src];user=\ref[user];rename=1'>\[Rename\]</a><br>"
|
||||||
|
|
||||||
|
HTML += "<colgroup>"
|
||||||
|
HTML += "<col style='width: 121px'>"
|
||||||
|
HTML += "<col style='width: 181px'>"
|
||||||
|
HTML += "<col style='width: 122px'>"
|
||||||
|
HTML += "</colgroup>"
|
||||||
|
|
||||||
|
var/column_width = 3
|
||||||
|
var/row_height = max(inputs.len, outputs.len, 1)
|
||||||
|
var/i
|
||||||
|
var/j
|
||||||
|
for(i = 1, i < row_height+1, i++)
|
||||||
|
HTML += "<tr>"
|
||||||
|
for(j = 1, j < column_width+1, j++)
|
||||||
|
var/datum/integrated_io/io = null
|
||||||
|
var/words = null
|
||||||
|
var/height = 1
|
||||||
|
switch(j)
|
||||||
|
if(1)
|
||||||
|
io = get_pin_ref("input",i)
|
||||||
|
if(io)
|
||||||
|
if(io.linked.len)
|
||||||
|
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><b>[io.name] [io.display_data()]</b></a><br>"
|
||||||
|
for(var/datum/integrated_io/linked in io.linked)
|
||||||
|
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
|
||||||
|
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
|
||||||
|
else // "Click <a href=?src=\ref[src];action=start>here</a>!"
|
||||||
|
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>[io.name] [io.display_data()]</a><br>"
|
||||||
|
for(var/datum/integrated_io/linked in io.linked)
|
||||||
|
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
|
||||||
|
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
|
||||||
|
if(outputs.len > inputs.len)
|
||||||
|
// height = Floor(outputs.len / inputs.len)
|
||||||
|
height = 1 // Because of bugs, if there's more outputs than inputs, it causes the output side to be hidden.
|
||||||
|
//world << "I wrote [words] at ([i],[j]). Height = [height]."
|
||||||
|
if(2)
|
||||||
|
if(i == 1)
|
||||||
|
words = "[src.name]<br><br>[src.desc]"
|
||||||
|
height = row_height
|
||||||
|
//world << "I wrote the center piece because i was equal to 1, at ([i],[j]). Height = [height]."
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
if(3)
|
||||||
|
io = get_pin_ref("output",i)
|
||||||
|
if(io)
|
||||||
|
if(io.linked.len)
|
||||||
|
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><b>[io.name] [io.display_data()]</b></a><br>"
|
||||||
|
for(var/datum/integrated_io/linked in io.linked)
|
||||||
|
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
|
||||||
|
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
|
||||||
|
else
|
||||||
|
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>[io.name] [io.display_data()]</a><br>"
|
||||||
|
for(var/datum/integrated_io/linked in io.linked)
|
||||||
|
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
|
||||||
|
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
|
||||||
|
if(inputs.len > outputs.len)
|
||||||
|
// height = Floor(inputs.len / outputs.len)
|
||||||
|
height = 1 // See above.
|
||||||
|
//world << "I wrote [words] at ([i],[j]). Height = [height]."
|
||||||
|
HTML += "<td align='center' rowspan='[height]'>[words]</td>"
|
||||||
|
//HTML += "<td align='center'>[words]</td>"
|
||||||
|
//world << "Writing to ([i],[j])."
|
||||||
|
HTML += "</tr>"
|
||||||
|
|
||||||
|
if(activators.len)
|
||||||
|
for(i = 1, i < activators.len+1, i++)
|
||||||
|
var/datum/integrated_io/io = null
|
||||||
|
var/words = null
|
||||||
|
io = get_pin_ref("activator",i)
|
||||||
|
if(io)
|
||||||
|
if(io.linked.len)
|
||||||
|
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><font color='FF0000'><b>[io.name]</b></font></a><br>"
|
||||||
|
for(var/datum/integrated_io/linked in io.linked)
|
||||||
|
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
|
||||||
|
@ <a href=?src[src];examine=1;user=\ref[user]>[linked.holder]</a><br>"
|
||||||
|
else // "Click <a href=?src=\ref[src];action=start>here</a>!"
|
||||||
|
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><font color='FF0000'>[io.name]</font></a><br>"
|
||||||
|
for(var/datum/integrated_io/linked in io.linked)
|
||||||
|
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
|
||||||
|
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
|
||||||
|
HTML += "<tr>"
|
||||||
|
HTML += "<td colspan='3' align='center'>[words]</td>"
|
||||||
|
HTML += "</tr>"
|
||||||
|
|
||||||
|
HTML += "</table>"
|
||||||
|
HTML += "</div>"
|
||||||
|
|
||||||
|
HTML += "<br><font color='0000FF'>Complexity: [complexity]</font>"
|
||||||
|
HTML += "<br><font color='0000FF'>[extended_desc]</font>"
|
||||||
|
|
||||||
|
HTML += "</body></html>"
|
||||||
|
user << browse(HTML, "window=circuit-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1")
|
||||||
|
|
||||||
|
//user << sanitize(HTML, "window=debug;size=400x400;border=1;can_resize=1;can_close=1;can_minimize=1")
|
||||||
|
//world << sanitize(HTML)
|
||||||
|
|
||||||
|
user.set_machine(src)
|
||||||
|
onclose(user, "circuit-\ref[src]")
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/Topic(href, href_list[])
|
||||||
|
var/mob/living/user = locate(href_list["user"]) in mob_list
|
||||||
|
var/pin = locate(href_list["pin"]) in inputs + outputs + activators
|
||||||
|
|
||||||
|
if(!user || !user.Adjacent(get_turf(src)) )
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(!user.canmove || user.stat || user.restrained())
|
||||||
|
return
|
||||||
|
|
||||||
|
if(href_list["wire"])
|
||||||
|
if(ishuman(user) && Adjacent(user))
|
||||||
|
var/mob/living/carbon/human/H = user
|
||||||
|
var/obj/item/device/integrated_electronics/wirer/wirer = null
|
||||||
|
if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
|
||||||
|
wirer = H.r_hand
|
||||||
|
else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
|
||||||
|
wirer = H.l_hand
|
||||||
|
|
||||||
|
if(wirer && pin)
|
||||||
|
wirer.wire(pin, user)
|
||||||
|
else
|
||||||
|
user << "<span class='warning'>You can't do a whole lot without tools.</span>"
|
||||||
|
|
||||||
|
if(href_list["examine"])
|
||||||
|
examine(user)
|
||||||
|
|
||||||
|
if(href_list["rename"])
|
||||||
|
rename_component(user)
|
||||||
|
|
||||||
|
interact(user) // To refresh the UI.
|
||||||
|
|
||||||
|
/datum/integrated_io
|
||||||
|
var/name = "input/output"
|
||||||
|
var/obj/item/integrated_circuit/holder = null
|
||||||
|
var/data = null
|
||||||
|
var/list/linked = list()
|
||||||
|
var/io_type = DATA_CHANNEL
|
||||||
|
|
||||||
|
/datum/integrated_io/New(var/newloc)
|
||||||
|
..()
|
||||||
|
holder = newloc
|
||||||
|
if(!holder)
|
||||||
|
message_admins("ERROR: An integrated_io ([src.name]) spawned without a holder! This is a bug.")
|
||||||
|
|
||||||
|
/datum/integrated_io/Destroy()
|
||||||
|
disconnect()
|
||||||
|
holder = null
|
||||||
|
..()
|
||||||
|
|
||||||
|
/datum/integrated_io/proc/display_data()
|
||||||
|
if(isnull(data))
|
||||||
|
return "(null)" // Empty data means nothing to show.
|
||||||
|
if(istext(data))
|
||||||
|
return "(\"[data]\")" // Wraps the 'string' in escaped quotes, so that people know it's a 'string'.
|
||||||
|
if(istype(data, /atom))
|
||||||
|
var/atom/A = data
|
||||||
|
return "([A.name] \[Ref\])" // For refs, we want just the name displayed.
|
||||||
|
return "([data])" // Nothing special needed for numbers or other stuff.
|
||||||
|
|
||||||
|
/datum/integrated_io/activate/display_data()
|
||||||
|
return "(\[pulse\])"
|
||||||
|
|
||||||
|
/datum/integrated_io/proc/scramble()
|
||||||
|
if(isnull(data))
|
||||||
|
return
|
||||||
|
if(isnum(data))
|
||||||
|
data = rand(-10000, 10000)
|
||||||
|
if(istext(data))
|
||||||
|
data = "ERROR"
|
||||||
|
push_data()
|
||||||
|
|
||||||
|
/datum/integrated_io/activate/scramble()
|
||||||
|
push_data()
|
||||||
|
|
||||||
|
/datum/integrated_io/proc/push_data()
|
||||||
|
if(linked.len)
|
||||||
|
for(var/datum/integrated_io/io in linked)
|
||||||
|
io.data = data
|
||||||
|
|
||||||
|
/datum/integrated_io/activate/push_data()
|
||||||
|
if(linked.len)
|
||||||
|
for(var/datum/integrated_io/io in linked)
|
||||||
|
io.holder.work()
|
||||||
|
|
||||||
|
/datum/integrated_io/proc/pull_data()
|
||||||
|
if(linked.len)
|
||||||
|
for(var/datum/integrated_io/io in linked)
|
||||||
|
data = io.data
|
||||||
|
|
||||||
|
/datum/integrated_io/proc/get_linked_to_desc()
|
||||||
|
if(linked.len)
|
||||||
|
var/result = english_list(linked)
|
||||||
|
return "the [result]"
|
||||||
|
return "nothing"
|
||||||
|
|
||||||
|
/datum/integrated_io/proc/disconnect()
|
||||||
|
if(linked.len)
|
||||||
|
//First we iterate over everything we are linked to.
|
||||||
|
for(var/datum/integrated_io/their_io in linked)
|
||||||
|
//While doing that, we iterate them as well, and disconnect ourselves from them.
|
||||||
|
for(var/datum/integrated_io/their_linked_io in their_io.linked)
|
||||||
|
if(their_linked_io == src)
|
||||||
|
their_io.linked.Remove(src)
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
//Now that we're removed from them, we gotta remove them from us.
|
||||||
|
src.linked.Remove(their_io)
|
||||||
|
|
||||||
|
/datum/integrated_io/input
|
||||||
|
name = "input pin"
|
||||||
|
|
||||||
|
/datum/integrated_io/output
|
||||||
|
name = "output pin"
|
||||||
|
|
||||||
|
/datum/integrated_io/activate
|
||||||
|
name = "activation pin"
|
||||||
|
io_type = PULSE_CHANNEL
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/proc/push_data()
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/proc/pull_data()
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/proc/work()
|
||||||
|
if(last_used + 2 SECONDS > world.time) // All intergrated circuits have an internal cooldown of two seconds to protect from spam.
|
||||||
|
return 0
|
||||||
|
last_used = world.time
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/proc/disconnect_all()
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.disconnect()
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.disconnect()
|
||||||
|
for(var/datum/integrated_io/activate/A in activators)
|
||||||
|
A.disconnect()
|
||||||
157
code/modules/integrated_electronics/arithmetic.dm
Normal file
157
code/modules/integrated_electronics/arithmetic.dm
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
//These circuits do simple math.
|
||||||
|
/obj/item/integrated_circuit/arithmetic
|
||||||
|
complexity = 1
|
||||||
|
number_of_inputs = 8
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list(
|
||||||
|
"A",
|
||||||
|
"B",
|
||||||
|
"C",
|
||||||
|
"D",
|
||||||
|
"E",
|
||||||
|
"F",
|
||||||
|
"G",
|
||||||
|
"H"
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"result"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"compute"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +Adding+ //
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/addition
|
||||||
|
name = "addition circuit"
|
||||||
|
desc = "This circuit can add numbers together."
|
||||||
|
icon_state = "addition"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/addition/work()
|
||||||
|
if(..())
|
||||||
|
var/result = 0
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.pull_data()
|
||||||
|
if(isnum(I.data))
|
||||||
|
result = result + I.data
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = result
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
// -Subtracting- //
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/subtraction
|
||||||
|
name = "subtraction circuit"
|
||||||
|
desc = "This circuit can subtract numbers."
|
||||||
|
icon_state = "subtraction"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/subtraction/work()
|
||||||
|
if(..())
|
||||||
|
var/result = 0
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.pull_data()
|
||||||
|
if(isnum(I.data))
|
||||||
|
result = result - I.data
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = result
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
// *Multiply* //
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/multiplication
|
||||||
|
name = "multiplication circuit"
|
||||||
|
desc = "This circuit can multiply numbers."
|
||||||
|
icon_state = "multiplication"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/subtraction/work()
|
||||||
|
if(..())
|
||||||
|
var/result = 0
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.pull_data()
|
||||||
|
if(isnum(I.data))
|
||||||
|
result = result * I.data
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = result
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
// /Division/ //
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/division
|
||||||
|
name = "division circuit"
|
||||||
|
desc = "This circuit can divide numbers, just don't think about trying to divide by zero!"
|
||||||
|
icon_state = "division"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/division/work()
|
||||||
|
if(..())
|
||||||
|
var/result = 0
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.pull_data()
|
||||||
|
if(isnum(I.data) && I.data != 0) //No runtimes here.
|
||||||
|
result = result / I.data
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = result
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
// Absolute //
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/absolute
|
||||||
|
name = "absolute circuit"
|
||||||
|
desc = "This outputs a non-negative version of the number you put in. This may also be thought of as its distance from zero."
|
||||||
|
icon_state = "absolute"
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 1
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/absolute/work()
|
||||||
|
if(..())
|
||||||
|
var/result = 0
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.pull_data()
|
||||||
|
if(isnum(I.data) && I.data != 0)
|
||||||
|
result = abs(result)
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = result
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
// Averaging //
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/average
|
||||||
|
name = "average circuit"
|
||||||
|
desc = "This circuit is of average quality, however it will compute the average for numbers you give it."
|
||||||
|
icon_state = "average"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/average/work()
|
||||||
|
if(..())
|
||||||
|
var/result = 0
|
||||||
|
var/inputs_used = 0
|
||||||
|
for(var/datum/integrated_io/input/I in inputs)
|
||||||
|
I.pull_data()
|
||||||
|
if(isnum(I.data))
|
||||||
|
inputs_used++
|
||||||
|
result = result + I.data
|
||||||
|
|
||||||
|
if(inputs_used)
|
||||||
|
result = result / inputs_used
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = result
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
// Pi, because why the hell not? //
|
||||||
|
/obj/item/integrated_circuit/arithmetic/pi
|
||||||
|
name = "pi constant circuit"
|
||||||
|
desc = "Not recommended for cooking. Outputs '3.14159' when it receives a pulse."
|
||||||
|
icon_state = "pi"
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 1
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/arithmetic/pi/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/output/O = outputs[1]
|
||||||
|
O.data = 3.14159
|
||||||
|
O.push_data()
|
||||||
120
code/modules/integrated_electronics/assemblies.dm
Normal file
120
code/modules/integrated_electronics/assemblies.dm
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/obj/item/device/electronic_assembly
|
||||||
|
name = "electronic assembly"
|
||||||
|
desc = "It's a case, for building electronics with."
|
||||||
|
w_class = 2
|
||||||
|
icon = 'icons/obj/electronic_assemblies.dmi'
|
||||||
|
icon_state = "setup_small"
|
||||||
|
var/max_components = 10
|
||||||
|
var/max_complexity = 30
|
||||||
|
var/opened = 0
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/medium
|
||||||
|
name = "electronic mechanism"
|
||||||
|
icon_state = "setup_medium"
|
||||||
|
w_class = 3
|
||||||
|
max_components = 20
|
||||||
|
max_complexity = 50
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/large
|
||||||
|
name = "electronic machine"
|
||||||
|
icon_state = "setup"
|
||||||
|
w_class = 4
|
||||||
|
max_components = 30
|
||||||
|
max_complexity = 60
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/New()
|
||||||
|
..()
|
||||||
|
processing_objects |= src
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/Destroy()
|
||||||
|
processing_objects.Remove(src)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/process()
|
||||||
|
for(var/obj/item/integrated_circuit/IC in contents)
|
||||||
|
IC.work()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/update_icon()
|
||||||
|
if(opened)
|
||||||
|
icon_state = initial(icon_state) + "-open"
|
||||||
|
else
|
||||||
|
icon_state = initial(icon_state)
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/examine(mob/user)
|
||||||
|
..()
|
||||||
|
if(user.Adjacent(src))
|
||||||
|
if(!opened)
|
||||||
|
for(var/obj/item/integrated_circuit/output/screen/S in contents)
|
||||||
|
if(S.stuff_to_display)
|
||||||
|
user << "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'."
|
||||||
|
else
|
||||||
|
var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents
|
||||||
|
if(IC)
|
||||||
|
IC.examine(user)
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/attackby(var/obj/item/I, var/mob/user)
|
||||||
|
if(istype(I, /obj/item/integrated_circuit))
|
||||||
|
if(!opened)
|
||||||
|
user << "<span class='warning'>\The [src] isn't opened, so you can't put anything inside. Try using a crowbar.</span>"
|
||||||
|
return 0
|
||||||
|
var/obj/item/integrated_circuit/IC = I
|
||||||
|
var/total_parts = 0
|
||||||
|
var/total_complexity = 0
|
||||||
|
for(var/obj/item/integrated_circuit/part in contents)
|
||||||
|
total_parts++
|
||||||
|
total_complexity = total_complexity + part.complexity
|
||||||
|
|
||||||
|
if( (total_parts + 1) >= max_components)
|
||||||
|
user << "<span class='warning'>You can't seem to add this [IC.name], since there's no more room.</span>"
|
||||||
|
return 0
|
||||||
|
if( (total_complexity + IC.complexity) >= max_complexity)
|
||||||
|
user << "<span class='warning'>You can't seem to add this [IC.name], since this setup's too complicated for the case.</span>"
|
||||||
|
return 0
|
||||||
|
|
||||||
|
user << "<span class='notice'>You slide \the [IC] inside \the [src].</span>"
|
||||||
|
user.drop_item()
|
||||||
|
IC.forceMove(src)
|
||||||
|
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||||
|
if(istype(I, /obj/item/weapon/screwdriver))
|
||||||
|
if(!opened)
|
||||||
|
user << "<span class='warning'>\The [src] isn't opened, so you can't remove anything inside. Try using a crowbar.</span>"
|
||||||
|
return 0
|
||||||
|
if(!contents.len)
|
||||||
|
user << "<span class='warning'>There's nothing inside this to remove!</span>"
|
||||||
|
return 0
|
||||||
|
var/obj/item/integrated_circuit/option = input("What do you want to remove?", "Component Removal") as null|anything in contents
|
||||||
|
if(option)
|
||||||
|
option.disconnect_all()
|
||||||
|
option.forceMove(get_turf(src))
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
user << "<span class='notice'>You pop \the [option] out of the case, and slide it out.</span>"
|
||||||
|
if(istype(I, /obj/item/weapon/crowbar))
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
opened = !opened
|
||||||
|
user << "<span class='notice'>You [opened ? "opened" : "closed"] \the [src].</span>"
|
||||||
|
update_icon()
|
||||||
|
if(istype(I, /obj/item/device/integrated_electronics/wirer))
|
||||||
|
if(opened)
|
||||||
|
var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents
|
||||||
|
if(IC)
|
||||||
|
IC.examine(user)
|
||||||
|
else
|
||||||
|
user << "<span class='warning'>\The [src] isn't opened, so you can't fiddle with the internal components. \
|
||||||
|
Try using a crowbar.</span>"
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/attack_self(mob/user)
|
||||||
|
var/list/available_inputs = list()
|
||||||
|
for(var/obj/item/integrated_circuit/input/input in contents)
|
||||||
|
if(input.can_be_asked_input)
|
||||||
|
available_inputs.Add(input)
|
||||||
|
var/obj/item/integrated_circuit/input/choice = input(user, "What do you want to interact with?", "Interaction") as null|anything in available_inputs
|
||||||
|
if(choice)
|
||||||
|
choice.ask_for_input(user)
|
||||||
|
|
||||||
|
/obj/item/device/electronic_assembly/emp_act(severity)
|
||||||
|
..()
|
||||||
|
for(var/atom/movable/AM in contents)
|
||||||
|
AM.emp_act(severity)
|
||||||
96
code/modules/integrated_electronics/converters.dm
Normal file
96
code/modules/integrated_electronics/converters.dm
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
//These circuits convert one variable to another.
|
||||||
|
/obj/item/integrated_circuit/converter
|
||||||
|
complexity = 2
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list(
|
||||||
|
"input",
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"result"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"convert"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/num2text
|
||||||
|
name = "number to string"
|
||||||
|
desc = "This circuit can convert a number variable into a string."
|
||||||
|
icon_state = "addition"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/num2text/work()
|
||||||
|
if(..())
|
||||||
|
var/result = null
|
||||||
|
var/datum/integrated_io/incoming = inputs[1]
|
||||||
|
var/datum/integrated_io/outgoing = outputs[1]
|
||||||
|
if(incoming.data && isnum(incoming.data))
|
||||||
|
result = num2text(incoming.data)
|
||||||
|
|
||||||
|
outgoing.data = result
|
||||||
|
outgoing.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/text2num
|
||||||
|
name = "string to number"
|
||||||
|
desc = "This circuit can convert a string variable into a number."
|
||||||
|
icon_state = "addition"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/text2num/work()
|
||||||
|
if(..())
|
||||||
|
var/result = null
|
||||||
|
var/datum/integrated_io/incoming = inputs[1]
|
||||||
|
var/datum/integrated_io/outgoing = outputs[1]
|
||||||
|
if(incoming.data && istext(incoming.data))
|
||||||
|
result = text2num(incoming.data)
|
||||||
|
|
||||||
|
outgoing.data = result
|
||||||
|
outgoing.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/ref2text
|
||||||
|
name = "reference to string"
|
||||||
|
desc = "This circuit can convert a reference to something else to a string, specifically the name of that reference."
|
||||||
|
icon_state = "addition"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/ref2text/work()
|
||||||
|
if(..())
|
||||||
|
var/result = null
|
||||||
|
var/datum/integrated_io/incoming = inputs[1]
|
||||||
|
var/datum/integrated_io/outgoing = outputs[1]
|
||||||
|
if(incoming.data && istype(incoming.data, /atom/))
|
||||||
|
var/atom/A = incoming.data
|
||||||
|
result = A.name
|
||||||
|
|
||||||
|
outgoing.data = result
|
||||||
|
outgoing.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/lowercase
|
||||||
|
name = "lowercase string converter"
|
||||||
|
desc = "this will cause a string to come out in all lowercase."
|
||||||
|
icon_state = "addition"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/lowercase/work()
|
||||||
|
if(..())
|
||||||
|
var/result = null
|
||||||
|
var/datum/integrated_io/incoming = inputs[1]
|
||||||
|
var/datum/integrated_io/outgoing = outputs[1]
|
||||||
|
if(incoming.data && istext(incoming.data))
|
||||||
|
result = lowertext(incoming.data)
|
||||||
|
|
||||||
|
outgoing.data = result
|
||||||
|
outgoing.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/uppercase
|
||||||
|
name = "uppercase string converter"
|
||||||
|
desc = "THIS WILL CAUSE A STRING TO COME OUT IN ALL UPPERCASE."
|
||||||
|
icon_state = "addition"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/converter/uppercase/work()
|
||||||
|
if(..())
|
||||||
|
var/result = null
|
||||||
|
var/datum/integrated_io/incoming = inputs[1]
|
||||||
|
var/datum/integrated_io/outgoing = outputs[1]
|
||||||
|
if(incoming.data && istext(incoming.data))
|
||||||
|
result = uppertext(incoming.data)
|
||||||
|
|
||||||
|
outgoing.data = result
|
||||||
|
outgoing.push_data()
|
||||||
74
code/modules/integrated_electronics/coordinate.dm
Normal file
74
code/modules/integrated_electronics/coordinate.dm
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
//This circuit gives information on where the machine is.
|
||||||
|
/obj/item/integrated_circuit/gps
|
||||||
|
name = "global positioning system"
|
||||||
|
desc = "This allows you to easily know the position of a machine containing this device."
|
||||||
|
complexity = 4
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 2
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list(
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"X (abs)",
|
||||||
|
"Y (abs)"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"get coordinates"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/gps/work()
|
||||||
|
if(..())
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
var/datum/integrated_io/result_x = outputs[1]
|
||||||
|
var/datum/integrated_io/result_y = outputs[2]
|
||||||
|
|
||||||
|
result_x.data = null
|
||||||
|
result_y.data = null
|
||||||
|
if(!T)
|
||||||
|
return
|
||||||
|
|
||||||
|
result_x.data = T.x
|
||||||
|
result_y.data = T.y
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/abs_to_rel_coords
|
||||||
|
name = "abs to rel coordinate converter"
|
||||||
|
desc = "Easily convert absolute coordinates to relative coordinates with this."
|
||||||
|
complexity = 4
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 4
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list(
|
||||||
|
"X1 (abs)",
|
||||||
|
"Y1 (abs)",
|
||||||
|
"X2 (abs)",
|
||||||
|
"Y2 (abs)"
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"X (rel)",
|
||||||
|
"Y (rel)"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"compute rel coordinates"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/abs_to_rel_coords/work()
|
||||||
|
var/datum/integrated_io/x1 = inputs[1]
|
||||||
|
var/datum/integrated_io/y1 = inputs[2]
|
||||||
|
|
||||||
|
var/datum/integrated_io/x2 = inputs[3]
|
||||||
|
var/datum/integrated_io/y2 = inputs[4]
|
||||||
|
|
||||||
|
var/datum/integrated_io/result_x = outputs[1]
|
||||||
|
var/datum/integrated_io/result_y = outputs[2]
|
||||||
|
|
||||||
|
if(x1.data && y1.data && x2.data && y2.data)
|
||||||
|
result_x.data = x1.data - x2.data
|
||||||
|
result_y.data = y1.data - y2.data
|
||||||
|
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.push_data()
|
||||||
|
..()
|
||||||
79
code/modules/integrated_electronics/data_transfer.dm
Normal file
79
code/modules/integrated_electronics/data_transfer.dm
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/obj/item/integrated_circuit/transfer/splitter
|
||||||
|
name = "splitter"
|
||||||
|
desc = "Splits incoming data into all of the output pins."
|
||||||
|
icon_state = "splitter"
|
||||||
|
complexity = 3
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 2
|
||||||
|
input_names = list(
|
||||||
|
"data to split"
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"A",
|
||||||
|
"B",
|
||||||
|
"C",
|
||||||
|
"D",
|
||||||
|
"E",
|
||||||
|
"F",
|
||||||
|
"G",
|
||||||
|
"H"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/splitter/medium
|
||||||
|
name = "four splitter"
|
||||||
|
icon_state = "splitter4"
|
||||||
|
complexity = 5
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 4
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/splitter/large
|
||||||
|
name = "eight splitter"
|
||||||
|
icon_state = "splitter8"
|
||||||
|
complexity = 9
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 8
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/splitter/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/I = inputs[1]
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.data = I.data
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/activator_splitter
|
||||||
|
name = "activator splitter"
|
||||||
|
desc = "Splits incoming activation pulses into all of the output pins."
|
||||||
|
icon_state = "splitter"
|
||||||
|
complexity = 3
|
||||||
|
number_of_activators = 3
|
||||||
|
activator_names = list(
|
||||||
|
"incoming pulse",
|
||||||
|
"outgoing pulse A",
|
||||||
|
"outgoing pulse B",
|
||||||
|
"outgoing pulse C",
|
||||||
|
"outgoing pulse D",
|
||||||
|
"outgoing pulse E",
|
||||||
|
"outgoing pulse F",
|
||||||
|
"outgoing pulse G",
|
||||||
|
"outgoing pulse H"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/activator_splitter/work()
|
||||||
|
if(..())
|
||||||
|
for(var/datum/integrated_io/activate/A in outputs)
|
||||||
|
if(A == activators[1])
|
||||||
|
continue
|
||||||
|
if(A.linked.len)
|
||||||
|
for(var/datum/integrated_io/activate/target in A.linked)
|
||||||
|
target.holder.work()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/activator_splitter/medium
|
||||||
|
name = "four activator splitter"
|
||||||
|
icon_state = "splitter4"
|
||||||
|
complexity = 5
|
||||||
|
number_of_activators = 5
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/transfer/activator_splitter/large
|
||||||
|
name = "eight activator splitter"
|
||||||
|
icon_state = "splitter4"
|
||||||
|
complexity = 9
|
||||||
|
number_of_activators = 9
|
||||||
218
code/modules/integrated_electronics/input_output.dm
Normal file
218
code/modules/integrated_electronics/input_output.dm
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
/obj/item/integrated_circuit/input
|
||||||
|
var/can_be_asked_input = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/proc/ask_for_input(mob/user)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/button
|
||||||
|
name = "button"
|
||||||
|
desc = "This tiny button must do something, right?"
|
||||||
|
icon_state = "button"
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 0
|
||||||
|
number_of_activators = 1
|
||||||
|
complexity = 1
|
||||||
|
can_be_asked_input = 1
|
||||||
|
activator_names = list(
|
||||||
|
"on pressed"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/button/ask_for_input(mob/user) //Bit misleading name for this specific use.
|
||||||
|
var/datum/integrated_io/A = activators[1]
|
||||||
|
if(A.linked.len)
|
||||||
|
for(var/datum/integrated_io/activate/target in A.linked)
|
||||||
|
target.holder.work()
|
||||||
|
user << "<span class='notice'>You press the button labeled '[src.name]'.</span>"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/numberpad
|
||||||
|
name = "number pad"
|
||||||
|
desc = "This small number pad allows someone to input a number into the system."
|
||||||
|
icon_state = "numberpad"
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
complexity = 2
|
||||||
|
can_be_asked_input = 1
|
||||||
|
output_names = list(
|
||||||
|
"number entered"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"on entered"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/numberpad/ask_for_input(mob/user)
|
||||||
|
var/new_input = input(user, "Enter a number, please.","Number pad") as null|num
|
||||||
|
if(isnum(new_input))
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
O.data = new_input
|
||||||
|
O.push_data()
|
||||||
|
var/datum/integrated_io/A = activators[1]
|
||||||
|
if(A.linked)
|
||||||
|
A.holder.work()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/textpad
|
||||||
|
name = "text pad"
|
||||||
|
desc = "This small text pad allows someone to input a string into the system."
|
||||||
|
icon_state = "numberpad"
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
complexity = 2
|
||||||
|
can_be_asked_input = 1
|
||||||
|
output_names = list(
|
||||||
|
"string entered"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"on entered"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user)
|
||||||
|
var/new_input = input(user, "Enter some words, please.","Number pad") as null|text
|
||||||
|
if(new_input && istext(new_input))
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
O.data = new_input
|
||||||
|
O.push_data()
|
||||||
|
var/datum/integrated_io/A = activators[1]
|
||||||
|
if(A.linked)
|
||||||
|
A.holder.work()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/med_scanner
|
||||||
|
name = "integrated medical analyser"
|
||||||
|
desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is."
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 2
|
||||||
|
number_of_activators = 1
|
||||||
|
complexity = 4
|
||||||
|
input_names = list(
|
||||||
|
"target ref"
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"total health %",
|
||||||
|
"total missing health"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"scan"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/med_scanner/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/I = inputs[1]
|
||||||
|
if(!I.data || !ishuman(I.data)) //Invalid input
|
||||||
|
return
|
||||||
|
var/mob/living/carbon/human/H = I.data
|
||||||
|
if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range.
|
||||||
|
var/total_health = round(H.health/H.maxHealth, 0.1)*100
|
||||||
|
var/missing_health = H.maxHealth - H.health
|
||||||
|
|
||||||
|
var/datum/integrated_io/total = outputs[1]
|
||||||
|
var/datum/integrated_io/missing = outputs[2]
|
||||||
|
|
||||||
|
total.data = total_health
|
||||||
|
missing.data = missing_health
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/adv_med_scanner
|
||||||
|
name = "integrated advanced medical analyser"
|
||||||
|
desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is. \
|
||||||
|
This type is much more precise, allowing the machine to know much more about the target than a normal analyzer."
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 7
|
||||||
|
number_of_activators = 1
|
||||||
|
complexity = 12
|
||||||
|
input_names = list(
|
||||||
|
"target ref"
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"total health %",
|
||||||
|
"total missing health",
|
||||||
|
"brute damage",
|
||||||
|
"burn damage",
|
||||||
|
"tox damage",
|
||||||
|
"oxy damage",
|
||||||
|
"clone damage"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"scan"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/adv_med_scanner/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/I = inputs[1]
|
||||||
|
if(!I.data || !ishuman(I.data)) //Invalid input
|
||||||
|
return
|
||||||
|
var/mob/living/carbon/human/H = I.data
|
||||||
|
if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range.
|
||||||
|
var/total_health = round(H.health/H.maxHealth, 0.1)*100
|
||||||
|
var/missing_health = H.maxHealth - H.health
|
||||||
|
|
||||||
|
var/datum/integrated_io/total = outputs[1]
|
||||||
|
var/datum/integrated_io/missing = outputs[2]
|
||||||
|
var/datum/integrated_io/brute = outputs[3]
|
||||||
|
var/datum/integrated_io/burn = outputs[4]
|
||||||
|
var/datum/integrated_io/tox = outputs[5]
|
||||||
|
var/datum/integrated_io/oxy = outputs[6]
|
||||||
|
var/datum/integrated_io/clone = outputs[7]
|
||||||
|
|
||||||
|
total.data = total_health
|
||||||
|
missing.data = missing_health
|
||||||
|
brute.data = H.getBruteLoss()
|
||||||
|
burn.data = H.getFireLoss()
|
||||||
|
tox.data = H.getToxLoss()
|
||||||
|
oxy.data = H.getOxyLoss()
|
||||||
|
clone.data = H.getCloneLoss()
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/local_locator
|
||||||
|
name = "local locator"
|
||||||
|
desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \
|
||||||
|
that is holding the machine containing it."
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
complexity = 4
|
||||||
|
output_names = list(
|
||||||
|
"located ref"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"locate"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/input/local_locator/work()
|
||||||
|
if(..())
|
||||||
|
var/mob/living/L = null
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
O.data = null
|
||||||
|
if(istype(src.loc, /obj/item/device/electronic_assembly)) // Check to make sure we're actually in a machine.
|
||||||
|
var/obj/item/device/electronic_assembly/assembly = src.loc
|
||||||
|
if(istype(assembly.loc, /mob/living)) // Now check if someone's holding us.
|
||||||
|
L = assembly.loc
|
||||||
|
|
||||||
|
if(L)
|
||||||
|
O.data = L
|
||||||
|
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/output/screen
|
||||||
|
name = "screen"
|
||||||
|
desc = "This small screen can display a single piece of data, when the machine is examined closely."
|
||||||
|
icon_state = "screen"
|
||||||
|
complexity = 4
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 0
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list(
|
||||||
|
"displayed data"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"load data"
|
||||||
|
)
|
||||||
|
var/stuff_to_display = null
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/output/screen/work()
|
||||||
|
var/datum/integrated_io/I = inputs[1]
|
||||||
|
stuff_to_display = I.data
|
||||||
172
code/modules/integrated_electronics/logic.dm
Normal file
172
code/modules/integrated_electronics/logic.dm
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
/obj/item/integrated_circuit/logic
|
||||||
|
name = "logic gate"
|
||||||
|
desc = "This tiny chip will decide for you!"
|
||||||
|
complexity = 3
|
||||||
|
number_of_inputs = 2
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 2
|
||||||
|
input_names = list(
|
||||||
|
"A",
|
||||||
|
"B"
|
||||||
|
)
|
||||||
|
output_names = list(
|
||||||
|
"result"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"compare",
|
||||||
|
"on true result"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/equals
|
||||||
|
name = "equal gate"
|
||||||
|
desc = "This gate compares two values, and outputs the number one if both are the same."
|
||||||
|
icon_state = "equal"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/equals/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data == B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/not
|
||||||
|
name = "not gate"
|
||||||
|
desc = "This gate inverts what's fed into it."
|
||||||
|
icon_state = "not"
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
output_names = list(
|
||||||
|
"invert"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/not/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
if(A.data)
|
||||||
|
O.data = !A.data
|
||||||
|
O.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/and
|
||||||
|
name = "and gate"
|
||||||
|
desc = "This gate will output 'one' if both inputs evaluate to true."
|
||||||
|
icon_state = "and"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/and/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data && B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
A.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/or
|
||||||
|
name = "or gate"
|
||||||
|
desc = "This gate will output 'one' if one of the inputs evaluate to true."
|
||||||
|
icon_state = "or"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/or/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data || B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
A.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/less_than
|
||||||
|
name = "less than gate"
|
||||||
|
desc = "This will output 'one' if the first input is less than the second input."
|
||||||
|
icon_state = "less_than"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/less_than/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data < B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
A.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/less_than_or_equal
|
||||||
|
name = "less than or equal gate"
|
||||||
|
desc = "This will output 'one' if the first input is less than, or equal to the second input."
|
||||||
|
icon_state = "less_than_or_equal"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/less_than_or_equal/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data <= B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
A.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/greater_than
|
||||||
|
name = "greater than gate"
|
||||||
|
desc = "This will output 'one' if the first input is greater than the second input."
|
||||||
|
icon_state = "greater_than"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/greater_than/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data > B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
A.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/greater_than_or_equal
|
||||||
|
name = "greater_than or equal gate"
|
||||||
|
desc = "This will output 'one' if the first input is greater than, or equal to the second input."
|
||||||
|
icon_state = "greater_than_or_equal"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/logic/greater_than_or_equal/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/A = inputs[1]
|
||||||
|
var/datum/integrated_io/B = inputs[2]
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/datum/integrated_io/P = activators[2]
|
||||||
|
if(A.data >= B.data)
|
||||||
|
O.data = 1
|
||||||
|
O.push_data()
|
||||||
|
A.push_data()
|
||||||
|
P.push_data()
|
||||||
|
else
|
||||||
|
O.data = 0
|
||||||
116
code/modules/integrated_electronics/manipulation.dm
Normal file
116
code/modules/integrated_electronics/manipulation.dm
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
/obj/item/integrated_circuit/manipulation/weapon_firing
|
||||||
|
name = "weapon firing mechanism"
|
||||||
|
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
|
||||||
|
extended_desc = "The firing mechanism can slot in most ranged weapons, ballistic and energy. \
|
||||||
|
The first and second inputs need to be numbers. They are coordinates for the gun to fire at, relative to the machine itself. \
|
||||||
|
The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Note that the \
|
||||||
|
normal limitations to firearms, such as ammunition requirements and firing delays, still hold true if fired by the mechanism."
|
||||||
|
complexity = 20
|
||||||
|
number_of_inputs = 2
|
||||||
|
number_of_outputs = 0
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list(
|
||||||
|
"target X rel",
|
||||||
|
"target Y rel"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"fire"
|
||||||
|
)
|
||||||
|
var/obj/item/weapon/gun/installed_gun = null
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/weapon_firing/Destroy()
|
||||||
|
qdel(installed_gun)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(var/obj/O, var/mob/user)
|
||||||
|
if(istype(O, /obj/item/weapon/gun))
|
||||||
|
var/obj/item/weapon/gun/gun = O
|
||||||
|
if(installed_gun)
|
||||||
|
user << "<span class='warning'>There's already a weapon installed.</span>"
|
||||||
|
return
|
||||||
|
user.drop_from_inventory(gun)
|
||||||
|
installed_gun = gun
|
||||||
|
gun.forceMove(src)
|
||||||
|
user << "<span class='notice'>You slide \the [gun] into the firing mechanism.</span>"
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(var/mob/user)
|
||||||
|
if(installed_gun)
|
||||||
|
installed_gun.forceMove(get_turf(src))
|
||||||
|
user << "<span class='notice'>You slide \the [installed_gun] out of the firing mechanism.</span>"
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
installed_gun = null
|
||||||
|
else
|
||||||
|
user << "<span class='notice'>There's no weapon to remove from the mechanism.</span>"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/weapon_firing/work()
|
||||||
|
if(!installed_gun)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/datum/integrated_io/target_x = inputs[1]
|
||||||
|
var/datum/integrated_io/target_y = inputs[2]
|
||||||
|
|
||||||
|
if(target_x.data && target_y.data && isnum(target_x.data) && isnum(target_y.data))
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
|
||||||
|
if(target_x.data == 0 && target_y.data == 0) // Don't shoot ourselves.
|
||||||
|
return
|
||||||
|
|
||||||
|
// We need to do this in order to enable relative coordinates, as locate() only works for absolute coordinates.
|
||||||
|
var/i
|
||||||
|
if(target_x.data > 0)
|
||||||
|
i = abs(target_x.data)
|
||||||
|
while(i)
|
||||||
|
T = get_step(T, EAST)
|
||||||
|
i--
|
||||||
|
else if(target_x.data < 0)
|
||||||
|
i = abs(target_x.data)
|
||||||
|
while(i)
|
||||||
|
T = get_step(T, WEST)
|
||||||
|
i--
|
||||||
|
|
||||||
|
if(target_y.data > 0)
|
||||||
|
i = abs(target_y.data)
|
||||||
|
while(i)
|
||||||
|
T = get_step(T, NORTH)
|
||||||
|
i--
|
||||||
|
else if(target_y.data < 0)
|
||||||
|
i = abs(target_y.data)
|
||||||
|
while(i)
|
||||||
|
T = get_step(T, SOUTH)
|
||||||
|
i--
|
||||||
|
|
||||||
|
if(!T)
|
||||||
|
return
|
||||||
|
installed_gun.Fire_userless(T)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/smoke
|
||||||
|
name = "smoke generator"
|
||||||
|
desc = "Unlike most electronics, creating smoke is completely intentional."
|
||||||
|
extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \
|
||||||
|
into the smoke clouds when activated."
|
||||||
|
flags = OPENCONTAINER
|
||||||
|
complexity = 20
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 0
|
||||||
|
number_of_activators = 1
|
||||||
|
input_names = list()
|
||||||
|
activator_names = list(
|
||||||
|
"create smoke"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/smoke/New()
|
||||||
|
..()
|
||||||
|
create_reagents(100)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/manipulation/smoke/work()
|
||||||
|
if(..())
|
||||||
|
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||||
|
var/datum/effect/effect/system/smoke_spread/chem/smoke_system = new()
|
||||||
|
smoke_system.set_up(reagents, 10, 0, get_turf(src))
|
||||||
|
spawn(0)
|
||||||
|
for(var/i = 1 to 8)
|
||||||
|
smoke_system.start()
|
||||||
|
reagents.clear_reagents()
|
||||||
98
code/modules/integrated_electronics/memory.dm
Normal file
98
code/modules/integrated_electronics/memory.dm
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
/obj/item/integrated_circuit/memory
|
||||||
|
name = "memory chip"
|
||||||
|
desc = "This tiny chip can store one piece of data."
|
||||||
|
icon_state = "memory"
|
||||||
|
complexity = 1
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
activator_names = list(
|
||||||
|
"set"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/examine(mob/user)
|
||||||
|
..()
|
||||||
|
var/i
|
||||||
|
for(i = 1, i <= outputs.len, i++)
|
||||||
|
var/datum/integrated_io/O = outputs[i]
|
||||||
|
user << "\The [src] has [O.data ? "'O.data'" : "nothing"] saved to address [i]."
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/work()
|
||||||
|
if(..())
|
||||||
|
var/i
|
||||||
|
for(i = 1, i <= inputs.len, i++)
|
||||||
|
var/datum/integrated_io/I = inputs[i]
|
||||||
|
var/datum/integrated_io/O = outputs[i]
|
||||||
|
O.data = I.data
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/medium
|
||||||
|
name = "memory circuit"
|
||||||
|
desc = "This circuit can store four pieces of data."
|
||||||
|
icon_state = "memory4"
|
||||||
|
complexity = 4
|
||||||
|
number_of_inputs = 4
|
||||||
|
number_of_outputs = 4
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/large
|
||||||
|
name = "large memory circuit"
|
||||||
|
desc = "This big circuit can hold eight pieces of data."
|
||||||
|
icon_state = "memory8"
|
||||||
|
complexity = 8
|
||||||
|
number_of_inputs = 8
|
||||||
|
number_of_outputs = 8
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/huge
|
||||||
|
name = "large memory stick"
|
||||||
|
desc = "This stick of memory can hold up up to sixteen pieces of data."
|
||||||
|
icon_state = "memory16"
|
||||||
|
complexity = 16
|
||||||
|
number_of_inputs = 16
|
||||||
|
number_of_outputs = 16
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/constant
|
||||||
|
name = "constant chip"
|
||||||
|
desc = "This tiny chip can store one piece of data, which cannot be overwritten without disassembly."
|
||||||
|
icon_state = "memory"
|
||||||
|
complexity = 1
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
activator_names = list(
|
||||||
|
"push data"
|
||||||
|
)
|
||||||
|
var/accepting_refs = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/constant/work()
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
O.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/constant/attack_self(mob/user)
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref")
|
||||||
|
var/new_data = null
|
||||||
|
switch(type_to_use)
|
||||||
|
if("string")
|
||||||
|
accepting_refs = 0
|
||||||
|
new_data = input("Now type in a string.","[src] string writing") as null|text
|
||||||
|
if(istext(new_data))
|
||||||
|
O.data = new_data
|
||||||
|
user << "<span class='notice'>You set \the [src]'s memory to [O.display_data()].</span>"
|
||||||
|
if("number")
|
||||||
|
accepting_refs = 0
|
||||||
|
new_data = input("Now type in a number.","[src] number writing") as null|num
|
||||||
|
if(isnum(new_data))
|
||||||
|
O.data = new_data
|
||||||
|
user << "<span class='notice'>You set \the [src]'s memory to [O.display_data()].</span>"
|
||||||
|
if("ref")
|
||||||
|
accepting_refs = 1
|
||||||
|
user << "<span class='notice'>You turn \the [src]'s ref scanner on. Slide it across \
|
||||||
|
an object for a ref of that object to save it in memory.</span>"
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/memory/constant/afterattack(atom/target, mob/living/user, proximity)
|
||||||
|
if(accepting_refs && proximity)
|
||||||
|
var/datum/integrated_io/O = outputs[1]
|
||||||
|
O.data = target
|
||||||
|
visible_message("<span class='notice'>[user] slides \a [src]'s over \the [target].</span>")
|
||||||
|
user << "<span class='notice'>You set \the [src]'s memory to a reference to [O.display_data()]. The ref scanner is \
|
||||||
|
now off.</span>"
|
||||||
|
accepting_refs = 0
|
||||||
134
code/modules/integrated_electronics/time.dm
Normal file
134
code/modules/integrated_electronics/time.dm
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/obj/item/integrated_circuit/time
|
||||||
|
name = "time circuit"
|
||||||
|
desc = "Now you can build your own clock!"
|
||||||
|
complexity = 2
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 0
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay
|
||||||
|
name = "two-sec delay circuit"
|
||||||
|
desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \
|
||||||
|
This circuit is set to send a pulse after a delay of two seconds."
|
||||||
|
number_of_activators = 2
|
||||||
|
var/delay = 20
|
||||||
|
activator_names = list(
|
||||||
|
"incoming pulse",
|
||||||
|
"outgoing pulse"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/out_pulse = activators[2]
|
||||||
|
sleep(delay)
|
||||||
|
out_pulse.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/five_sec
|
||||||
|
name = "five-sec delay circuit"
|
||||||
|
desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \
|
||||||
|
This circuit is set to send a pulse after a delay of five seconds."
|
||||||
|
delay = 50
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/one_sec
|
||||||
|
name = "one-sec delay circuit"
|
||||||
|
desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \
|
||||||
|
This circuit is set to send a pulse after a delay of one second."
|
||||||
|
delay = 10
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/half_sec
|
||||||
|
name = "half-sec delay circuit"
|
||||||
|
desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \
|
||||||
|
This circuit is set to send a pulse after a delay of half a second."
|
||||||
|
delay = 5
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/tenth_sec
|
||||||
|
name = "tenth-sec delay circuit"
|
||||||
|
desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \
|
||||||
|
This circuit is set to send a pulse after a delay of 1/10th of a second."
|
||||||
|
delay = 1
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/custom
|
||||||
|
name = "custom delay circuit"
|
||||||
|
desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \
|
||||||
|
This circuit's delay can be customized, between 1/10th of a second to one hour. The delay is updated upon receiving a pulse."
|
||||||
|
number_of_inputs = 1
|
||||||
|
input_names = list(
|
||||||
|
"delay time",
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/delay/custom/work()
|
||||||
|
var/datum/integrated_io/delay_input = inputs[1]
|
||||||
|
if(delay_input.data && isnum(delay_input.data) )
|
||||||
|
var/new_delay = min(delay_input.data, 1)
|
||||||
|
new_delay = max(new_delay, 36000) //An hour.
|
||||||
|
delay = new_delay
|
||||||
|
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/ticker
|
||||||
|
name = "ticker circuit"
|
||||||
|
desc = "This circuit sends an automatic pulse every four seconds."
|
||||||
|
complexity = 8
|
||||||
|
number_of_inputs = 1
|
||||||
|
number_of_activators = 1
|
||||||
|
var/ticks_to_pulse = 2
|
||||||
|
var/ticks_completed = 0
|
||||||
|
input_names = list(
|
||||||
|
"toggle ticking"
|
||||||
|
)
|
||||||
|
activator_names = list(
|
||||||
|
"outgoing pulse"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/ticker/New()
|
||||||
|
..()
|
||||||
|
processing_objects |= src
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/ticker/Destroy()
|
||||||
|
processing_objects -= src
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/ticker/process()
|
||||||
|
ticks_completed++
|
||||||
|
if( (ticks_completed % ticks_to_pulse) == 0)
|
||||||
|
var/datum/integrated_io/pulser = activators[1]
|
||||||
|
pulser.push_data()
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/ticker/fast
|
||||||
|
name = "fast ticker"
|
||||||
|
desc = "This advanced circuit sends an automatic pulse every two seconds."
|
||||||
|
complexity = 12
|
||||||
|
ticks_to_pulse = 1
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/ticker/slow
|
||||||
|
name = "slow ticker"
|
||||||
|
desc = "This simple circuit sends an automatic pulse every six seconds."
|
||||||
|
complexity = 4
|
||||||
|
ticks_to_pulse = 3
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/clock
|
||||||
|
name = "integrated clock"
|
||||||
|
desc = "Tells you what the local time is, specific to your station or planet."
|
||||||
|
number_of_inputs = 0
|
||||||
|
number_of_outputs = 4
|
||||||
|
number_of_activators = 1
|
||||||
|
output_names = list(
|
||||||
|
"time (string)",
|
||||||
|
"hours (number)",
|
||||||
|
"minutes (number)",
|
||||||
|
"seconds (number)"
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/item/integrated_circuit/time/clock/work()
|
||||||
|
if(..())
|
||||||
|
var/datum/integrated_io/time = outputs[1]
|
||||||
|
var/datum/integrated_io/hour = outputs[2]
|
||||||
|
var/datum/integrated_io/min = outputs[3]
|
||||||
|
var/datum/integrated_io/sec = outputs[4]
|
||||||
|
|
||||||
|
time.data = time2text(station_time_in_ticks, "hh:mm:ss")
|
||||||
|
hour.data = text2num(time2text(station_time_in_ticks, "hh"))
|
||||||
|
min.data = text2num(time2text(station_time_in_ticks, "mm"))
|
||||||
|
sec.data = text2num(time2text(station_time_in_ticks, "ss"))
|
||||||
|
|
||||||
|
for(var/datum/integrated_io/output/O in outputs)
|
||||||
|
O.push_data()
|
||||||
199
code/modules/integrated_electronics/tools.dm
Normal file
199
code/modules/integrated_electronics/tools.dm
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
#define WIRE "wire"
|
||||||
|
#define WIRING "wiring"
|
||||||
|
#define UNWIRE "unwire"
|
||||||
|
#define UNWIRING "unwiring"
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/device/integrated_electronics/wirer
|
||||||
|
name = "circuit wirer"
|
||||||
|
desc = "It's a small wiring tool, with a wire roll, electric soldering iron, wire cutter, and more in one package. \
|
||||||
|
The wires used are generally useful for small electronics, such as circuitboards and breadboards, as opposed to larger wires \
|
||||||
|
used for power or data transmission."
|
||||||
|
icon = 'icons/obj/hacktool.dmi'
|
||||||
|
icon_state = "hacktool-g"
|
||||||
|
flags = CONDUCT
|
||||||
|
w_class = 2
|
||||||
|
var/datum/integrated_io/selected_io = null
|
||||||
|
var/mode = WIRE
|
||||||
|
|
||||||
|
/obj/item/device/integrated_electronics/wirer/New()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/device/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user)
|
||||||
|
if(mode == WIRE)
|
||||||
|
selected_io = io
|
||||||
|
user << "<span class='notice'>You attach a data wire to \the [selected_io.holder]'s [selected_io.name] data channel.</span>"
|
||||||
|
mode = WIRING
|
||||||
|
else if(mode == WIRING)
|
||||||
|
if(io == selected_io)
|
||||||
|
user << "<span class='warning'>Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.</span>"
|
||||||
|
return
|
||||||
|
if(io.io_type != selected_io.io_type)
|
||||||
|
user << "<span class='warning'>Those two types of channels are incompatable. The first is a [selected_io.io_type], \
|
||||||
|
while the second is a [io.io_type].</span>"
|
||||||
|
return
|
||||||
|
selected_io.linked |= io
|
||||||
|
io.linked |= selected_io
|
||||||
|
|
||||||
|
user << "<span class='notice'>You connect \the [selected_io.holder]'s [selected_io.name] to \the [io.holder]'s [io.name].</span>"
|
||||||
|
mode = WIRE
|
||||||
|
//io.updateDialog()
|
||||||
|
//selected_io.updateDialog()
|
||||||
|
selected_io.holder.interact(user) // This is to update the UI.
|
||||||
|
selected_io = null
|
||||||
|
|
||||||
|
else if(mode == UNWIRE)
|
||||||
|
selected_io = io
|
||||||
|
if(!io.linked.len)
|
||||||
|
user << "<span class='warning'>There is nothing connected to \the [selected_io] data channel.</span>"
|
||||||
|
selected_io = null
|
||||||
|
return
|
||||||
|
user << "<span class='notice'>You prepare to detach a data wire from \the [selected_io.holder]'s [selected_io.name] data channel.</span>"
|
||||||
|
mode = UNWIRING
|
||||||
|
return
|
||||||
|
|
||||||
|
else if(mode == UNWIRING)
|
||||||
|
if(io == selected_io)
|
||||||
|
user << "<span class='warning'>You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \
|
||||||
|
the same pin is rather moot.</span>"
|
||||||
|
return
|
||||||
|
if(selected_io in io.linked)
|
||||||
|
io.linked.Remove(selected_io)
|
||||||
|
selected_io.linked.Remove(io)
|
||||||
|
user << "<span class='notice'>You disconnect \the [selected_io.holder]'s [selected_io.name] from \
|
||||||
|
\the [io.holder]'s [io.name].</span>"
|
||||||
|
//io.updateDialog()
|
||||||
|
//selected_io.updateDialog()
|
||||||
|
selected_io.holder.interact(user) // This is to update the UI.
|
||||||
|
selected_io = null
|
||||||
|
mode = UNWIRE
|
||||||
|
else
|
||||||
|
user << "<span class='warning'>\The [selected_io.holder]'s [selected_io.name] and \the [io.holder]'s \
|
||||||
|
[io.name] are not connected.</span>"
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/device/integrated_electronics/wirer/attack_self(mob/user)
|
||||||
|
switch(mode)
|
||||||
|
if(WIRE)
|
||||||
|
mode = UNWIRE
|
||||||
|
if(WIRING)
|
||||||
|
if(selected_io)
|
||||||
|
user << "<span class='notice'>You decide not to wire the data channel.</span>"
|
||||||
|
selected_io = null
|
||||||
|
mode = UNWIRE
|
||||||
|
if(UNWIRE)
|
||||||
|
mode = WIRE
|
||||||
|
if(UNWIRING)
|
||||||
|
if(selected_io)
|
||||||
|
user << "<span class='notice'>You decide not to disconnect the data channel.</span>"
|
||||||
|
selected_io = null
|
||||||
|
mode = UNWIRE
|
||||||
|
user << "<span class='notice'>You set \the [src] to [mode].</span>"
|
||||||
|
|
||||||
|
#undef WIRE
|
||||||
|
#undef WIRING
|
||||||
|
#undef UNWIRE
|
||||||
|
#undef UNWIRING
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/bag/circuits
|
||||||
|
name = "circuit satchel"
|
||||||
|
desc = "This bag's essential for any circuitry projects."
|
||||||
|
icon = 'icons/obj/mining.dmi'
|
||||||
|
icon_state = "satchel"
|
||||||
|
slot_flags = SLOT_BELT | SLOT_POCKET
|
||||||
|
w_class = 2
|
||||||
|
storage_slots = 200
|
||||||
|
max_storage_space = 400
|
||||||
|
max_w_class = 3
|
||||||
|
display_contents_with_number = 1
|
||||||
|
can_hold = list(/obj/item/integrated_circuit)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/bag/circuits/pre_filled/New()
|
||||||
|
..()
|
||||||
|
var/i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/arithmetic/addition(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/arithmetic/subtraction(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/arithmetic/multiplication(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/arithmetic/division(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/arithmetic/absolute(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/arithmetic/average(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/logic/equals(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/logic/less_than(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/logic/less_than_or_equal(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/logic/greater_than(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/logic/greater_than_or_equal(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/logic/not(src)
|
||||||
|
i--
|
||||||
|
i = 10
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/memory(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/memory/medium(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/memory/large(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/memory/huge(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/input/numberpad(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/input/button(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/output/screen(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/transfer/splitter(src)
|
||||||
|
i--
|
||||||
|
i = 5
|
||||||
|
while(i)
|
||||||
|
new /obj/item/integrated_circuit/transfer/activator_splitter(src)
|
||||||
|
i--
|
||||||
|
new /obj/item/device/electronic_assembly(src)
|
||||||
|
new /obj/item/device/integrated_electronics/wirer(src)
|
||||||
@@ -3,3 +3,6 @@
|
|||||||
|
|
||||||
/mob/observer/gib() //ghosts can't be gibbed.
|
/mob/observer/gib() //ghosts can't be gibbed.
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/mob/observer/ash()
|
||||||
|
return //ghosts can't be ashed.
|
||||||
@@ -46,6 +46,25 @@
|
|||||||
if(animation) qdel(animation)
|
if(animation) qdel(animation)
|
||||||
if(src) qdel(src)
|
if(src) qdel(src)
|
||||||
|
|
||||||
|
/mob/proc/ash(anim="dust-m")
|
||||||
|
death(1)
|
||||||
|
var/atom/movable/overlay/animation = null
|
||||||
|
transforming = 1
|
||||||
|
canmove = 0
|
||||||
|
icon = null
|
||||||
|
invisibility = 101
|
||||||
|
|
||||||
|
animation = new(loc)
|
||||||
|
animation.icon_state = "blank"
|
||||||
|
animation.icon = 'icons/mob/mob.dmi'
|
||||||
|
animation.master = src
|
||||||
|
|
||||||
|
flick(anim, animation)
|
||||||
|
|
||||||
|
dead_mob_list -= src
|
||||||
|
spawn(15)
|
||||||
|
if(animation) qdel(animation)
|
||||||
|
if(src) qdel(src)
|
||||||
|
|
||||||
/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...")
|
/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...")
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,11 @@ var/list/holder_mob_icon_cache = list()
|
|||||||
continue
|
continue
|
||||||
M.forceMove(get_turf(src))
|
M.forceMove(get_turf(src))
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/onDropInto(var/atom/movable/AM)
|
||||||
|
if(ismob(loc)) // Bypass our holding mob and drop directly to its loc
|
||||||
|
return loc.loc
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/weapon/holder/GetID()
|
/obj/item/weapon/holder/GetID()
|
||||||
for(var/mob/M in contents)
|
for(var/mob/M in contents)
|
||||||
var/obj/item/I = M.GetIdCard()
|
var/obj/item/I = M.GetIdCard()
|
||||||
|
|||||||
@@ -126,16 +126,12 @@ var/list/slot_equipment_priority = list( \
|
|||||||
|
|
||||||
// Removes an item from inventory and places it in the target atom.
|
// Removes an item from inventory and places it in the target atom.
|
||||||
// If canremove or other conditions need to be checked then use unEquip instead.
|
// If canremove or other conditions need to be checked then use unEquip instead.
|
||||||
/mob/proc/drop_from_inventory(var/obj/item/W, var/atom/Target = null)
|
|
||||||
|
|
||||||
|
/mob/proc/drop_from_inventory(var/obj/item/W, var/atom/target = null)
|
||||||
if(W)
|
if(W)
|
||||||
if(!Target)
|
remove_from_mob(W, target)
|
||||||
Target = loc
|
if(!(W && W.loc))
|
||||||
|
return 1 // self destroying objects (tk, grabs)
|
||||||
remove_from_mob(W)
|
|
||||||
if(!(W && W.loc)) return 1 // self destroying objects (tk, grabs)
|
|
||||||
|
|
||||||
W.forceMove(Target)
|
|
||||||
update_icons()
|
update_icons()
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
@@ -194,7 +190,9 @@ var/list/slot_equipment_priority = list( \
|
|||||||
|
|
||||||
|
|
||||||
//Attemps to remove an object on a mob.
|
//Attemps to remove an object on a mob.
|
||||||
/mob/proc/remove_from_mob(var/obj/O)
|
/mob/proc/remove_from_mob(var/obj/O, var/atom/target)
|
||||||
|
if(!O) // Nothing to remove, so we succeed.
|
||||||
|
return 1
|
||||||
src.u_equip(O)
|
src.u_equip(O)
|
||||||
if (src.client)
|
if (src.client)
|
||||||
src.client.screen -= O
|
src.client.screen -= O
|
||||||
@@ -202,7 +200,10 @@ var/list/slot_equipment_priority = list( \
|
|||||||
O.screen_loc = null
|
O.screen_loc = null
|
||||||
if(istype(O, /obj/item))
|
if(istype(O, /obj/item))
|
||||||
var/obj/item/I = O
|
var/obj/item/I = O
|
||||||
I.forceMove(src.loc)
|
if(target)
|
||||||
|
I.forceMove(target)
|
||||||
|
else
|
||||||
|
I.dropInto(loc)
|
||||||
I.dropped(src)
|
I.dropped(src)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,12 @@
|
|||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/mob/living/carbon/human/ash()
|
||||||
|
if(species)
|
||||||
|
..(species.dusted_anim)
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/death(gibbed)
|
/mob/living/carbon/human/death(gibbed)
|
||||||
|
|
||||||
if(stat == DEAD) return
|
if(stat == DEAD) return
|
||||||
|
|||||||
@@ -589,12 +589,15 @@
|
|||||||
if("swag", "stopsway")
|
if("swag", "stopsway")
|
||||||
src.animate_tail_stop()
|
src.animate_tail_stop()
|
||||||
|
|
||||||
|
if("vomit")
|
||||||
|
vomit()
|
||||||
|
return
|
||||||
|
|
||||||
if ("help")
|
if ("help")
|
||||||
src << {"blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough,
|
src << {"blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, deathgasp, drool, eyebrow, fastsway/qwag,
|
||||||
cry, custom, deathgasp, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,
|
frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom,
|
||||||
grin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,
|
raise, salute, shake, shiver, shrug, sigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, stopsway/swag, sway/wag, swish, tremble, twitch,
|
||||||
sigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,
|
twitch_s, vomit, whimper, wink, yawn"}
|
||||||
wink, yawn, swish, sway/wag, fastsway/qwag, stopsway/swag"}
|
|
||||||
|
|
||||||
else
|
else
|
||||||
src << "\blue Unusable emote '[act]'. Say *help for a list."
|
src << "\blue Unusable emote '[act]'. Say *help for a list."
|
||||||
|
|||||||
@@ -251,8 +251,8 @@
|
|||||||
//splints
|
//splints
|
||||||
for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM))
|
for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM))
|
||||||
var/obj/item/organ/external/o = get_organ(organ)
|
var/obj/item/organ/external/o = get_organ(organ)
|
||||||
if(o && o.status & ORGAN_SPLINTED)
|
if(o && o.splinted && o.splinted.loc == o)
|
||||||
msg += "<span class='warning'>[T.He] [T.has] a splint on [T.his] [o.name]!</span>\n"
|
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span>\n"
|
||||||
|
|
||||||
if(suiciding)
|
if(suiciding)
|
||||||
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span>\n"
|
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span>\n"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user