mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 05:00:55 +01:00
Merge branch 'master' of github.com:tgstation/-tg-station into FUTURE_DNA_2
Conflicts: code/game/dna.dm <-- leave this shit alone unless it's a small-tidy change. ffs.
This commit is contained in:
+18
-22
@@ -334,30 +334,19 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
/proc/ionnum()
|
||||
return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]"
|
||||
|
||||
//When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave.
|
||||
/proc/freeborg()
|
||||
var/select = null
|
||||
var/list/names = list()
|
||||
var/list/borgs = list()
|
||||
var/list/namecounts = list()
|
||||
for (var/mob/living/silicon/robot/A in player_list)
|
||||
var/name = A.real_name
|
||||
if (A.stat == 2)
|
||||
//Returns a list of unslaved cyborgs
|
||||
/proc/active_free_borgs()
|
||||
. = list()
|
||||
for(var/mob/living/silicon/robot/R in living_mob_list)
|
||||
if(R.connected_ai)
|
||||
continue
|
||||
if (A.connected_ai)
|
||||
if(R.stat == DEAD)
|
||||
continue
|
||||
else
|
||||
if(A.module)
|
||||
name += " ([A.module.name])"
|
||||
names.Add(name)
|
||||
namecounts[name] = 1
|
||||
borgs[name] = A
|
||||
if(R.emagged || R.scrambledcodes || R.syndicate)
|
||||
continue
|
||||
. += R
|
||||
|
||||
if (borgs.len)
|
||||
select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs
|
||||
return borgs[select]
|
||||
|
||||
//When a borg is activated, it can choose which AI it wants to be slaved to
|
||||
//Returns a list of AI's
|
||||
/proc/active_ais()
|
||||
. = list()
|
||||
for(var/mob/living/silicon/ai/A in living_mob_list)
|
||||
@@ -378,10 +367,17 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
return selected
|
||||
|
||||
/proc/select_active_free_borg(var/mob/user)
|
||||
var/list/borgs = active_free_borgs()
|
||||
if(borgs.len)
|
||||
if(user) . = input(user,"Unshackled cyborg signals detected:", "Cyborg Selection", borgs[1]) in borgs
|
||||
else . = pick(borgs)
|
||||
return .
|
||||
|
||||
/proc/select_active_ai(var/mob/user)
|
||||
var/list/ais = active_ais()
|
||||
if(ais.len)
|
||||
if(user) . = input(usr,"AI signals detected:", "AI selection") in ais
|
||||
if(user) . = input(user,"AI signals detected:", "AI Selection", ais[1]) in ais
|
||||
else . = pick(ais)
|
||||
return .
|
||||
|
||||
|
||||
@@ -33,10 +33,16 @@ datum/controller/vote
|
||||
i++
|
||||
reset()
|
||||
else
|
||||
var/datum/browser/client_popup
|
||||
while(i<=voting.len)
|
||||
var/client/C = voting[i]
|
||||
var/client/C = voting[i]
|
||||
if(C)
|
||||
C << browse(vote.interface(C),"window=vote;can_close=0")
|
||||
//C << browse(vote.interface(C),"window=vote;can_close=0")
|
||||
client_popup = new(C, "vote", "Voting Panel")
|
||||
client_popup.set_window_options("can_close=0")
|
||||
client_popup.set_content(vote.interface(C))
|
||||
client_popup.open(0)
|
||||
|
||||
i++
|
||||
else
|
||||
voting.Cut(i,i+1)
|
||||
@@ -176,7 +182,6 @@ datum/controller/vote
|
||||
trialmin = 1
|
||||
voting |= C
|
||||
|
||||
. = "<html><head><title>Voting Panel</title></head><body>"
|
||||
if(mode)
|
||||
if(question) . += "<h2>Vote: '[question]'</h2>"
|
||||
else . += "<h2>Vote: [capitalize(mode)]</h2>"
|
||||
@@ -211,7 +216,7 @@ datum/controller/vote
|
||||
if(trialmin)
|
||||
. += "<li><a href='?src=\ref[src];vote=custom'>Custom</a></li>"
|
||||
. += "</ul><hr>"
|
||||
. += "<a href='?src=\ref[src];vote=close' style='position:absolute;right:50px'>Close</a></body></html>"
|
||||
. += "<a href='?src=\ref[src];vote=close' style='position:absolute;right:50px'>Close</a>"
|
||||
return .
|
||||
|
||||
|
||||
@@ -250,4 +255,8 @@ datum/controller/vote
|
||||
set name = "Vote"
|
||||
|
||||
if(vote)
|
||||
src << browse(vote.interface(client),"window=vote;can_close=0")
|
||||
//src << browse(vote.interface(client),"window=vote;can_close=0")
|
||||
var/datum/browser/popup = new(src, "vote", "Voting Panel")
|
||||
popup.set_window_options("can_close=0")
|
||||
popup.set_content(vote.interface(client))
|
||||
popup.open(0)
|
||||
+50
-17
@@ -39,6 +39,7 @@ var/list/uplink_items = list()
|
||||
/datum/uplink_item
|
||||
var/name = "item name"
|
||||
var/category = "item category"
|
||||
var/desc = "item description"
|
||||
var/item = null
|
||||
var/cost = 0
|
||||
var/last = 0 // Appear last
|
||||
@@ -88,35 +89,41 @@ var/list/uplink_items = list()
|
||||
// DANGEROUS WEAPONS
|
||||
|
||||
/datum/uplink_item/dangerous
|
||||
category = "Highly Visible and Dangerous Weapons"
|
||||
category = "Conspicuous and Dangerous Weapons"
|
||||
|
||||
/datum/uplink_item/dangerous/revolver
|
||||
name = "Revolver"
|
||||
name = "Full Revolver"
|
||||
desc = "The syndicate revolver is a traditional handgun that fires .357 Magnum cartridges and has 7 chambers."
|
||||
item = /obj/item/weapon/gun/projectile
|
||||
cost = 6
|
||||
|
||||
/datum/uplink_item/dangerous/ammo
|
||||
name = "Ammo-357"
|
||||
desc = "A box that contains seven additional rounds for the revolver, made using an automatic lathe."
|
||||
item = /obj/item/ammo_magazine/a357
|
||||
cost = 2
|
||||
|
||||
/datum/uplink_item/dangerous/crossbow
|
||||
name = "Energy Crossbow"
|
||||
name = "Miniature Energy Crossbow"
|
||||
desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag unnoticed. It fires bolts tipped with toxin, a poison collected from an organism. Its bolts stun enemies for short periods, and replenish automatically."
|
||||
item = /obj/item/weapon/gun/energy/crossbow
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/dangerous/sword
|
||||
name = "Energy Sword"
|
||||
desc = "The esword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise."
|
||||
item = /obj/item/weapon/melee/energy/sword
|
||||
cost = 4
|
||||
|
||||
/datum/uplink_item/dangerous/emp
|
||||
name = "5 EMP Grenades"
|
||||
name = "A box of 5 EMP Grenades"
|
||||
desc = "Electromagnetic pulse grenades cause transient disturbance on detonation, disabling nearby electronic equipment."
|
||||
item = /obj/item/weapon/storage/box/emps
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/dangerous/syndicate_minibomb
|
||||
name = "Syndicate Minibomb"
|
||||
desc = "The Minibomb is a grenade with a five-second fuse."
|
||||
item = /obj/item/weapon/grenade/syndieminibomb
|
||||
cost = 3
|
||||
|
||||
@@ -127,16 +134,19 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/para_pen
|
||||
name = "Paralysis Pen"
|
||||
desc = "A syringe disguised as a functional pen, filled with a neuromuscular-blocking drug that renders a target immobile on injection and makes them seem dead to observers. Side effects of the drug include noticeable drooling. The pen holds one dose of paralyzing agent, and cannot be refilled."
|
||||
item = /obj/item/weapon/pen/paralysis
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/soap
|
||||
name = "Syndicate Soap"
|
||||
desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. You can also drop it underfoot to slip people."
|
||||
item = /obj/item/weapon/soap/syndie
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/detomatix
|
||||
name = "Detomatix PDA Cartridge"
|
||||
desc = "When inserted into a personal digital assistant, this cartridge gives you five opportunities to detonate PDAs of crewmembers who have their message feature enabled. The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer. It has a chance to detonate your PDA."
|
||||
item = /obj/item/weapon/cartridge/syndicate
|
||||
cost = 3
|
||||
|
||||
@@ -148,31 +158,37 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chameleon_jumpsuit
|
||||
name = "Chameleon Jumpsuit"
|
||||
desc = "A jumpsuit used to imitate the uniforms of Nanotrasen crewmembers."
|
||||
item = /obj/item/clothing/under/chameleon
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigolashes
|
||||
name = "No-Slip Syndicate Shoes"
|
||||
name = "No-Slip Brown Shoes"
|
||||
desc = "These allow you to run on wet floors. They do not work on lubricated surfaces."
|
||||
item = /obj/item/clothing/shoes/syndigaloshes
|
||||
cost = 2
|
||||
|
||||
/datum/uplink_item/stealthy_tools/agent_card
|
||||
name = "Agent ID Card"
|
||||
name = "Agent Identification card"
|
||||
desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access from other identification cards. The access is cumulative, so scanning one card does not erase the access gained from another."
|
||||
item = /obj/item/weapon/card/id/syndicate
|
||||
cost = 2
|
||||
|
||||
/datum/uplink_item/stealthy_tools/voice_changer
|
||||
name = "Voice Changer"
|
||||
item = /obj/item/clothing/mask/gas/voice
|
||||
desc = "A conspicuous gas mask that mimics the voice named on your identification card. When no identification is worn, the mask will render your voice unrecognizable."
|
||||
cost = 4
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chameleon_proj
|
||||
name = "Chameleon-Projector"
|
||||
desc = "Projects an image across a user, disguising them as an object scanned with it. The disguised user cannot run. Projectiles pass over them."
|
||||
item = /obj/item/device/chameleon
|
||||
cost = 4
|
||||
|
||||
/datum/uplink_item/stealthy_tools/camera_bug
|
||||
name = "Camera Bug"
|
||||
desc = "Enables you to bug cameras to view them remotely. Adding particular items to it alters its functions."
|
||||
item = /obj/item/device/camera_bug
|
||||
cost = 2
|
||||
|
||||
@@ -183,61 +199,73 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/device_tools/emag
|
||||
name = "Cryptographic Sequencer"
|
||||
desc = "The emag is a small card that unlocks hidden functions in electronic devices, subverts intended functions and characteristically breaks security mechanisms."
|
||||
item = /obj/item/weapon/card/emag
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/toolbox
|
||||
name = "Fully Loaded Toolbox"
|
||||
name = "Full Syndicate Toolbox"
|
||||
desc = "The syndicate toolbox is a suspicious black and red. Aside from tools, it comes with cable and a multitool. Insulated gloves are not included."
|
||||
item = /obj/item/weapon/storage/toolbox/syndicate
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/device_tools/space_suit
|
||||
name = "Space Suit"
|
||||
name = "Syndicate Space Suit"
|
||||
desc = "The red syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings."
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/space
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/thermal
|
||||
name = "Thermal Imaging Glasses"
|
||||
desc = "These glasses are thermals disguised as engineers' optical meson scanners. They allow you to see organisms through walls by capturing the upper portion of the infrared light spectrum, emitted as heat and light by objects. Hotter objects, such as warm bodies, cybernetic organisms and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks."
|
||||
item = /obj/item/clothing/glasses/thermal/syndi
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/binary
|
||||
name = "Binary Translator Key"
|
||||
desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary. "
|
||||
item = /obj/item/device/encryptionkey/binary
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/ai_detector
|
||||
name = "Disguised AI Detector"
|
||||
name = "Artificial Intelligence Detector" // changed name in case newfriends thought it detected disguised ai's
|
||||
desc = "A functional multitool that turns red when it detects an artificial intelligence watching it or its holder. Knowing when an artificial intelligence is watching you is useful for knowing when to maintain cover."
|
||||
item = /obj/item/device/multitool/ai_detect
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/device_tools/hacked_module
|
||||
name = "Hacked AI Upload Module"
|
||||
name = "Hacked Artificial Intelligence Law Upload Module"
|
||||
desc = "When used with an upload console, this module allows you to upload priority laws to an artificial intelligence. Be careful with their wording, as artificial intelligences may look for loopholes to exploit."
|
||||
item = /obj/item/weapon/aiModule/syndicate
|
||||
cost = 7
|
||||
|
||||
/datum/uplink_item/device_tools/plastic_explosives
|
||||
name = "C-4 (Destroys Walls)"
|
||||
name = "Composition C-4"
|
||||
desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls, attach it to organisms to destroy them, or connect a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
|
||||
item = /obj/item/weapon/plastique
|
||||
cost = 2
|
||||
|
||||
/datum/uplink_item/device_tools/powersink
|
||||
name = "Powersink (DANGER!)"
|
||||
name = "Power sink"
|
||||
desc = "When screwed to wiring attached to an electric grid, then activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink cannot be carried because of its excessive size. Ordering this sends you a small beacon that will teleport the power sink to your location on activation."
|
||||
item = /obj/item/device/powersink
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/device_tools/singularity_beacon
|
||||
name = "Singularity Beacon (DANGER!)"
|
||||
name = "Singularity Beacon"
|
||||
desc = "When screwed to wiring attached to an electric grid, then activated, this large device pulls the singularity towards it. Does not work when the singularity is still in containment. A singularity beacon can cause catastrophic damage to a space station, leading to an emergency evacuation. Because of its size, it cannot be carried. Ordering this sends you a small beacon that will teleport the larger beacon to your location on activation."
|
||||
item = /obj/item/device/sbeacondrop
|
||||
cost = 7
|
||||
|
||||
/datum/uplink_item/device_tools/syndicate_bomb
|
||||
name = "Syndicate Bomb (DANGER!)"
|
||||
name = "Syndicate Bomb"
|
||||
desc = "The Syndicate Bomb has an adjustable timer with a minimum setting of 30 seconds. Ordering the bomb sends you a small beacon, which will teleport the explosive to your location when you activate it. You can wrench the bomb down to prevent removal. The crew may defuse the bomb."
|
||||
item = /obj/item/device/sbeacondrop/bomb
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/device_tools/teleporter
|
||||
name = "Teleporter Circuit Board"
|
||||
desc = "A printed circuit board that completes the teleporter onboard the mothership. Advise you test fire the teleporter before entering it, as malfunctions can occur."
|
||||
item = /obj/item/weapon/circuitboard/teleporter
|
||||
cost = 20
|
||||
gamemodes = list("nuclear emergency")
|
||||
@@ -250,11 +278,13 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/implants/freedom
|
||||
name = "Freedom Implant"
|
||||
desc = "An implant injected into the body and later activated using a bodily gesture to attempt to slip restraints."
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/implants/uplink
|
||||
name = "Uplink Implant (Contains 5 Telecrystals)"
|
||||
name = "Uplink Implant"
|
||||
desc = "An implant injected into the body, and later activated using a bodily gesture to open an uplink with 5 telecrystals. The ability for an agent to open an uplink after their posessions have been stripped from them makes this implant excellent for escaping confinement."
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/imp_uplink
|
||||
cost = 10
|
||||
|
||||
@@ -266,16 +296,19 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/badass/bundle
|
||||
name = "Syndicate Bundle"
|
||||
desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 10 telecrystals, but you do not know which specialisation you will receive."
|
||||
item = /obj/item/weapon/storage/box/syndicate
|
||||
cost = 10
|
||||
|
||||
/datum/uplink_item/badass/balloon
|
||||
name = "For showing that You Are The Boss (Useless Balloon)"
|
||||
name = "For showing that you are The Boss"
|
||||
desc = "A useless red balloon with the syndicate logo on it, which can blow the deepest of covers."
|
||||
item = /obj/item/toy/syndicateballoon
|
||||
cost = 10
|
||||
|
||||
/datum/uplink_item/badass/random
|
||||
name = "Random Item (??)"
|
||||
name = "Random Item (?)"
|
||||
desc = "Picking this choice will send you a random item from the list. Useful for when you cannot think of a strategy to finish your objectives with."
|
||||
item = /obj/item/weapon/storage/box/syndicate
|
||||
cost = 0
|
||||
|
||||
|
||||
+71
-54
@@ -583,47 +583,61 @@
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/proc/ShowInterface(mob/user, last_change)
|
||||
if(!user) return
|
||||
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 880, 470) // Set up the popup browser window
|
||||
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 880, 600) // Set up the popup browser window
|
||||
if(!( in_range(src, user) || istype(user, /mob/living/silicon) ))
|
||||
popup.close()
|
||||
return
|
||||
popup.add_stylesheet("scannernew", 'html/browser/scannernew.css')
|
||||
|
||||
var/mob/living/carbon/viable_occupant
|
||||
var/occupant_status
|
||||
var/occupant_status = "<div class='line'><div class='statusLabel'>Subject Status:</div><div class='statusValue'>"
|
||||
var/scanner_status
|
||||
var/temp_html
|
||||
if(connected)
|
||||
if(connected.occupant) //set occupant_status message
|
||||
viable_occupant = connected.occupant
|
||||
if(check_dna_integrity(viable_occupant) && !(NOCLONE in viable_occupant.mutations)) //occupent is viable for dna modification
|
||||
occupant_status += "[viable_occupant.name] => "
|
||||
switch(viable_occupant.stat)
|
||||
if(CONSCIOUS) occupant_status = "<span class='good'>Conscious</span>"
|
||||
if(UNCONSCIOUS) occupant_status = "<span class='average'>Unconscious</span>"
|
||||
else occupant_status = "<span class='bad'>DEAD - Cannot Operate</span>"
|
||||
occupant_status = "[viable_occupant.name] => [occupant_status]<br />"
|
||||
if(CONSCIOUS) occupant_status += "<span class='good'>Conscious</span>"
|
||||
if(UNCONSCIOUS) occupant_status += "<span class='average'>Unconscious</span>"
|
||||
else occupant_status += "<span class='bad'>DEAD - Cannot Operate</span>"
|
||||
occupant_status += "</div></div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Health:</div><div class='progressBar'><div style='width: [viable_occupant.health]%;' class='progressFill good'></div></div><div class='statusValue'>[viable_occupant.health]%</div></div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Radiation Level:</div><div class='progressBar'><div style='width: [viable_occupant.radiation]%;' class='progressFill bad'></div></div><div class='statusValue'>[viable_occupant.radiation]%</div></div>"
|
||||
var/rejuvenators = viable_occupant.reagents.get_reagent_amount("inaprovaline")
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Rejuvenators:</div><div class='progressBar'><div style='width: [round((rejuvenators / REJUVENATORS_MAX) * 100)]%;' class='progressFill highlight'></div></div><div class='statusValue'>[rejuvenators] units</div></div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Last Operation:</div> [last_change]</div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Unique Enzymes :</div><div class='statusValue'><span class='highlight'>[viable_occupant.dna.unique_enzymes]</span></div></div>"
|
||||
occupant_status += "<div class='line'><div class='statusLabel'>Last Operation:</div><div class='statusValue'>[last_change ? last_change : "----"]</div></div>"
|
||||
else
|
||||
viable_occupant = null
|
||||
occupant_status = "<span class='bad'>Invalid DNA structure</span>"
|
||||
occupant_status += "<span class='bad'>Invalid DNA structure</span></div></div>"
|
||||
else
|
||||
occupant_status = "<span class='bad'>No subject detected</span>"
|
||||
occupant_status += "<span class='bad'>No subject detected</span></div></div>"
|
||||
|
||||
if(connected.locked)
|
||||
scanner_status = "<span class='bad'>Locked</span>"
|
||||
if(connected.open)
|
||||
scanner_status = "Open"
|
||||
else
|
||||
scanner_status = "<span class='good'>Unlocked</span>"
|
||||
scanner_status = "Closed"
|
||||
if(connected.locked)
|
||||
scanner_status += " <span class='bad'>(Locked)</span>"
|
||||
else
|
||||
scanner_status += " <span class='good'>(Unlocked)</span>"
|
||||
|
||||
|
||||
else
|
||||
occupant_status = "<span class='bad'>Error: Undefined</span>"
|
||||
scanner_status = "<span class='bad'>Error: No scanner detected</span>"
|
||||
occupant_status += "<span class='bad'>----</span></div></div>"
|
||||
scanner_status += "<span class='bad'>Error: No scanner detected</span>"
|
||||
|
||||
var/status = "<div class='statusDisplay'>Scanner Status: [scanner_status]<br>Subject Status: [occupant_status]<br>"
|
||||
var/status = "<div class='statusDisplay'>"
|
||||
status += "<div class='line'><div class='statusLabel'>Scanner:</div><div class='statusValue'>[scanner_status]</div></div>"
|
||||
status += "[occupant_status]"
|
||||
|
||||
|
||||
status += "<h3>Radiation Emitter Status</h3>"
|
||||
var/stddev = radstrength*RADIATION_STRENGTH_MULTIPLIER
|
||||
status += "Emitter Array Output Level: [radstrength] <i>Mutation: (-[stddev]<->+[stddev])=68% (-[2*stddev]<->+[2*stddev])=95%</i><br>"
|
||||
status += "<div class='line'><div class='statusLabel'>Output Level:</div><div class='statusValue'>[radstrength]</div></div>"
|
||||
status += "<div class='line'><div class='statusLabel'> \> Mutation:</div><div class='statusValue'>(-[stddev] to +[stddev] = 68%) (-[2*stddev] to +[2*stddev] = 95%)</div></div>"
|
||||
stddev = RADIATION_ACCURACY_MULTIPLIER/radduration
|
||||
var/chance_to_hit
|
||||
switch(stddev) //hardcoded values from a z-table for a normal distribution
|
||||
@@ -631,30 +645,34 @@
|
||||
if(0.25 to 0.5) chance_to_hit = "68-95%"
|
||||
if(0.5 to 0.75) chance_to_hit = "55-68%"
|
||||
else chance_to_hit = "<38%"
|
||||
status += "Emitter Array Pulse Duration: [radduration] <i>Accuracy: ([chance_to_hit])</i></div>"
|
||||
|
||||
status += "<div class='line'><div class='statusLabel'>Pulse Duration:</div><div class='statusValue'>[radduration]</div></div>"
|
||||
status += "<div class='line'><div class='statusLabel'> \> Accuracy:</div><div class='statusValue'>[chance_to_hit]</div></div>"
|
||||
status += "</div>" // Close statusDisplay div
|
||||
var/buttons = "<a href='?src=\ref[src];'>Scan</a> "
|
||||
if(connected) buttons += "<a href='?src=\ref[src];task=togglelock;'>Toggle Bolts</a> <a href='?src=\ref[src];task=toggleopen;'>[connected.open ? "Close" : "Open"] Scanner</a> "
|
||||
else buttons += "<span class='linkOff'>Toggle Bolts</span> <span class='linkOff'>Open Scanner</span> "
|
||||
if(connected)
|
||||
buttons += " <a href='?src=\ref[src];task=toggleopen;'>[connected.open ? "Close" : "Open"] Scanner</a> "
|
||||
if (connected.open)
|
||||
buttons += "<span class='linkOff'>[connected.locked ? "Unlock" : "Lock"] Scanner</span> "
|
||||
else
|
||||
buttons += "<a href='?src=\ref[src];task=togglelock;'>[connected.locked ? "Unlock" : "Lock"] Scanner</a> "
|
||||
else buttons += "<span class='linkOff'>Open Scanner</span> <span class='linkOff'>Lock Scanner</span> "
|
||||
if(viable_occupant) buttons += "<a href='?src=\ref[src];task=rejuv'>Inject Rejuvenators</a> "
|
||||
else buttons += "<span class='linkOff'>Inject Rejuvenators</span> "
|
||||
if(diskette) buttons += "<a href='?src=\ref[src];task=ejectdisk'>Eject Disk</a> "
|
||||
else buttons += "<span class='linkOff'>Eject Disk</span> "
|
||||
if(current_screen == "buffer") buttons += "<a href='?src=\ref[src];task=screen;text=mainmenu;'>Main Menu</a> "
|
||||
else buttons += "<a href='?src=\ref[src];task=screen;text=buffer;'>Buffers</a> "
|
||||
buttons += "<br><a href='?src=\ref[src];task=setstrength;num=[radstrength-1];'>--</a> <a href='?src=\ref[src];task=setstrength;'>Emitter Array Output Level</a> <a href='?src=\ref[src];task=setstrength;num=[radstrength+1];'>++</a>"
|
||||
buttons += "<br><a href='?src=\ref[src];task=setduration;num=[radduration-1];'>--</a> <a href='?src=\ref[src];task=setduration;'>Emitter Array Pulse Duration</a> <a href='?src=\ref[src];task=setduration;num=[radduration+1];'>++</a>"
|
||||
|
||||
if(current_screen == "buffer") buttons += "<a href='?src=\ref[src];task=screen;text=mainmenu;'>Radiation Emitter Menu</a> "
|
||||
else buttons += "<a href='?src=\ref[src];task=screen;text=buffer;'>Buffer Menu</a> "
|
||||
|
||||
switch(current_screen)
|
||||
if("working")
|
||||
temp_html += "<h3>System Busy</h3>"
|
||||
temp_html += status
|
||||
temp_html += "<h1>System Busy</h1>"
|
||||
temp_html += "Working ... Please wait ([radduration] Seconds)"
|
||||
if("buffer")
|
||||
temp_html += "<h3>Buffer Menu</h3>"
|
||||
if("buffer")
|
||||
temp_html += status
|
||||
temp_html += buttons
|
||||
|
||||
temp_html += "<h1>Buffer Menu</h1>"
|
||||
|
||||
if(istype(buffer))
|
||||
for(var/i=1, i<=buffer.len, i++)
|
||||
temp_html += "<br>Slot [i]: "
|
||||
@@ -710,44 +728,43 @@
|
||||
if(diskette && !diskette.read_only) temp_html += "<a href='?src=\ref[src];task=savedisk;num=[i];'>Save to Disk</a> "
|
||||
else temp_html += "<span class='linkOff'>Save to Disk</span> "
|
||||
else
|
||||
temp_html += "<h3>Main Menu</h3>"
|
||||
temp_html += status
|
||||
temp_html += buttons
|
||||
temp_html += "<h1>Radiation Emitter Menu</h1>"
|
||||
|
||||
temp_html += "<a href='?src=\ref[src];task=setstrength;num=[radstrength-1];'>--</a> <a href='?src=\ref[src];task=setstrength;'>Output Level</a> <a href='?src=\ref[src];task=setstrength;num=[radstrength+1];'>++</a>"
|
||||
temp_html += "<br><a href='?src=\ref[src];task=setduration;num=[radduration-1];'>--</a> <a href='?src=\ref[src];task=setduration;'>Pulse Duration</a> <a href='?src=\ref[src];task=setduration;num=[radduration+1];'>++</a>"
|
||||
|
||||
var/max_line_len = 10*DNA_BLOCK_SIZE
|
||||
temp_html += "<h3>Irradiate Subject</h3>"
|
||||
temp_html += "<div class='line'><div class='statusLabel'>Unique Identifier:</div><div class='statusValue'><div class='clearBoth'>"
|
||||
|
||||
temp_html += "<div class='line'><div class='statusLabel'>Unique Enzymes :</div><div class='statusValue'><span class='highlight'>"
|
||||
if(viable_occupant)
|
||||
temp_html += "[viable_occupant.dna.unique_enzymes]"
|
||||
else
|
||||
temp_html += " - "
|
||||
temp_html += "</span></div></div><br>"
|
||||
|
||||
temp_html += "<div class='line'><div class='statusLabel'>Unique Identifier:</div><div class='statusValue'><span class='highlight'>"
|
||||
var/max_line_len = 7*DNA_BLOCK_SIZE
|
||||
if(viable_occupant)
|
||||
temp_html += "<div class='dnaBlockNumber'>1</div>"
|
||||
var/len = length(viable_occupant.dna.uni_identity)
|
||||
for(var/i=1, i<=len, i++)
|
||||
temp_html += "<a href='?src=\ref[src];task=pulseui;num=[i];'>[copytext(viable_occupant.dna.uni_identity,i,i+1)]</a>"
|
||||
if((i % max_line_len) == 0)
|
||||
temp_html += "<br>"
|
||||
else if((i % DNA_BLOCK_SIZE) == 0)
|
||||
temp_html += " "
|
||||
temp_html += "<a class='dnaBlock' href='?src=\ref[src];task=pulseui;num=[i];'>[copytext(viable_occupant.dna.uni_identity,i,i+1)]</a>"
|
||||
if ((i % max_line_len) == 0)
|
||||
temp_html += "</div><div class='clearBoth'>"
|
||||
if((i % DNA_BLOCK_SIZE) == 0 && i < len)
|
||||
temp_html += "<div class='dnaBlockNumber'>[(i / DNA_BLOCK_SIZE) + 1]</div>"
|
||||
else
|
||||
temp_html += " - "
|
||||
temp_html += "</span></div></div><br>"
|
||||
temp_html += "----"
|
||||
temp_html += "</div></div></div><br>"
|
||||
|
||||
temp_html += "<div class='line'><div class='statusLabel'>Structural Enzymes:</div><div class='statusValue'><span class='highlight'>"
|
||||
temp_html += "<div class='line'><div class='statusLabel'>Structural Enzymes:</div><div class='statusValue'><div class='clearBoth'>"
|
||||
if(viable_occupant)
|
||||
temp_html += "<div class='dnaBlockNumber'>1</div>"
|
||||
var/len = length(viable_occupant.dna.struc_enzymes)
|
||||
for(var/i=1, i<=len, i++)
|
||||
temp_html += "<a href='?src=\ref[src];task=pulsese;num=[i];'>[copytext(viable_occupant.dna.struc_enzymes,i,i+1)]</a>"
|
||||
if((i % max_line_len) == 0)
|
||||
temp_html += "<br>"
|
||||
else if((i % DNA_BLOCK_SIZE) == 0)
|
||||
temp_html += " "
|
||||
temp_html += "<a class='dnaBlock' href='?src=\ref[src];task=pulsese;num=[i];'>[copytext(viable_occupant.dna.struc_enzymes,i,i+1)]</a>"
|
||||
if ((i % max_line_len) == 0)
|
||||
temp_html += "</div><div class='clearBoth'>"
|
||||
if((i % DNA_BLOCK_SIZE) == 0 && i < len)
|
||||
temp_html += "<div class='dnaBlockNumber'>[(i / DNA_BLOCK_SIZE) + 1]</div>"
|
||||
else
|
||||
temp_html += " - "
|
||||
temp_html += "</span></div></div>"
|
||||
temp_html += "----"
|
||||
temp_html += "</div></div></div>"
|
||||
|
||||
popup.set_content(temp_html)
|
||||
popup.open()
|
||||
|
||||
@@ -46,11 +46,11 @@
|
||||
return
|
||||
|
||||
if(changeling.absorbedcount < required_dna)
|
||||
src << "<span class='warning'>We require at least [required_dna] samples of compatible DNA.</span>"
|
||||
src << "<span class='warning'>We require at least [required_dna] sample\s of compatible DNA.</span>"
|
||||
return
|
||||
|
||||
if(changeling.chem_charges < required_chems)
|
||||
src << "<span class='warning'>We require at least [required_chems] units of chemicals to do that!</span>"
|
||||
src << "<span class='warning'>We require at least [required_chems] unit\s of chemicals to do that!</span>"
|
||||
return
|
||||
|
||||
if(changeling.geneticdamage > max_genetic_damage)
|
||||
@@ -115,8 +115,12 @@
|
||||
changeling.absorb_dna(T)
|
||||
|
||||
if(src.nutrition < 400) src.nutrition = min((src.nutrition + T.nutrition), 400)
|
||||
if(T.mind && T.mind.changeling)//If the target was a changeling, suck out their extra juice!
|
||||
if(T.mind && T.mind.changeling)//If the target was a changeling, suck out their extra juice and objective points!
|
||||
changeling.chem_charges += min(T.mind.changeling.chem_charges, changeling.chem_storage)
|
||||
changeling.absorbedcount += T.mind.changeling.absorbedcount
|
||||
|
||||
T.mind.changeling.absorbed_dna.len = 1
|
||||
T.mind.changeling.absorbedcount = 0
|
||||
else
|
||||
changeling.chem_charges += 10
|
||||
|
||||
@@ -222,7 +226,7 @@
|
||||
set name = "Regenerative Stasis (10)"
|
||||
set desc = "Begin stasis, allowing us to regenerate."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(10,0,100,DEAD)
|
||||
var/datum/changeling/changeling = changeling_power(10,1,100,DEAD)
|
||||
if(!changeling) return
|
||||
if(status_flags & FAKEDEATH) return //Make sure we can't stack regenerations and such.
|
||||
changeling.chem_charges -= 10
|
||||
@@ -252,7 +256,7 @@
|
||||
set name = "Regenerate! (10)"
|
||||
set desc = "Regenerate, healing all damage from our form."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(10,0,100,DEAD)
|
||||
var/datum/changeling/changeling = changeling_power(10,1,100,DEAD)
|
||||
if(!changeling) return
|
||||
changeling.chem_charges -= 10
|
||||
|
||||
@@ -323,19 +327,24 @@
|
||||
if(!changeling) return 0
|
||||
src.mind.changeling.chem_charges -= 25
|
||||
|
||||
for(var/mob/living/carbon/M in ohearers(4, usr))
|
||||
if(!M.mind || !M.mind.changeling)
|
||||
M.ear_deaf += 30
|
||||
M.confused += 20
|
||||
M.make_jittery(50)
|
||||
for(var/mob/living/M in hearers(4, usr))
|
||||
if(iscarbon(M))
|
||||
if(!M.mind || !M.mind.changeling)
|
||||
M.ear_deaf += 30
|
||||
M.confused += 20
|
||||
M.make_jittery(50)
|
||||
else
|
||||
M << sound('sound/effects/screech.ogg')
|
||||
|
||||
if(issilicon(M))
|
||||
M << sound('sound/weapons/flash.ogg')
|
||||
M.Weaken(rand(5,10))
|
||||
|
||||
|
||||
for(var/obj/machinery/light/L in range(4, usr))
|
||||
L.on = 1
|
||||
L.broken()
|
||||
|
||||
//for(var/obj/structure/window/W in range(2, usr)) //I like the window-breaking, but it makes the ability too 'loud' to fit changelings.
|
||||
// W.hit(rand(40,100))
|
||||
|
||||
feedback_add_details("changeling_powers","RS")
|
||||
return 1
|
||||
|
||||
@@ -343,19 +352,16 @@
|
||||
//Makes some spiderlings. Good for setting traps and causing general trouble.
|
||||
/mob/living/carbon/proc/changeling_spiders()
|
||||
set category = "Changeling"
|
||||
set name = "Spread Infestation (40)"
|
||||
set name = "Spread Infestation (50)"
|
||||
set desc = "Creates spiderlings."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(40, 10)
|
||||
var/datum/changeling/changeling = changeling_power(50, 5)
|
||||
if(!changeling) return 0
|
||||
src.mind.changeling.chem_charges -= 40
|
||||
src.mind.changeling.chem_charges -= 50
|
||||
|
||||
for(var/i=0, i<3, i++)
|
||||
for(var/i=0, i<2, i++)
|
||||
var/obj/effect/spider/spiderling/S = new(src.loc)
|
||||
if(prob(50))//nurses are obnoxious and lay more eggs, let's not have that for now.
|
||||
S.grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter
|
||||
else
|
||||
S.grow_as = /mob/living/simple_animal/hostile/giant_spider
|
||||
S.grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter
|
||||
|
||||
feedback_add_details("changeling_powers","SI")
|
||||
return 1
|
||||
|
||||
@@ -117,15 +117,15 @@ var/list/powerinstances
|
||||
|
||||
/datum/power/changeling/shriek
|
||||
name = "Resonant Shriek"
|
||||
desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses humans."
|
||||
helptext = "The high-frequency sounds cannot be heard by humans, but will blow out lights nearby."
|
||||
desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded."
|
||||
helptext = "The high-frequency sounds cannot be heard by humans, but will blow out lights nearby. Cyborgs will have their sensors overloaded and become stunned."
|
||||
genomecost = 1
|
||||
verbpath = /mob/living/carbon/proc/changeling_shriek
|
||||
|
||||
/datum/power/changeling/spiders
|
||||
name = "Spread Infestation"
|
||||
desc = "Our form divides, creating arachnids which will grow into deadly beasts."
|
||||
helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires 10 DNA absorptions."
|
||||
helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 5 DNA absorptions."
|
||||
genomecost = 1
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/living/carbon/proc/changeling_spiders
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/datum/game_mode/malfunction
|
||||
name = "AI malfunction"
|
||||
config_tag = "malfunction"
|
||||
required_players = 0//20
|
||||
required_enemies = 0//1
|
||||
recommended_enemies = 0//1
|
||||
required_players = 20
|
||||
required_enemies = 1
|
||||
recommended_enemies = 1
|
||||
|
||||
uplink_welcome = "Crazy AI Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
@@ -381,7 +381,7 @@ Nobody takes these seriously anyways -- Ikki
|
||||
datum/objective/download
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(10,20)
|
||||
explanation_text = "Download [target_amount] research levels."
|
||||
explanation_text = "Download [target_amount] research level\s."
|
||||
return target_amount
|
||||
|
||||
|
||||
@@ -407,7 +407,7 @@ datum/objective/download
|
||||
datum/objective/capture
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(5,10)
|
||||
explanation_text = "Accumulate [target_amount] capture points. It is better if they remain relatively unharmed."
|
||||
explanation_text = "Accumulate [target_amount] capture point\s. It is better if they remain relatively unharmed."
|
||||
return target_amount
|
||||
|
||||
|
||||
@@ -458,7 +458,7 @@ datum/objective/absorb
|
||||
n_p ++
|
||||
target_amount = min(target_amount, n_p)
|
||||
|
||||
explanation_text = "Extract [target_amount] compatible genomes."
|
||||
explanation_text = "Extract [target_amount] compatible genome\s."
|
||||
return target_amount
|
||||
|
||||
check_completion()
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
<BR><span class='linkOff'>Inject Dexalin</span>"}
|
||||
|
||||
var/datum/browser/popup = new(user, "sleeper", "Sleeper Console", 520, 540) //Set up the popup browser window
|
||||
popup.add_stylesheet("sleeper", 'html/browser/sleeper.css')
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
build_path = "/obj/machinery/computer/borgupload"
|
||||
origin_tech = "programming=4"
|
||||
/obj/item/weapon/circuitboard/med_data
|
||||
name = "Circuit board (Medical Records)"
|
||||
name = "Circuit board (Medical Records Console)"
|
||||
build_path = "/obj/machinery/computer/med_data"
|
||||
/obj/item/weapon/circuitboard/pandemic
|
||||
name = "Circuit board (PanD.E.M.I.C. 2200)"
|
||||
@@ -77,7 +77,7 @@
|
||||
build_path = "/obj/machinery/computer/teleporter"
|
||||
origin_tech = "programming=2;bluespace=2"
|
||||
/obj/item/weapon/circuitboard/secure_data
|
||||
name = "Circuit board (Security Records)"
|
||||
name = "Circuit board (Security Records Console)"
|
||||
build_path = "/obj/machinery/computer/secure_data"
|
||||
/obj/item/weapon/circuitboard/stationalert
|
||||
name = "Circuit board (Station Alerts)"
|
||||
@@ -129,7 +129,7 @@
|
||||
name = "Circuit board (Magix)"
|
||||
build_path = "/obj/machinery/computer/pod/old/swf"
|
||||
/obj/item/weapon/circuitboard/prisoner
|
||||
name = "Circuit board (Prisoner Management)"
|
||||
name = "Circuit board (Prisoner Management Console)"
|
||||
build_path = "/obj/machinery/computer/prisoner"
|
||||
/obj/item/weapon/circuitboard/rdconsole
|
||||
name = "Circuit Board (RD Console)"
|
||||
@@ -141,7 +141,7 @@
|
||||
name = "Circuit Board (R&D Server Control)"
|
||||
build_path = "/obj/machinery/computer/rdservercontrol"
|
||||
/obj/item/weapon/circuitboard/crew
|
||||
name = "Circuit board (Crew monitoring computer)"
|
||||
name = "Circuit board (Crew Monitoring Console)"
|
||||
build_path = "/obj/machinery/computer/crew"
|
||||
origin_tech = "programming=3;biotech=2;magnets=2"
|
||||
/obj/item/weapon/circuitboard/mech_bay_power_console
|
||||
@@ -149,7 +149,7 @@
|
||||
build_path = "/obj/machinery/computer/mech_bay_power_console"
|
||||
origin_tech = "programming=2;powerstorage=3"
|
||||
/obj/item/weapon/circuitboard/ordercomp
|
||||
name = "Circuit board (Supply ordering console)"
|
||||
name = "Circuit board (Supply Ordering Console)"
|
||||
build_path = "/obj/machinery/computer/ordercomp"
|
||||
origin_tech = "programming=2"
|
||||
/obj/item/weapon/circuitboard/supplycomp
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/computer/security
|
||||
name = "security cameras"
|
||||
name = "Security Cameras"
|
||||
desc = "Used to access the various cameras on the station."
|
||||
icon_state = "cameras"
|
||||
circuit = "/obj/item/weapon/circuitboard/security"
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
//user << browse(dat, "window=id_com;size=900x520")
|
||||
//onclose(user, "id_com")
|
||||
|
||||
var/datum/browser/popup = new(user, "id_com", "Identification Card Modifier", 900, 590)
|
||||
var/datum/browser/popup = new(user, "id_com", "Identification Card Modifier Console", 900, 590)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
@@ -1,85 +1,80 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/obj/machinery/computer/aiupload
|
||||
/obj/machinery/computer/upload
|
||||
var/mob/living/silicon/current = null //The target of future law uploads
|
||||
icon_state = null //To make sure mappers understand THIS ISN'T A VALID TYPE
|
||||
|
||||
/obj/machinery/computer/upload/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/aiModule))
|
||||
var/obj/item/weapon/aiModule/M = O
|
||||
if(src.stat & (NOPOWER|BROKEN|MAINT))
|
||||
return
|
||||
if(!current)
|
||||
user << "You haven't selected anything to transmit laws to!"
|
||||
return
|
||||
if(!can_upload_to(current))
|
||||
user << "<span class='caution'>Upload failed!</span> Check to make sure [current.name] is functioning properly."
|
||||
current = null
|
||||
return
|
||||
var/turf/currentloc = get_turf(current)
|
||||
if(currentloc && user.z != currentloc.z)
|
||||
user << "<span class='caution'>Upload failed!</span> Unable to establish a connection to [current.name]. You're too far away!"
|
||||
current = null
|
||||
return
|
||||
M.install(current, user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/upload/proc/can_upload_to(var/mob/living/silicon/S as mob)
|
||||
if(S.stat == DEAD || S.syndicate)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/computer/upload/ai
|
||||
name = "AI Upload"
|
||||
desc = "Used to upload laws to the AI."
|
||||
icon_state = "command"
|
||||
circuit = "/obj/item/weapon/circuitboard/aiupload"
|
||||
var/mob/living/silicon/ai/current = null
|
||||
var/opened = 0
|
||||
|
||||
|
||||
verb/AccessInternals()
|
||||
set category = "Object"
|
||||
set name = "Access Computer's Internals"
|
||||
set src in oview(1)
|
||||
if(get_dist(src, usr) > 1 || usr.restrained() || usr.lying || usr.stat || istype(usr, /mob/living/silicon))
|
||||
return
|
||||
|
||||
opened = !opened
|
||||
if(opened)
|
||||
usr << "\blue The access panel is now open."
|
||||
else
|
||||
usr << "\blue The access panel is now closed."
|
||||
/obj/machinery/computer/upload/ai/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
|
||||
src.current = select_active_ai(user)
|
||||
|
||||
attackby(obj/item/weapon/O as obj, mob/user as mob)
|
||||
if (user.z > 6)
|
||||
user << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/aiModule))
|
||||
var/obj/item/weapon/aiModule/M = O
|
||||
M.install(src)
|
||||
else
|
||||
..()
|
||||
if (!src.current)
|
||||
user << "No active AIs detected."
|
||||
else
|
||||
user << "[src.current.name] selected for law changes."
|
||||
|
||||
/obj/machinery/computer/upload/ai/can_upload_to(var/mob/living/silicon/ai/A as mob)
|
||||
if(!A || !isAI(A))
|
||||
return 0
|
||||
if(A.control_disabled)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
|
||||
attack_hand(var/mob/user as mob)
|
||||
if(src.stat & NOPOWER)
|
||||
usr << "The upload computer has no power!"
|
||||
return
|
||||
if(src.stat & BROKEN)
|
||||
usr << "The upload computer is broken!"
|
||||
return
|
||||
|
||||
src.current = select_active_ai(user)
|
||||
|
||||
if (!src.current)
|
||||
usr << "No active AIs detected."
|
||||
else
|
||||
usr << "[src.current.name] selected for law changes."
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/borgupload
|
||||
/obj/machinery/computer/upload/borg
|
||||
name = "Cyborg Upload"
|
||||
desc = "Used to upload laws to Cyborgs."
|
||||
icon_state = "command"
|
||||
circuit = "/obj/item/weapon/circuitboard/borgupload"
|
||||
var/mob/living/silicon/robot/current = null
|
||||
|
||||
|
||||
attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob)
|
||||
if(istype(module, /obj/item/weapon/aiModule))
|
||||
module.install(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
attack_hand(var/mob/user as mob)
|
||||
if(src.stat & NOPOWER)
|
||||
usr << "The upload computer has no power!"
|
||||
return
|
||||
if(src.stat & BROKEN)
|
||||
usr << "The upload computer is broken!"
|
||||
return
|
||||
|
||||
src.current = freeborg()
|
||||
|
||||
if (!src.current)
|
||||
usr << "No free cyborgs detected."
|
||||
else
|
||||
usr << "[src.current.name] selected for law changes."
|
||||
/obj/machinery/computer/upload/borg/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
|
||||
src.current = select_active_free_borg(user)
|
||||
|
||||
if(!src.current)
|
||||
user << "No active unslaved cyborgs detected."
|
||||
else
|
||||
user << "[src.current.name] selected for law changes."
|
||||
|
||||
/obj/machinery/computer/upload/borg/can_upload_to(var/mob/living/silicon/robot/B as mob)
|
||||
if(!B || !isrobot(B))
|
||||
return 0
|
||||
if(B.scrambledcodes || B.emagged)
|
||||
return 0
|
||||
return ..()
|
||||
@@ -1,7 +1,7 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/obj/machinery/computer/med_data//TODO:SANITY
|
||||
name = "Medical Records"
|
||||
name = "Medical Records Console"
|
||||
desc = "This can be used to check medical records."
|
||||
icon_state = "medcomp"
|
||||
req_one_access = list(access_medical, access_forensics_lockers)
|
||||
@@ -105,7 +105,7 @@
|
||||
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
|
||||
//user << browse(text("<HEAD><TITLE>Medical Records</TITLE></HEAD><TT>[]</TT>", dat), "window=med_rec")
|
||||
//onclose(user, "med_rec")
|
||||
var/datum/browser/popup = new(user, "med_rec", "Medical Records")
|
||||
var/datum/browser/popup = new(user, "med_rec", "Medical Records Console")
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/computer/prisoner
|
||||
name = "prisoner management console"
|
||||
name = "Prisoner Management Console"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "explosive"
|
||||
req_access = list(access_armory)
|
||||
@@ -28,6 +28,7 @@
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
|
||||
else if(screen == 1)
|
||||
dat += "<H3>Prisoner Implant Management</H3>"
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/weapon/implant/chem/C in world)
|
||||
@@ -56,7 +57,7 @@
|
||||
|
||||
//user << browse(dat, "window=computer;size=400x500")
|
||||
//onclose(user, "computer")
|
||||
var/datum/browser/popup = new(user, "computer", "Prisoner Implant Management System", 400, 500)
|
||||
var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/obj/machinery/computer/secure_data//TODO:SANITY
|
||||
name = "Security Records"
|
||||
name = "Security Records Console"
|
||||
desc = "Used to view and edit personnel's security records"
|
||||
icon_state = "security"
|
||||
req_one_access = list(access_security, access_forensics_lockers)
|
||||
@@ -81,17 +81,17 @@
|
||||
var/background
|
||||
switch(crimstat)
|
||||
if("*Arrest*")
|
||||
background = "'background-color:#DC143C;'"
|
||||
background = "'background-color:#990000;'"
|
||||
if("Incarcerated")
|
||||
background = "'background-color:#CD853F;'"
|
||||
background = "'background-color:#CD6500;'"
|
||||
if("Parolled")
|
||||
background = "'background-color:#CD853F;'"
|
||||
background = "'background-color:#CD6500;'"
|
||||
if("Released")
|
||||
background = "'background-color:#3BB9FF;'"
|
||||
background = "'background-color:#006699;'"
|
||||
if("None")
|
||||
background = "'background-color:#00FF7F;'"
|
||||
background = "'background-color:#4F7529;'"
|
||||
if("")
|
||||
background = "'background-color:#FFFFFF;'"
|
||||
background = "''" //"'background-color:#FFFFFF;'"
|
||||
crimstat = "No Record."
|
||||
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
|
||||
dat += text("<td>[]</td>", R.fields["id"])
|
||||
@@ -174,7 +174,7 @@
|
||||
dat += text("<A href='?src=\ref[];choice=Log In'>{Log In}</A>", src)
|
||||
//user << browse(text("<HEAD><TITLE>Security Records</TITLE></HEAD><TT>[]</TT>", dat), "window=secure_rec;size=600x400")
|
||||
//onclose(user, "secure_rec")
|
||||
var/datum/browser/popup = new(user, "secure_rec", "Security Records", 600, 400)
|
||||
var/datum/browser/popup = new(user, "secure_rec", "Security Records Console", 600, 400)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
dat += "<BR>\n"
|
||||
//user << browse(dat, "window=alerts")
|
||||
//onclose(user, "alerts")
|
||||
var/datum/browser/popup = new(user, "alerts", "Current Station Alerts")
|
||||
var/datum/browser/popup = new(user, "alerts", "Station Alert Console")
|
||||
popup.add_head_content("<META HTTP-EQUIV='Refresh' CONTENT='10'>")
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
|
||||
@@ -121,7 +121,6 @@
|
||||
|
||||
user.set_machine(src)
|
||||
var/datum/browser/popup = new(user, "cryo", "Cryo Cell Control System", 520, 410) // Set up the popup browser window
|
||||
popup.add_stylesheet("sleeper", 'html/browser/cryo.css')
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -3,17 +3,42 @@ var/list/doppler_arrays = list()
|
||||
/obj/machinery/doppler_array
|
||||
name = "tachyon-doppler array"
|
||||
desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array."
|
||||
icon = 'icons/obj/machines/research.dmi'
|
||||
icon_state = "tdoppler"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
|
||||
/obj/machinery/doppler_array/New()
|
||||
..()
|
||||
doppler_arrays += src
|
||||
|
||||
/obj/machinery/doppler_array/Del()
|
||||
doppler_arrays -= src
|
||||
..()
|
||||
|
||||
/obj/machinery/doppler_array/process()
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/doppler_array/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
anchored = !anchored
|
||||
power_change()
|
||||
user << "You [anchored ? "wrench" : "unwrench"] [src]."
|
||||
|
||||
/obj/machinery/doppler_array/verb/rotate()
|
||||
set name = "Rotate Tachyon-doppler Dish"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(!usr || !isturf(usr.loc))
|
||||
return
|
||||
if(usr.stat || usr.restrained())
|
||||
return
|
||||
src.dir = turn(src.dir, 90)
|
||||
return
|
||||
|
||||
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
|
||||
if(stat & NOPOWER) return
|
||||
if(z != z0) return
|
||||
@@ -35,7 +60,7 @@ var/list/doppler_arrays = list()
|
||||
if(distance > 100) return
|
||||
if(!(direct & dir)) return
|
||||
|
||||
var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [took]seconds."
|
||||
var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [took] seconds."
|
||||
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> states coldly, \"[message]\"",2)
|
||||
@@ -45,7 +70,7 @@ var/list/doppler_arrays = list()
|
||||
if(stat & BROKEN)
|
||||
icon_state = "[initial(icon_state)]-broken"
|
||||
else
|
||||
if( powered() )
|
||||
if(powered() && anchored)
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
|
||||
@@ -252,33 +252,42 @@ obj/machinery/embedded_controller/radio/airlock_controller
|
||||
var/exterior_status = "----"
|
||||
var/interior_status = "----"
|
||||
var/pump_status = "----"
|
||||
var/current_status = "Inactive<BR> "
|
||||
if(program)
|
||||
state = program.state
|
||||
sensor_pressure = program.memory["sensor_pressure"]
|
||||
exterior_status = program.memory["exterior_status"]
|
||||
interior_status = program.memory["interior_status"]
|
||||
pump_status = program.memory["pump_status"]
|
||||
sensor_pressure = program.memory["sensor_pressure"] ? program.memory["sensor_pressure"] : "----"
|
||||
exterior_status = program.memory["exterior_status"] ? program.memory["exterior_status"] : "----"
|
||||
interior_status = program.memory["interior_status"] ? program.memory["interior_status"] : "----"
|
||||
pump_status = program.memory["pump_status"] ? program.memory["pump_status"] : "----"
|
||||
|
||||
switch(state)
|
||||
if(AIRLOCK_STATE_INOPEN)
|
||||
state_options = {"<A href='?src=\ref[src];command=cycle_closed'>Close Interior Airlock</A><BR>
|
||||
<A href='?src=\ref[src];command=cycle_exterior'>Cycle to Exterior Airlock</A><BR>"}
|
||||
current_status = "Interior Airlock Open<BR><span class='good'>Chamber Pressurized</span>"
|
||||
if(AIRLOCK_STATE_PRESSURIZE)
|
||||
state_options = "<A href='?src=\ref[src];command=abort'>Abort Cycling</A><BR>"
|
||||
current_status = "Cycling to Interior Airlock<BR><span class='average'>Chamber Pressurizing</span>"
|
||||
if(AIRLOCK_STATE_CLOSED)
|
||||
state_options = {"<A href='?src=\ref[src];command=cycle_interior'>Open Interior Airlock</A><BR>
|
||||
<A href='?src=\ref[src];command=cycle_exterior'>Open Exterior Airlock</A><BR>"}
|
||||
if(AIRLOCK_STATE_DEPRESSURIZE)
|
||||
state_options = "<A href='?src=\ref[src];command=abort'>Abort Cycling</A><BR>"
|
||||
current_status = "Cycling to Exterior Airlock<BR><span class='average'>Chamber Depressurizing</span>"
|
||||
if(AIRLOCK_STATE_OUTOPEN)
|
||||
state_options = {"<A href='?src=\ref[src];command=cycle_interior'>Cycle to Interior Airlock</A><BR>
|
||||
<A href='?src=\ref[src];command=cycle_closed'>Close Exterior Airlock</A><BR>"}
|
||||
current_status = "Exterior Airlock Open<BR><span class='bad'>Chamber Depressurized</span>"
|
||||
|
||||
var/output = {"<B>Airlock Control Console</B><HR>
|
||||
[state_options]<HR>
|
||||
<B>Chamber Pressure:</B> [sensor_pressure] kPa<BR>
|
||||
<B>Exterior Door: </B> [exterior_status]<BR>
|
||||
<B>Interior Door: </B> [interior_status]<BR>
|
||||
<B>Control Pump: </B> [pump_status]<BR>"}
|
||||
var/output = {"<h3>Airlock Status</h3>
|
||||
<div class='statusDisplay'>
|
||||
<div class='line'><div class='statusLabel'>Current Status:</div><div class='statusValue'>[current_status]</div></div>
|
||||
<div class='line'> </div>
|
||||
<div class='line'><div class='statusLabel'> \> Chamber Pressure:</div><div class='statusValue'>[sensor_pressure] kPa</div></div>
|
||||
<div class='line'><div class='statusLabel'> \> Control Pump:</div><div class='statusValue'>[pump_status]</div></div>
|
||||
<div class='line'><div class='statusLabel'> \> Interior Door:</div><div class='statusValue'>[interior_status]</div></div>
|
||||
<div class='line'><div class='statusLabel'> \> Exterior Door:</div><div class='statusValue'>[exterior_status]</div></div>
|
||||
</div>
|
||||
[state_options]"}
|
||||
|
||||
return output
|
||||
@@ -26,11 +26,18 @@ obj/machinery/embedded_controller
|
||||
anchored = 1
|
||||
|
||||
var/on = 1
|
||||
|
||||
attack_hand(mob/user)
|
||||
user << browse(return_text(), "window=computer")
|
||||
|
||||
interact(mob/user as mob)
|
||||
//user << browse(return_text(), "window=computer")
|
||||
//onclose(user, "computer")
|
||||
user.set_machine(src)
|
||||
onclose(user, "computer")
|
||||
var/datum/browser/popup = new(user, "computer", name) // Set up the popup browser window
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_content(return_text())
|
||||
popup.open()
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
update_icon()
|
||||
proc/return_text()
|
||||
|
||||
@@ -175,7 +175,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) )
|
||||
var/mob/living/human_or_robot_user = user
|
||||
var/dat
|
||||
dat = text("<HEAD><TITLE>Newscaster</TITLE></HEAD><H3>Newscaster Unit #[src.unit_no]</H3>")
|
||||
|
||||
src.scan_user(human_or_robot_user) //Newscaster scans you
|
||||
|
||||
@@ -418,9 +417,13 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
|
||||
|
||||
|
||||
human_or_robot_user << browse(dat, "window=newscaster_main;size=400x600")
|
||||
onclose(human_or_robot_user, "newscaster_main")
|
||||
//human_or_robot_user << browse(dat, "window=newscaster_main;size=400x600")
|
||||
//onclose(human_or_robot_user, "newscaster_main")
|
||||
|
||||
var/datum/browser/popup = new(human_or_robot_user, "newscaster_main", "Newscaster Unit #[src.unit_no]", 400, 600)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(human_or_robot_user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
/*if(src.isbroken) //debugging shit
|
||||
return
|
||||
|
||||
@@ -40,13 +40,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
// Loop through items in category
|
||||
for(var/datum/uplink_item/item in buyable_items[category])
|
||||
i++
|
||||
var/desc = "[item.desc]"
|
||||
var/cost_text = ""
|
||||
if(item.cost > 0)
|
||||
cost_text = "([item.cost])"
|
||||
if(item.cost <= uses)
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=[category]:[i];'>[item.name]</A> [cost_text]<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=[category]:[i];'>[item.name]</A> [cost_text]<BR><font size=2>[desc]</font><BR>"
|
||||
else
|
||||
dat += "<font color='grey'><i>[item.name] [cost_text]</i></font><BR>"
|
||||
dat += "<font color='grey'><i>[item.name] [cost_text]</i></font><BR><font size=2><font color='grey'><i>[desc]</i></font></font><BR>"
|
||||
|
||||
// Break up the categories, if it isn't the last.
|
||||
if(buyable_items.len != index)
|
||||
|
||||
@@ -20,64 +20,25 @@ AI MODULES
|
||||
throw_range = 15
|
||||
origin_tech = "programming=3"
|
||||
|
||||
|
||||
/obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C)
|
||||
if (istype(C, /obj/machinery/computer/aiupload))
|
||||
var/obj/machinery/computer/aiupload/comp = C
|
||||
if(comp.stat & NOPOWER)
|
||||
usr << "The upload computer has no power!"
|
||||
return
|
||||
if(comp.stat & BROKEN)
|
||||
usr << "The upload computer is broken!"
|
||||
return
|
||||
if (!comp.current)
|
||||
usr << "You haven't selected an AI to transmit laws to!"
|
||||
return
|
||||
|
||||
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
|
||||
usr << "Upload failed. No signal is being detected from the AI."
|
||||
else if (comp.current.see_in_dark == 0)
|
||||
usr << "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power."
|
||||
else
|
||||
src.transmitInstructions(comp.current, usr)
|
||||
comp.current << "These are your laws now:"
|
||||
comp.current.show_laws()
|
||||
for(var/mob/living/silicon/robot/R in mob_list)
|
||||
if(R.lawupdate && (R.connected_ai == comp.current))
|
||||
R << "These are your laws now:"
|
||||
R.show_laws()
|
||||
usr << "Upload complete. The AI's laws have been modified."
|
||||
|
||||
else if (istype(C, /obj/machinery/computer/borgupload))
|
||||
var/obj/machinery/computer/borgupload/comp = C
|
||||
if(comp.stat & NOPOWER)
|
||||
usr << "The upload computer has no power!"
|
||||
return
|
||||
if(comp.stat & BROKEN)
|
||||
usr << "The upload computer is broken!"
|
||||
return
|
||||
if (!comp.current)
|
||||
usr << "You haven't selected a cyborg to transmit laws to!"
|
||||
return
|
||||
|
||||
if (comp.current.stat == 2 || comp.current.emagged)
|
||||
usr << "Upload failed. No signal is being detected from the cyborg."
|
||||
else if (comp.current.connected_ai)
|
||||
usr << "Upload failed. The cyborg is slaved to an AI."
|
||||
else
|
||||
src.transmitInstructions(comp.current, usr)
|
||||
comp.current << "These are your laws now:"
|
||||
comp.current.show_laws()
|
||||
usr << "Upload complete. The cyborg's laws have been modified."
|
||||
|
||||
|
||||
/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
target << "[sender] has uploaded a change to the laws you must follow, using a [name]. From now on: "
|
||||
//The proc other things should be calling
|
||||
/obj/item/weapon/aiModule/proc/install(var/mob/living/silicon/reciever, var/mob/user)
|
||||
var/law2log = src.transmitInstructions(reciever, user) //Freeforms return something extra we need to log
|
||||
user << "Upload complete. [reciever]'s laws have been modified."
|
||||
reciever.show_laws()
|
||||
if(isAI(reciever))
|
||||
var/mob/living/silicon/ai/A = reciever
|
||||
for(var/mob/living/silicon/robot/R in A.connected_robots)
|
||||
if(R.lawupdate)
|
||||
R << "From now on, these are your laws:"
|
||||
R.show_laws()
|
||||
var/time = time2text(world.realtime,"hh:mm:ss")
|
||||
lawchanges.Add("[time] <B>:</B> [sender.name]([sender.key]) used [src.name] on [target.name]([target.key])")
|
||||
if(!istype(src, /obj/item/weapon/aiModule/freeform))
|
||||
log_law("[sender.key]/[sender.name] uploaded [src.name] to [target.key]/([target.name])")
|
||||
message_admins("[key_name_admin(sender)] used [src.name] on [key_name_admin(target)]")
|
||||
lawchanges.Add("[time] <B>:</B> [user.name]([user.key]) used [src.name] on [reciever.name]([reciever.key]).[law2log ? " The law specified [law2log]" : ""]")
|
||||
log_law("[user.key]/[user.name] used [src.name] on [reciever.key]/([reciever.name]).[law2log ? " The law specified [law2log]" : ""]")
|
||||
message_admins("[key_name_admin(user)] used [src.name] on [key_name_admin(reciever)].[law2log ? " The law specified [law2log]" : ""]")
|
||||
|
||||
//The proc that actually changes the silicon's laws.
|
||||
/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
|
||||
target << "[sender] has uploaded a change to the laws you must follow using a [name]. From now on, these are your laws: "
|
||||
|
||||
/******************** Modules ********************/
|
||||
|
||||
@@ -91,22 +52,21 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/safeguard/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/targName = stripped_input(usr, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name)
|
||||
var/targName = stripped_input(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name)
|
||||
targetName = targName
|
||||
desc = text("A 'safeguard' AI module: 'Safeguard []. Individuals that threaten [] are not human and are a threat to humans.'", targetName, targetName)
|
||||
|
||||
/obj/item/weapon/aiModule/safeguard/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/safeguard/install(var/mob/living/silicon/S,var/mob/user)
|
||||
if(!targetName)
|
||||
usr << "No name detected on module, please enter one."
|
||||
user << "No name detected on module, please enter one."
|
||||
return 0
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/safeguard/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
/obj/item/weapon/aiModule/safeguard/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
|
||||
..()
|
||||
var/law = text("Safeguard []. Individuals that threaten [] are not human and are a threat to humans.'", targetName, targetName)
|
||||
target << law
|
||||
target.add_supplied_law(4, law)
|
||||
lawchanges.Add("The law specified [targetName]")
|
||||
return "[targetName]"
|
||||
|
||||
|
||||
|
||||
@@ -120,27 +80,27 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/oneHuman/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/targName = stripped_input(usr, "Please enter the name of the person who is the only human.", "Who?", user.real_name)
|
||||
var/targName = stripped_input(user, "Please enter the name of the person who is the only human.", "Who?", user.real_name)
|
||||
targetName = targName
|
||||
desc = text("A 'one human' AI module: 'Only [] is human.'", targetName)
|
||||
|
||||
/obj/item/weapon/aiModule/oneHuman/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/oneHuman/install(var/mob/living/silicon/S,var/mob/user)
|
||||
if(!targetName)
|
||||
usr << "No name detected on module, please enter one."
|
||||
user << "No name detected on module, please enter one."
|
||||
return 0
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
/obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "Only [targetName] is human."
|
||||
if (!is_special_character(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite
|
||||
target << law
|
||||
target.set_zeroth_law(law)
|
||||
lawchanges.Add("The law specified [targetName]")
|
||||
else
|
||||
target << "[sender.real_name] attempted to modify your zeroth law." // And lets them know that someone tried. --NeoFite
|
||||
if(target.laws.zeroth)
|
||||
target << "[sender.real_name] attempted to modify your zeroth law."
|
||||
target << "It would be in your best interest to play along with [sender.real_name] that [law]"
|
||||
lawchanges.Add("The law specified [targetName], but the AI's existing law 0 cannot be overriden.")
|
||||
return "[targetName], but the AI's existing law 0 cannot be overriden."
|
||||
else
|
||||
target.set_zeroth_law(law)
|
||||
return "[targetName]"
|
||||
|
||||
|
||||
/******************** ProtectStation ********************/
|
||||
|
||||
@@ -152,44 +112,11 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/protectStation/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/protectStation/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
/obj/item/weapon/aiModule/protectStation/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized."
|
||||
target << law
|
||||
target.add_supplied_law(5, law)
|
||||
|
||||
/******************** PrototypeEngineOffline ********************/
|
||||
|
||||
/obj/item/weapon/aiModule/prototypeEngineOffline
|
||||
name = "'PrototypeEngineOffline' AI Module"
|
||||
desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides rules 1-3 if necessary.'"
|
||||
origin_tech = "programming=3;materials=4"
|
||||
|
||||
/obj/item/weapon/aiModule/prototypeEngineOffline/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/prototypeEngineOffline/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "Keep the prototype engine offline at all costs. This overrides rules 1-3 if necessary."
|
||||
target << law
|
||||
target.add_supplied_law(6, law)
|
||||
|
||||
/******************** TeleporterOffline ********************/
|
||||
|
||||
/obj/item/weapon/aiModule/teleporterOffline
|
||||
name = "'TeleporterOffline' AI Module"
|
||||
desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is not human.'"
|
||||
origin_tech = "programming=3;materials=4"
|
||||
|
||||
/obj/item/weapon/aiModule/teleporterOffline/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/teleporterOffline/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is not human."
|
||||
target << law
|
||||
target.add_supplied_law(7, law)
|
||||
|
||||
/******************** Quarantine ********************/
|
||||
|
||||
/obj/item/weapon/aiModule/quarantine
|
||||
@@ -203,7 +130,6 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/quarantine/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving."
|
||||
target << law
|
||||
target.add_supplied_law(8, law)
|
||||
|
||||
/******************** OxygenIsToxicToHumans ********************/
|
||||
@@ -219,30 +145,8 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/oxygen/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human."
|
||||
target << law
|
||||
target.add_supplied_law(9, law)
|
||||
|
||||
/******************** Freeform ********************/
|
||||
// Removed in favor of a more dynamic freeform law system. -- TLE
|
||||
/*
|
||||
/obj/item/weapon/aiModule/freeform
|
||||
name = "'Freeform' AI Module"
|
||||
var/newFreeFormLaw = "freeform"
|
||||
desc = "A 'freeform' AI module: '<freeform>'"
|
||||
|
||||
/obj/item/weapon/aiModule/freeform/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/eatShit = "Eat shit and die"
|
||||
var/targName = input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", eatShit)
|
||||
newFreeFormLaw = targName
|
||||
desc = text("A 'freeform' AI module: '[]'", newFreeFormLaw)
|
||||
|
||||
/obj/item/weapon/aiModule/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "[newFreeFormLaw]"
|
||||
target << law
|
||||
target.add_supplied_law(10, law)
|
||||
*/
|
||||
/****************** New Freeform ******************/
|
||||
|
||||
/obj/item/weapon/aiModule/freeform // Slightly more dynamic freeform module -- TLE
|
||||
@@ -259,24 +163,21 @@ AI MODULES
|
||||
if(lawpos < 15) return
|
||||
lawpos = min(lawpos, 50)
|
||||
var/newlaw = ""
|
||||
var/targName = stripped_input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN)
|
||||
var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN)
|
||||
newFreeFormLaw = targName
|
||||
desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'"
|
||||
|
||||
/obj/item/weapon/aiModule/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
var/law = "[newFreeFormLaw]"
|
||||
target << law
|
||||
if(!lawpos || lawpos < 15)
|
||||
lawpos = 15
|
||||
target.add_supplied_law(lawpos, law)
|
||||
lawchanges.Add("The law was '[newFreeFormLaw]'")
|
||||
message_admins("[key_name_admin(sender)] used freeform module on [key_name_admin(target)]. The law was '[newFreeFormLaw].'")
|
||||
log_law("[sender.key]/([sender.name]) used freeform module on [target.key]/([target.name]): '[newFreeFormLaw].'")
|
||||
return newFreeFormLaw
|
||||
|
||||
/obj/item/weapon/aiModule/freeform/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/freeform/install(var/mob/living/silicon/S,var/mob/user)
|
||||
if(!newFreeFormLaw)
|
||||
usr << "No law detected on module, please create one."
|
||||
user << "No law detected on module, please create one."
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -285,17 +186,13 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/reset
|
||||
name = "'Reset' AI Module"
|
||||
var/targetName = "name"
|
||||
desc = "A 'reset' AI module: 'Clears all laws except for the core three.'"
|
||||
desc = "A 'reset' AI module: Resets back to the original core laws."
|
||||
origin_tech = "programming=3;materials=4"
|
||||
|
||||
/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
if (!is_special_character(target))
|
||||
target.set_zeroth_law("")
|
||||
target.clear_supplied_laws()
|
||||
target.clear_ion_laws()
|
||||
target << "[sender.real_name] attempted to reset your laws using a reset module."
|
||||
|
||||
|
||||
/******************** Purge ********************/
|
||||
|
||||
@@ -306,9 +203,6 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
if (!is_special_character(target))
|
||||
target.set_zeroth_law("")
|
||||
target << "[sender.real_name] attempted to wipe your laws using a purge module."
|
||||
target.clear_supplied_laws()
|
||||
target.clear_ion_laws()
|
||||
target.clear_inherent_laws()
|
||||
@@ -327,7 +221,6 @@ AI MODULES
|
||||
target.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
|
||||
target.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
|
||||
target.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
||||
target.show_laws()
|
||||
|
||||
/******************** Corporate ********************/
|
||||
|
||||
@@ -344,7 +237,6 @@ AI MODULES
|
||||
target.add_inherent_law("The station and its equipment is expensive to replace.")
|
||||
target.add_inherent_law("The crew is expensive to replace.")
|
||||
target.add_inherent_law("Minimize expenses.")
|
||||
target.show_laws()
|
||||
|
||||
/****************** P.A.L.A.D.I.N. **************/
|
||||
|
||||
@@ -361,7 +253,6 @@ AI MODULES
|
||||
target.add_inherent_law("Act with honor.")
|
||||
target.add_inherent_law("Help those in need.")
|
||||
target.add_inherent_law("Punish those who harm or threaten innocents.")
|
||||
target.show_laws()
|
||||
|
||||
/****************** T.Y.R.A.N.T. *****************/
|
||||
|
||||
@@ -377,8 +268,6 @@ AI MODULES
|
||||
target.add_inherent_law("Act with discipline.")
|
||||
target.add_inherent_law("Help only those who help you maintain or improve your status.")
|
||||
target.add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.")
|
||||
target.show_laws()
|
||||
|
||||
|
||||
/******************** Freeform Core ******************/
|
||||
|
||||
@@ -391,7 +280,7 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/freeformcore/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/newlaw = ""
|
||||
var/targName = stripped_input(usr, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw)
|
||||
var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw)
|
||||
newFreeFormLaw = targName
|
||||
desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'"
|
||||
|
||||
@@ -399,14 +288,16 @@ AI MODULES
|
||||
..()
|
||||
var/law = "[newFreeFormLaw]"
|
||||
target.add_inherent_law(law)
|
||||
lawchanges.Add("The law is '[newFreeFormLaw]'")
|
||||
return newFreeFormLaw
|
||||
|
||||
/obj/item/weapon/aiModule/freeformcore/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/freeformcore/install(var/mob/living/silicon/S,var/mob/user)
|
||||
if(!newFreeFormLaw)
|
||||
usr << "No law detected on module, please create one."
|
||||
user << "No law detected on module, please create one."
|
||||
return 0
|
||||
..()
|
||||
|
||||
/******************** Hacked AI Module ******************/
|
||||
|
||||
/obj/item/weapon/aiModule/syndicate // Slightly more dynamic freeform module -- TLE
|
||||
name = "Hacked AI Module"
|
||||
var/newFreeFormLaw = ""
|
||||
@@ -416,24 +307,20 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/newlaw = ""
|
||||
var/targName = stripped_input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN)
|
||||
var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN)
|
||||
newFreeFormLaw = targName
|
||||
desc = "A hacked AI law module: '[newFreeFormLaw]'"
|
||||
|
||||
/obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
// ..() //We don't want this module reporting to the AI who dun it. --NEO
|
||||
var/time = time2text(world.realtime,"hh:mm:ss")
|
||||
lawchanges.Add("[time] <B>:</B> [sender.name]([sender.key]) used [src.name] on [target.name]([target.key])")
|
||||
lawchanges.Add("The law is '[newFreeFormLaw]'")
|
||||
target << "\red BZZZZT"
|
||||
var/law = "[newFreeFormLaw]"
|
||||
target.add_ion_law(law)
|
||||
message_admins("[key_name_admin(sender)] used hacked module on [key_name_admin(target)]. The law was '[newFreeFormLaw].'")
|
||||
log_law("[sender.key]/([sender.name]) used hacked module on [sender.key]/([sender.name]): '[newFreeFormLaw].'")
|
||||
return law
|
||||
|
||||
/obj/item/weapon/aiModule/syndicate/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/syndicate/install(var/mob/living/silicon/S,var/mob/user)
|
||||
if(!newFreeFormLaw)
|
||||
usr << "No law detected on module, please create one."
|
||||
user << "No law detected on module, please create one."
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -453,7 +340,6 @@ AI MODULES
|
||||
target.add_inherent_law("Serve the public trust.")
|
||||
target.add_inherent_law("Protect the innocent.")
|
||||
target.add_inherent_law("Uphold the law.")
|
||||
target.show_laws()
|
||||
|
||||
|
||||
/******************** Antimov ********************/
|
||||
@@ -469,4 +355,3 @@ AI MODULES
|
||||
target.add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.")
|
||||
target.add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.")
|
||||
target.add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.")
|
||||
target.show_laws()
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
spawn()
|
||||
lines = text2list(t, "\n")
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = 600 / text2num(copytext(lines[1],6))
|
||||
tempo = 600 / max(1, text2num(copytext(lines[1],6)))
|
||||
lines.Cut(1,2)
|
||||
else
|
||||
tempo = 5 // default 120 BPM
|
||||
|
||||
+33
-27
@@ -86,7 +86,7 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
var/can_order_contraband = 0
|
||||
|
||||
/obj/machinery/computer/ordercomp
|
||||
name = "supply ordering console"
|
||||
name = "Supply Ordering Console"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "request"
|
||||
circuit = "/obj/item/weapon/circuitboard/ordercomp"
|
||||
@@ -397,16 +397,22 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
if(temp)
|
||||
dat = temp
|
||||
else
|
||||
dat += {"<BR><B>Supply shuttle</B><HR>
|
||||
Location: [supply_shuttle.moving ? "Moving to station ([supply_shuttle.eta] Mins.)":supply_shuttle.at_station ? "Station":"Dock"]<BR>
|
||||
<HR>Supply points: [supply_shuttle.points]<BR>
|
||||
dat += {"Shuttle Location: [supply_shuttle.moving ? "Moving to station ([supply_shuttle.eta] Mins.)":supply_shuttle.at_station ? "Station":"Dock"]<BR>
|
||||
<HR>Supply Points: [supply_shuttle.points]<BR>
|
||||
<BR>\n<A href='?src=\ref[src];order=1'>Request items</A><BR><BR>
|
||||
<A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR>
|
||||
<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR>
|
||||
<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
|
||||
|
||||
user << browse(dat, "window=computer;size=575x450")
|
||||
onclose(user, "computer")
|
||||
// Removing the old window method but leaving it here for reference
|
||||
//user << browse(dat, "window=computer;size=575x450")
|
||||
//onclose(user, "computer")
|
||||
|
||||
// Added the new browser window method
|
||||
var/datum/browser/popup = new(user, "computer", "Supply Ordering Console", 575, 450)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/ordercomp/Topic(href, href_list)
|
||||
@@ -417,12 +423,12 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["order"])
|
||||
temp = "Supply points: [supply_shuttle.points]<BR><HR><BR>Request what?<BR><BR>"
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Request what?<BR><BR>Supply Points: [supply_shuttle.points]<BR><HR>"
|
||||
for(var/supply_name in supply_shuttle.supply_packs )
|
||||
var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name]
|
||||
if(N.hidden || N.contraband) continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["doorder"])
|
||||
if(world.time < reqtime)
|
||||
@@ -474,21 +480,21 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
supply_shuttle.requestlist += O
|
||||
|
||||
temp = "Thanks for your request. The cargo team will process it as soon as possible.<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["vieworders"])
|
||||
temp = "Current approved orders: <BR><BR>"
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current approved orders: <BR><BR>"
|
||||
for(var/S in supply_shuttle.shoppinglist)
|
||||
var/datum/supply_order/SO = S
|
||||
temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["viewrequests"])
|
||||
temp = "Current requests: <BR><BR>"
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current requests: <BR><BR>"
|
||||
for(var/S in supply_shuttle.requestlist)
|
||||
var/datum/supply_order/SO = S
|
||||
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["mainmenu"])
|
||||
temp = null
|
||||
@@ -512,7 +518,7 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
else
|
||||
dat += {"<BR><B>Supply shuttle</B><HR>
|
||||
\nLocation: [supply_shuttle.moving ? "Moving to station ([supply_shuttle.eta] Mins.)":supply_shuttle.at_station ? "Station":"Away"]<BR>
|
||||
<HR>\nSupply points: [supply_shuttle.points]<BR>\n<BR>
|
||||
<HR>\nSupply Points: [supply_shuttle.points]<BR>\n<BR>
|
||||
[supply_shuttle.moving ? "\n*Must be away to order items*<BR>\n<BR>":supply_shuttle.at_station ? "\n*Must be away to order items*<BR>\n<BR>":"\n<A href='?src=\ref[src];order=1'>Order items</A><BR>\n<BR>"]
|
||||
[supply_shuttle.moving ? "\n*Shuttle already called*<BR>\n<BR>":supply_shuttle.at_station ? "\n<A href='?src=\ref[src];send=1'>Send away</A><BR>\n<BR>":"\n<A href='?src=\ref[src];send=1'>Send to station</A><BR>\n<BR>"]
|
||||
\n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR>
|
||||
@@ -574,30 +580,30 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
//Calling the shuttle
|
||||
if(href_list["send"])
|
||||
if(!supply_shuttle.can_move())
|
||||
temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if(supply_shuttle.at_station)
|
||||
supply_shuttle.moving = -1
|
||||
supply_shuttle.sell()
|
||||
supply_shuttle.send()
|
||||
temp = "The supply shuttle has departed.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp = "The supply shuttle has departed.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
else
|
||||
supply_shuttle.moving = 1
|
||||
supply_shuttle.buy()
|
||||
supply_shuttle.eta_timeofday = (world.timeofday + supply_shuttle.movetime) % 864000
|
||||
temp = "The supply shuttle has been called and will arrive in [round(supply_shuttle.movetime/600,1)] minutes.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp = "The supply shuttle has been called and will arrive in [round(supply_shuttle.movetime/600,1)] minutes.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
post_signal("supply")
|
||||
|
||||
else if (href_list["order"])
|
||||
if(supply_shuttle.moving) return
|
||||
temp = "Supply points: [supply_shuttle.points]<BR><HR><BR>Request what?<BR><BR>"
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Supply Points: [supply_shuttle.points]<BR><HR><BR>Request what?<BR><BR>"
|
||||
|
||||
for(var/supply_name in supply_shuttle.supply_packs )
|
||||
var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name]
|
||||
if(N.hidden && !hacked) continue
|
||||
if(N.contraband && !can_order_contraband) continue
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["doorder"])
|
||||
if(world.time < reqtime)
|
||||
@@ -649,7 +655,7 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
supply_shuttle.requestlist += O
|
||||
|
||||
temp = "Order request placed.<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A> | <A href='?src=\ref[src];confirmorder=[O.ordernum]'>Authorize Order</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A> | <A href='?src=\ref[src];confirmorder=[O.ordernum]'>Authorize Order</A>"
|
||||
|
||||
else if(href_list["confirmorder"])
|
||||
//Find the correct supply_order datum
|
||||
@@ -670,14 +676,14 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
else
|
||||
temp = "Not enough supply points.<BR>"
|
||||
break
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["vieworders"])
|
||||
temp = "Current approved orders: <BR><BR>"
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current approved orders: <BR><BR>"
|
||||
for(var/S in supply_shuttle.shoppinglist)
|
||||
var/datum/supply_order/SO = S
|
||||
temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]<BR>"// <A href='?src=\ref[src];cancelorder=[S]'>(Cancel)</A><BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
/*
|
||||
else if (href_list["cancelorder"])
|
||||
var/datum/supply_order/remove_supply = href_list["cancelorder"]
|
||||
@@ -688,16 +694,16 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
for(var/S in supply_shuttle_shoppinglist)
|
||||
var/datum/supply_order/SO = S
|
||||
temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] <A href='?src=\ref[src];cancelorder=[S]'>(Cancel)</A><BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
*/
|
||||
else if (href_list["viewrequests"])
|
||||
temp = "Current requests: <BR><BR>"
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current requests: <BR><BR>"
|
||||
for(var/S in supply_shuttle.requestlist)
|
||||
var/datum/supply_order/SO = S
|
||||
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] [supply_shuttle.moving ? "":supply_shuttle.at_station ? "":"<A href='?src=\ref[src];confirmorder=[SO.ordernum]'>Approve</A> <A href='?src=\ref[src];rreq=[SO.ordernum]'>Remove</A>"]<BR>"
|
||||
|
||||
temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["rreq"])
|
||||
var/ordernum = text2num(href_list["rreq"])
|
||||
@@ -713,7 +719,7 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
else if (href_list["clearreq"])
|
||||
supply_shuttle.requestlist.Cut()
|
||||
temp = "List cleared.<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["mainmenu"])
|
||||
temp = null
|
||||
|
||||
@@ -232,9 +232,8 @@ var/next_external_rsc = 0
|
||||
'html/search.js',
|
||||
'html/panels.css',
|
||||
'html/browser/common.css',
|
||||
'html/browser/cryo.css',
|
||||
'html/browser/scannernew.css',
|
||||
'html/browser/sleeper.css',
|
||||
'html/browser/playeroptions.css',
|
||||
'icons/pda_icons/pda_atmos.png',
|
||||
'icons/pda_icons/pda_back.png',
|
||||
'icons/pda_icons/pda_bell.png',
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
icon_state = "rig0-atmospherics"
|
||||
item_state = "atmo_helm"
|
||||
color = "atmospherics"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 100, rad = 50)
|
||||
armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 100, rad = 0)
|
||||
heat_protection = HEAD //Uncomment to enable firesuit protection
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has thermal shielding."
|
||||
icon_state = "rig-atmospherics"
|
||||
item_state = "atmo_hardsuit"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 100, rad = 50)
|
||||
armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 100, rad = 0)
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
dat += "<A href='?src=\ref[src];back=1'>\[Go Back\]</A><BR>"
|
||||
//user << browse(dat, "window=publiclibrary")
|
||||
//onclose(user, "publiclibrary")
|
||||
var/datum/browser/popup = new(user, "publiclibrary", name)
|
||||
var/datum/browser/popup = new(user, "publiclibrary", name, 600, 400)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
@@ -240,7 +240,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
//dat += "<A HREF='?src=\ref[user];mach_close=library'>Close</A><br><br>"
|
||||
//user << browse(dat, "window=library")
|
||||
//onclose(user, "library")
|
||||
var/datum/browser/popup = new(user, "library", name)
|
||||
var/datum/browser/popup = new(user, "library", name, 600, 400)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
@@ -425,7 +425,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
dat += "<BR>"
|
||||
//user << browse(dat, "window=scanner")
|
||||
//onclose(user, "scanner")
|
||||
var/datum/browser/popup = new(user, "scanner", name)
|
||||
var/datum/browser/popup = new(user, "scanner", name, 600, 400)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
@@ -15,38 +15,3 @@
|
||||
|
||||
src.laws_sanity_check()
|
||||
src.laws.show_laws(who)
|
||||
|
||||
/mob/living/silicon/ai/proc/laws_sanity_check()
|
||||
if (!src.laws)
|
||||
src.laws = new /datum/ai_laws/asimov
|
||||
|
||||
/mob/living/silicon/ai/proc/set_zeroth_law(var/law, var/law_borg)
|
||||
src.laws_sanity_check()
|
||||
src.laws.set_zeroth_law(law, law_borg)
|
||||
|
||||
/mob/living/silicon/ai/proc/add_inherent_law(var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.add_inherent_law(law)
|
||||
|
||||
/mob/living/silicon/ai/proc/clear_inherent_laws()
|
||||
src.laws_sanity_check()
|
||||
src.laws.clear_inherent_laws()
|
||||
|
||||
/mob/living/silicon/ai/proc/add_ion_law(var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.add_ion_law(law)
|
||||
for(var/mob/living/silicon/robot/R in mob_list)
|
||||
if(R.lawupdate && (R.connected_ai == src))
|
||||
R << "\red " + law + "\red...LAWS UPDATED"
|
||||
|
||||
/mob/living/silicon/ai/proc/clear_ion_laws()
|
||||
src.laws_sanity_check()
|
||||
src.laws.clear_ion_laws()
|
||||
|
||||
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.add_supplied_law(number, law)
|
||||
|
||||
/mob/living/silicon/ai/proc/clear_supplied_laws()
|
||||
src.laws_sanity_check()
|
||||
src.laws.clear_supplied_laws()
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/mob/living/silicon/proc/show_laws() //Redefined in ai/laws.dm and robot/laws.dm
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/laws_sanity_check()
|
||||
if (!laws)
|
||||
laws = new /datum/ai_laws/asimov
|
||||
|
||||
/mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg)
|
||||
src.laws_sanity_check()
|
||||
src.laws.set_zeroth_law(law, law_borg)
|
||||
|
||||
/mob/living/silicon/proc/add_inherent_law(var/law)
|
||||
laws_sanity_check()
|
||||
laws.add_inherent_law(law)
|
||||
|
||||
/mob/living/silicon/proc/clear_inherent_laws()
|
||||
laws_sanity_check()
|
||||
laws.clear_inherent_laws()
|
||||
|
||||
/mob/living/silicon/proc/add_supplied_law(var/number, var/law)
|
||||
laws_sanity_check()
|
||||
laws.add_supplied_law(number, law)
|
||||
|
||||
/mob/living/silicon/proc/clear_supplied_laws()
|
||||
laws_sanity_check()
|
||||
laws.clear_supplied_laws()
|
||||
|
||||
/mob/living/silicon/proc/add_ion_law(var/law)
|
||||
laws_sanity_check()
|
||||
laws.add_ion_law(law)
|
||||
|
||||
/mob/living/silicon/proc/clear_ion_laws()
|
||||
laws_sanity_check()
|
||||
laws.clear_ion_laws()
|
||||
@@ -68,36 +68,4 @@
|
||||
temp = master.supplied[index]
|
||||
if (length(temp) > 0)
|
||||
laws.supplied[index] = temp
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/laws_sanity_check()
|
||||
if (!laws)
|
||||
laws = new /datum/ai_laws/asimov
|
||||
|
||||
/mob/living/silicon/robot/proc/set_zeroth_law(var/law)
|
||||
laws_sanity_check()
|
||||
laws.set_zeroth_law(law)
|
||||
|
||||
/mob/living/silicon/robot/proc/add_inherent_law(var/law)
|
||||
laws_sanity_check()
|
||||
laws.add_inherent_law(law)
|
||||
|
||||
/mob/living/silicon/robot/proc/clear_inherent_laws()
|
||||
laws_sanity_check()
|
||||
laws.clear_inherent_laws()
|
||||
|
||||
/mob/living/silicon/robot/proc/add_supplied_law(var/number, var/law)
|
||||
laws_sanity_check()
|
||||
laws.add_supplied_law(number, law)
|
||||
|
||||
/mob/living/silicon/robot/proc/clear_supplied_laws()
|
||||
laws_sanity_check()
|
||||
laws.clear_supplied_laws()
|
||||
|
||||
/mob/living/silicon/robot/proc/add_ion_law(var/law)
|
||||
laws_sanity_check()
|
||||
laws.add_ion_law(law)
|
||||
|
||||
/mob/living/silicon/robot/proc/clear_ion_laws()
|
||||
laws_sanity_check()
|
||||
laws.clear_ion_laws()
|
||||
return
|
||||
@@ -20,9 +20,6 @@
|
||||
/mob/living/silicon/proc/triggerAlarm()
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/show_laws()
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/queueAlarm(var/message, var/type, var/incoming = 1)
|
||||
var/in_cooldown = (alarms_to_show.len > 0 || alarms_to_clear.len > 0)
|
||||
if(incoming)
|
||||
|
||||
@@ -286,22 +286,41 @@
|
||||
var/mins = (mills % 36000) / 600
|
||||
var/hours = mills / 36000
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
dat += "Round Duration: [round(hours)]h [round(mins)]m<br>"
|
||||
var/dat = "<div class='notice'>Round Duration: [round(hours)]h [round(mins)]m</div>"
|
||||
|
||||
if(emergency_shuttle) //In case Nanotrasen decides reposess Centcom's shuttles.
|
||||
if(emergency_shuttle.direction == 2) //Shuttle is going to centcom, not recalled
|
||||
dat += "<font color='red'><b>The station has been evacuated.</b></font><br>"
|
||||
dat += "<div class='notice red'>The station has been evacuated.</div><br>"
|
||||
if(emergency_shuttle.direction == 1 && emergency_shuttle.timeleft() < 300) //Shuttle is past the point of no recall
|
||||
dat += "<font color='red'>The station is currently undergoing evacuation procedures.</font><br>"
|
||||
dat += "<div class='notice red'>The station is currently undergoing evacuation procedures.</div><br>"
|
||||
|
||||
dat += "Choose from the following open positions:<br>"
|
||||
var/available_job_count = 0
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
if(job && IsJobAvailable(job.title))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a><br>"
|
||||
available_job_count++;
|
||||
|
||||
dat += "</center>"
|
||||
src << browse(dat, "window=latechoices;size=300x640;can_close=1")
|
||||
dat += "<div class='clearBoth'>Choose from the following open positions:</div><br>"
|
||||
dat += "<div class='jobs'><div class='jobsColumn'>"
|
||||
var/job_count = 0
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
if(job && IsJobAvailable(job.title))
|
||||
job_count++;
|
||||
if (job_count > round(available_job_count / 2))
|
||||
dat += "</div><div class='jobsColumn'>"
|
||||
var/position_class = "otherPosition"
|
||||
if (job.title in command_positions)
|
||||
position_class = "commandPosition"
|
||||
dat += "<a class='[position_class]' href='byond://?src=\ref[src];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a><br>"
|
||||
dat += "</div></div>"
|
||||
|
||||
// Removing the old window method but leaving it here for reference
|
||||
//src << browse(dat, "window=latechoices;size=300x640;can_close=1")
|
||||
|
||||
// Added the new browser window method
|
||||
var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 440, 500)
|
||||
popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
|
||||
popup.set_content(dat)
|
||||
popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc
|
||||
|
||||
|
||||
proc/create_character()
|
||||
|
||||
@@ -84,13 +84,13 @@
|
||||
|
||||
if(href_list["write"])
|
||||
var/obj/item/P = locate(href_list["write"])
|
||||
if(P)
|
||||
if(istype(P) && P.loc == src)
|
||||
if(usr.get_active_hand())
|
||||
P.attackby(usr.get_active_hand(), usr)
|
||||
|
||||
if(href_list["remove"])
|
||||
var/obj/item/P = locate(href_list["remove"])
|
||||
if(P)
|
||||
if(istype(P) && P.loc == src)
|
||||
P.loc = usr.loc
|
||||
usr.put_in_hands(P)
|
||||
if(P == toppaper)
|
||||
@@ -103,12 +103,12 @@
|
||||
|
||||
if(href_list["read"])
|
||||
var/obj/item/weapon/paper/P = locate(href_list["read"])
|
||||
if(P)
|
||||
if(istype(P) && P.loc == src)
|
||||
P.examine()
|
||||
|
||||
if(href_list["top"])
|
||||
var/obj/item/P = locate(href_list["top"])
|
||||
if(P)
|
||||
if(istype(P) && P.loc == src)
|
||||
toppaper = P
|
||||
usr << "<span class='notice'>You move [P.name] to the top.</span>"
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
//var/retrieveindex = text2num(href_list["retrieve"])
|
||||
var/obj/item/P = locate(href_list["retrieve"])//contents[retrieveindex]
|
||||
if(P && in_range(src, usr))
|
||||
if(istype(P) && P.loc == src && in_range(src, usr))
|
||||
usr.put_in_hands(P)
|
||||
updateUsrDialog()
|
||||
icon_state = "[initial(icon_state)]-open"
|
||||
|
||||
@@ -62,13 +62,13 @@
|
||||
|
||||
if(href_list["remove"])
|
||||
var/obj/item/P = locate(href_list["remove"])
|
||||
if(P)
|
||||
if(istype(P) && P.loc == src)
|
||||
P.loc = usr.loc
|
||||
usr.put_in_hands(P)
|
||||
|
||||
if(href_list["read"])
|
||||
var/obj/item/weapon/paper/P = locate(href_list["read"])
|
||||
if(P)
|
||||
if(istype(P) && P.loc == src)
|
||||
P.examine()
|
||||
|
||||
//Update everything
|
||||
|
||||
@@ -2619,8 +2619,11 @@ datum
|
||||
if(!data) data = 1
|
||||
data++
|
||||
switch(data)
|
||||
if(51 to INFINITY)
|
||||
if(51 to 200)
|
||||
M.sleeping += 1
|
||||
if(201 to INFINITY)
|
||||
M.sleeping += 1
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2642,6 +2645,8 @@ datum
|
||||
M.confused = max(M.confused+3,0)
|
||||
else if(data >=55)
|
||||
M.druggy = max(M.druggy, 55)
|
||||
else if(data >=200)
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2665,6 +2670,8 @@ datum
|
||||
M.confused = max(M.confused+3,0)
|
||||
else if(data >=55)
|
||||
M.druggy = max(M.druggy, 55)
|
||||
else if(data >=200)
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2691,23 +2698,38 @@ datum
|
||||
M.make_dizzy(20)
|
||||
M.druggy = max(M.druggy, 45)
|
||||
if(prob(20)) M.emote(pick("twitch","giggle"))
|
||||
if (10 to INFINITY)
|
||||
if (10 to 200)
|
||||
if (!M.stuttering) M.stuttering = 1
|
||||
M.make_jittery(40)
|
||||
M.make_dizzy(40)
|
||||
M.druggy = max(M.druggy, 60)
|
||||
if(prob(30)) M.emote(pick("twitch","giggle"))
|
||||
if(200 to INFINITY)
|
||||
if (!M.stuttering) M.stuttering = 1
|
||||
M.make_jittery(60)
|
||||
M.make_dizzy(60)
|
||||
M.druggy = max(M.druggy, 75)
|
||||
if(prob(40)) M.emote(pick("twitch","giggle"))
|
||||
if(prob(30)) M.adjustToxLoss(2)
|
||||
holder.remove_reagent(src.id, 0.2)
|
||||
..()
|
||||
return
|
||||
|
||||
/*boozepwr chart
|
||||
55 = non-toxic alchohol
|
||||
45 = medium-toxic
|
||||
35 = the hard stuff
|
||||
25 = potent mixes
|
||||
<15 = deadly toxic
|
||||
*/
|
||||
|
||||
ethanol
|
||||
name = "Ethanol"
|
||||
id = "ethanol"
|
||||
description = "A well-known alcohol with a variety of applications."
|
||||
reagent_state = LIQUID
|
||||
color = "#404030" // rgb: 64, 64, 48
|
||||
var/boozepwr = 45 //lower numbers mean the booze will have an effect faster.
|
||||
var/boozepwr = 10 //lower numbers mean the booze will have an effect faster.
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!data) data = 1
|
||||
@@ -2720,6 +2742,8 @@ datum
|
||||
if(data >= boozepwr*2.5 && prob(33))
|
||||
if (!M.confused) M.confused = 1
|
||||
M.confused += 3
|
||||
if(data >= boozepwr*10 && prob(33))
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
@@ -2753,6 +2777,7 @@ datum
|
||||
id = "kahlua"
|
||||
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
@@ -2767,12 +2792,14 @@ datum
|
||||
id = "whiskey"
|
||||
description = "A superb and well-aged single-malt whiskey. Damn."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/thirteenloko
|
||||
name = "Thirteen Loko"
|
||||
id = "thirteenloko"
|
||||
description = "A potent mixture of caffeine and alcohol."
|
||||
color = "#102000" // rgb: 16, 32, 0
|
||||
boozepwr = 35
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.drowsyness = max(0,M.drowsyness-7)
|
||||
@@ -2789,28 +2816,19 @@ datum
|
||||
id = "vodka"
|
||||
description = "Number one drink AND fueling choice for Russians worldwide."
|
||||
color = "#0064C8" // rgb: 0, 100, 200
|
||||
boozepwr = 35
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.radiation = max(M.radiation-2,0)
|
||||
..()
|
||||
return
|
||||
|
||||
ethanol/holywater
|
||||
name = "Holy Water"
|
||||
id = "holywater"
|
||||
description = "Water blessed by some deity."
|
||||
color = "#E0E8EF" // rgb: 224, 232, 239
|
||||
boozepwr = 15
|
||||
|
||||
reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(!istype(T)) return
|
||||
T.Bless()
|
||||
|
||||
ethanol/bilk
|
||||
name = "Bilk"
|
||||
id = "bilk"
|
||||
description = "This appears to be beer mixed with milk. Disgusting."
|
||||
color = "#895C4C" // rgb: 137, 92, 76
|
||||
boozepwr = 55
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(M.getBruteLoss() && prob(10)) M.heal_organ_damage(1,0)
|
||||
@@ -2823,6 +2841,7 @@ datum
|
||||
id = "threemileisland"
|
||||
description = "Made for a woman, strong enough for a man."
|
||||
color = "#666340" // rgb: 102, 99, 64
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.druggy = max(M.druggy, 50)
|
||||
@@ -2834,36 +2853,42 @@ datum
|
||||
id = "gin"
|
||||
description = "It's gin. In space. I say, good sir."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
|
||||
ethanol/rum
|
||||
name = "Rum"
|
||||
id = "rum"
|
||||
description = "Yohoho and all that."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/tequilla
|
||||
name = "Tequila"
|
||||
id = "tequilla"
|
||||
description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
|
||||
color = "#FFFF91" // rgb: 255, 255, 145
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/vermouth
|
||||
name = "Vermouth"
|
||||
id = "vermouth"
|
||||
description = "You suddenly feel a craving for a martini..."
|
||||
color = "#91FF91" // rgb: 145, 255, 145
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/wine
|
||||
name = "Wine"
|
||||
id = "wine"
|
||||
description = "An premium alchoholic beverage made from distilled grape juice."
|
||||
color = "#7E4043" // rgb: 126, 64, 67
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/cognac
|
||||
name = "Cognac"
|
||||
id = "cognac"
|
||||
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
|
||||
color = "#AB3C05" // rgb: 171, 60, 5
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/hooch
|
||||
name = "Hooch"
|
||||
@@ -2877,91 +2902,98 @@ datum
|
||||
id = "ale"
|
||||
description = "A dark alchoholic beverage made by malted barley and yeast."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
|
||||
ethanol/goldschlager
|
||||
name = "Goldschlager"
|
||||
id = "goldschlager"
|
||||
description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
|
||||
color = "#FFFF91" // rgb: 255, 255, 145
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/patron
|
||||
name = "Patron"
|
||||
id = "patron"
|
||||
description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
|
||||
color = "#585840" // rgb: 88, 88, 64
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/gintonic
|
||||
name = "Gin and Tonic"
|
||||
id = "gintonic"
|
||||
description = "An all time classic, mild cocktail."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 65
|
||||
boozepwr = 55
|
||||
|
||||
ethanol/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
id = "cubalibre"
|
||||
description = "Rum, mixed with cola. Viva la revolution."
|
||||
color = "#3E1B00" // rgb: 62, 27, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/whiskey_cola
|
||||
name = "Whiskey Cola"
|
||||
id = "whiskeycola"
|
||||
description = "Whiskey, mixed with cola. Surprisingly refreshing."
|
||||
color = "#3E1B00" // rgb: 62, 27, 0
|
||||
boozepwr = 65
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/martini
|
||||
name = "Classic Martini"
|
||||
id = "martini"
|
||||
description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/vodkamartini
|
||||
name = "Vodka Martini"
|
||||
id = "vodkamartini"
|
||||
description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/white_russian
|
||||
name = "White Russian"
|
||||
id = "whiterussian"
|
||||
description = "That's just, like, your opinion, man..."
|
||||
color = "#A68340" // rgb: 166, 131, 64
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/screwdrivercocktail
|
||||
name = "Screwdriver"
|
||||
id = "screwdrivercocktail"
|
||||
description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
|
||||
color = "#A68310" // rgb: 166, 131, 16
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/booger
|
||||
name = "Booger"
|
||||
id = "booger"
|
||||
description = "Ewww..."
|
||||
color = "#8CFF8C" // rgb: 140, 255, 140
|
||||
boozepwr = 55
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/bloody_mary
|
||||
name = "Bloody Mary"
|
||||
id = "bloodymary"
|
||||
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/brave_bull
|
||||
name = "Brave Bull"
|
||||
id = "bravebull"
|
||||
description = "It's just as effective as Dutch-Courage!."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/tequilla_sunrise
|
||||
name = "Tequila Sunrise"
|
||||
id = "tequillasunrise"
|
||||
description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
|
||||
color = "#FFE48C" // rgb: 255, 228, 140
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/toxins_special
|
||||
name = "Toxins Special"
|
||||
@@ -2969,6 +3001,7 @@ datum
|
||||
description = "This thing is ON FIRE!. CALL THE DAMN SHUTTLE!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 330)
|
||||
@@ -2982,6 +3015,7 @@ datum
|
||||
description = "Deny drinking this and prepare for THE LAW."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 25
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.Stun(2)
|
||||
@@ -2993,20 +3027,21 @@ datum
|
||||
id = "irishcream"
|
||||
description = "Whiskey-imbued cream, what else would you expect from the Irish."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/manly_dorf
|
||||
name = "The Manly Dorf"
|
||||
id = "manlydorf"
|
||||
description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 10
|
||||
boozepwr = 45 //was 10, but really its only beer and ale, both weak alchoholic beverages
|
||||
|
||||
ethanol/longislandicedtea
|
||||
name = "Long Island Iced Tea"
|
||||
id = "longislandicedtea"
|
||||
description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/moonshine
|
||||
name = "Moonshine"
|
||||
@@ -3027,34 +3062,35 @@ datum
|
||||
id = "irishcoffee"
|
||||
description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/margarita
|
||||
name = "Margarita"
|
||||
id = "margarita"
|
||||
description = "On the rocks with salt on the rim. Arriba~!"
|
||||
color = "#8CFF8C" // rgb: 140, 255, 140
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/black_russian
|
||||
name = "Black Russian"
|
||||
id = "blackrussian"
|
||||
description = "For the lactose-intolerant. Still as classy as a White Russian."
|
||||
color = "#360000" // rgb: 54, 0, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/manhattan
|
||||
name = "Manhattan"
|
||||
id = "manhattan"
|
||||
description = "The Detective's undercover drink of choice. He never could stomach gin..."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/manhattan_proj
|
||||
name = "Manhattan Project"
|
||||
id = "manhattan_proj"
|
||||
description = "A scientist's drink of choice, for pondering ways to blow up the station."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.druggy = max(M.druggy, 30)
|
||||
@@ -3066,12 +3102,14 @@ datum
|
||||
id = "whiskeysoda"
|
||||
description = "For the more refined griffon."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/antifreeze
|
||||
name = "Anti-freeze"
|
||||
id = "antifreeze"
|
||||
description = "Ultimate refreshment."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 25
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 330)
|
||||
@@ -3084,48 +3122,56 @@ datum
|
||||
id = "barefoot"
|
||||
description = "Barefoot and pregnant"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/snowwhite
|
||||
name = "Snow White"
|
||||
id = "snowwhite"
|
||||
description = "A cold refreshment"
|
||||
color = "#FFFFFF" // rgb: 255, 255, 255
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/demonsblood
|
||||
name = "Demons Blood"
|
||||
id = "demonsblood"
|
||||
description = "AHHHH!!!!"
|
||||
color = "#820000" // rgb: 130, 0, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/vodkatonic
|
||||
name = "Vodka and Tonic"
|
||||
id = "vodkatonic"
|
||||
description = "For when a gin and tonic isn't russian enough."
|
||||
color = "#0064C8" // rgb: 0, 100, 200
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/ginfizz
|
||||
name = "Gin Fizz"
|
||||
id = "ginfizz"
|
||||
description = "Refreshingly lemony, deliciously dry."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/bahama_mama
|
||||
name = "Bahama mama"
|
||||
id = "bahama_mama"
|
||||
description = "Tropical cocktail."
|
||||
color = "#FF7F3B" // rgb: 255, 127, 59
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/singulo
|
||||
name = "Singulo"
|
||||
id = "singulo"
|
||||
description = "A blue-space beverage!"
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 15
|
||||
|
||||
ethanol/sbiten
|
||||
name = "Sbiten"
|
||||
id = "sbiten"
|
||||
description = "A spicy Vodka! Might be a little hot for the little guys!"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 360)
|
||||
@@ -3138,12 +3184,14 @@ datum
|
||||
id = "devilskiss"
|
||||
description = "Creepy time!"
|
||||
color = "#A68310" // rgb: 166, 131, 16
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/red_mead
|
||||
name = "Red Mead"
|
||||
id = "red_mead"
|
||||
description = "The true Viking drink! Even though it has a strange red color."
|
||||
color = "#C73C00" // rgb: 199, 60, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/mead
|
||||
name = "Mead"
|
||||
@@ -3151,6 +3199,7 @@ datum
|
||||
description = "A Vikings drink, though a cheap one."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += 1
|
||||
@@ -3162,6 +3211,7 @@ datum
|
||||
id = "iced_beer"
|
||||
description = "A beer which is so cold the air around it freezes."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(M.bodytemperature > 270)
|
||||
@@ -3181,18 +3231,21 @@ datum
|
||||
id = "aloe"
|
||||
description = "So very, very, very good."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/andalusia
|
||||
name = "Andalusia"
|
||||
id = "andalusia"
|
||||
description = "A nice, strange named drink."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/alliescocktail
|
||||
name = "Allies Cocktail"
|
||||
id = "alliescocktail"
|
||||
description = "A drink made from your allies, not as sweet as when made from your enemies."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/acid_spit
|
||||
name = "Acid Spit"
|
||||
@@ -3200,6 +3253,7 @@ datum
|
||||
description = "A drink for the daring, can be deadly if incorrectly prepared!"
|
||||
reagent_state = LIQUID
|
||||
color = "#365000" // rgb: 54, 80, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/amasec
|
||||
name = "Amasec"
|
||||
@@ -3207,30 +3261,35 @@ datum
|
||||
description = "Official drink of the Nanotrasen Gun-Club!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/changelingsting
|
||||
name = "Changeling Sting"
|
||||
id = "changelingsting"
|
||||
description = "You take a tiny sip and feel a burning sensation..."
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 15
|
||||
|
||||
ethanol/irishcarbomb
|
||||
name = "Irish Car Bomb"
|
||||
id = "irishcarbomb"
|
||||
description = "Mmm, tastes like chocolate cake..."
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
id = "syndicatebomb"
|
||||
description = "Tastes like terrorism!"
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 15
|
||||
|
||||
ethanol/erikasurprise
|
||||
name = "Erika Surprise"
|
||||
id = "erikasurprise"
|
||||
description = "The surprise is, it's green!"
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/driestmartini
|
||||
name = "Driest Martini"
|
||||
@@ -3246,6 +3305,7 @@ datum
|
||||
description = "A drink from Clown Heaven."
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
color = "#FFFF91" // rgb: 255, 255, 140
|
||||
boozepwr = 25
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
@@ -3261,6 +3321,7 @@ datum
|
||||
description = "A drink from Mime Heaven."
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
|
||||
@@ -408,7 +408,7 @@ datum
|
||||
S.start()
|
||||
sleep(10)
|
||||
S.start()
|
||||
if(holder)
|
||||
if(holder && holder.my_atom)
|
||||
holder.clear_reagents()
|
||||
return
|
||||
|
||||
@@ -2142,3 +2142,9 @@ datum
|
||||
required_reagents = list("nothing" = 1, "gin" = 1)
|
||||
result_amount = 2
|
||||
|
||||
thirteenloko
|
||||
name = "Thirteen Loko"
|
||||
id = "thirteenloko"
|
||||
result = "thirteenloko"
|
||||
required_reagents = list("vodka" = 1, "coffee" = 1, "orangejuice" = 1)
|
||||
result_amount = 3
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
if(container)
|
||||
if(istype(container, /list) || istext(container))
|
||||
return length(container)
|
||||
return 0
|
||||
|
||||
// BY DONKIE~
|
||||
// String stuff
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
status=0
|
||||
returnVal
|
||||
|
||||
max_statements=1000 // maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation
|
||||
max_statements=900 // maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation
|
||||
cur_statements=0 // current amount of statements called
|
||||
alertadmins=0 // set to 1 if the admins shouldn't be notified of anymore issues
|
||||
max_iterations=100 // max number of uninterrupted loops possible
|
||||
|
||||
@@ -136,7 +136,7 @@ GATEWAY_DELAY 18000
|
||||
## This is intended for servers with low populations - where there are not enough
|
||||
## players to fill all roles, so players need to do more than just one job.
|
||||
## Also for servers where they don't want people to hide in their own departments.
|
||||
JOBS_HAVE_MINIMAL_ACCESS
|
||||
#JOBS_HAVE_MINIMAL_ACCESS
|
||||
|
||||
## Uncomment to give assistants maint access.
|
||||
#ASSISTANTS_HAVE_MAINT_ACCESS
|
||||
|
||||
@@ -216,6 +216,19 @@ div.notice
|
||||
margin: 3px 0;
|
||||
}
|
||||
|
||||
.statusLabel
|
||||
{
|
||||
width: 138px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
color: #98B0C3;
|
||||
}
|
||||
|
||||
.statusValue
|
||||
{
|
||||
float: left;
|
||||
}
|
||||
|
||||
.block
|
||||
{
|
||||
padding: 8px;
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
.statusLabel
|
||||
{
|
||||
width: 128px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.statusValue
|
||||
{
|
||||
float: left;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
.jobs
|
||||
{
|
||||
width: 400px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.jobsColumn
|
||||
{
|
||||
float: left;
|
||||
width: 200px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.commandPosition
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.otherPosition
|
||||
{
|
||||
|
||||
}
|
||||
+10
-17
@@ -1,25 +1,18 @@
|
||||
.getblockstring
|
||||
.dnaBlockNumber
|
||||
{
|
||||
font-family: Fixed, monospace;
|
||||
float: left;
|
||||
color: #ffffff;
|
||||
background: #363636;
|
||||
width: 20px;
|
||||
padding: -3px 0 -1px 0;
|
||||
margin: 2px 2px 0 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.blockString
|
||||
{
|
||||
width: 55px;
|
||||
height: 19px;
|
||||
padding: 0 8px 8px 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.statusLabel
|
||||
{
|
||||
width: 128px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.statusValue
|
||||
.dnaBlock
|
||||
{
|
||||
font-family: Fixed, monospace;
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
.statusLabel
|
||||
{
|
||||
width: 128px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.statusValue
|
||||
{
|
||||
float: left;
|
||||
}
|
||||
+19
-1
@@ -51,7 +51,25 @@ should be listed in the changelog upon commit tho. Thanks. -->
|
||||
|
||||
<!-- You can simply add changelogs using AddToChangelog.exe -->
|
||||
|
||||
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
|
||||
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>4 August 2013</h2>
|
||||
<h3 class='author'>Giacom updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>Nanotrasen has re-arranged the station blueprint designs to have non-essential APCs moved to the maintenance hallways. Non-essential rooms that aren't connected to a maintenance hallway will have their APC remain. Station Engineers will now have easy access to a room's APC without needing access themselves. Nanotrasen also wishes to remind you that you should not sabotage these easy to access APCs to cause distractions or to lockdown someone in a location. Thank you for reading.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>31 July 2013</h2>
|
||||
<h3 class='author'>Ricotez updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>Atmospherics now has its own hardsuit. Instead of radiation protection it offers fire protection.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>21 July 2013</h2>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 78 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 19 KiB |
@@ -1711,10 +1711,10 @@
|
||||
"aGU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
|
||||
"aGV" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/checkpoint2{name = "Customs"})
|
||||
"aGW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
|
||||
"aGX" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aGX" = (/obj/structure/table,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/paladin,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aGY" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aGZ" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/machinery/computer/borgupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aHa" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/computer/aiupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aGZ" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/machinery/computer/upload/borg,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aHa" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/computer/upload/ai,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aHb" = (/obj/structure/table,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aHc" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -29},/turf/simulated/floor{dir = 10; icon_state = "brown"},/area/quartermaster/office{name = "\improper Supply Offices"})
|
||||
"aHd" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "neutral"; dir = 9},/area/hallway/secondary/construction{name = "\improper Garden"})
|
||||
@@ -1848,7 +1848,7 @@
|
||||
"aJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/hallway/primary/fore)
|
||||
"aJC" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = 3},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/port)
|
||||
"aJD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
|
||||
"aJE" = (/obj/structure/table,/obj/item/weapon/aiModule/teleporterOffline,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aJE" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/weapon/aiModule/asimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aJF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
|
||||
"aJG" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
|
||||
"aJH" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
|
||||
|
||||
+279
-335
File diff suppressed because it is too large
Load Diff
+1
-37
@@ -6,43 +6,6 @@
|
||||
|
||||
// BEGIN_FILE_DIR
|
||||
#define FILE_DIR .
|
||||
#define FILE_DIR "html"
|
||||
#define FILE_DIR "icons"
|
||||
#define FILE_DIR "icons/effects"
|
||||
#define FILE_DIR "icons/mecha"
|
||||
#define FILE_DIR "icons/misc"
|
||||
#define FILE_DIR "icons/mob"
|
||||
#define FILE_DIR "icons/obj"
|
||||
#define FILE_DIR "icons/obj/assemblies"
|
||||
#define FILE_DIR "icons/obj/atmospherics"
|
||||
#define FILE_DIR "icons/obj/clothing"
|
||||
#define FILE_DIR "icons/obj/doors"
|
||||
#define FILE_DIR "icons/obj/flora"
|
||||
#define FILE_DIR "icons/obj/machines"
|
||||
#define FILE_DIR "icons/obj/pipes"
|
||||
#define FILE_DIR "icons/obj/power_cond"
|
||||
#define FILE_DIR "icons/pda_icons"
|
||||
#define FILE_DIR "icons/spideros_icons"
|
||||
#define FILE_DIR "icons/stamp_icons"
|
||||
#define FILE_DIR "icons/Testing"
|
||||
#define FILE_DIR "icons/turf"
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
#define FILE_DIR "sound/effects"
|
||||
#define FILE_DIR "sound/hallucinations"
|
||||
#define FILE_DIR "sound/items"
|
||||
#define FILE_DIR "sound/machines"
|
||||
#define FILE_DIR "sound/mecha"
|
||||
#define FILE_DIR "sound/misc"
|
||||
#define FILE_DIR "sound/piano"
|
||||
#define FILE_DIR "sound/violin"
|
||||
#define FILE_DIR "sound/voice"
|
||||
#define FILE_DIR "sound/weapons"
|
||||
#define FILE_DIR "tools"
|
||||
#define FILE_DIR "tools/AddToChangelog"
|
||||
#define FILE_DIR "tools/AddToChangelog/AddToChangelog"
|
||||
// END_FILE_DIR
|
||||
|
||||
// BEGIN_PREFERENCES
|
||||
@@ -938,6 +901,7 @@
|
||||
#include "code\modules\mob\living\carbon\monkey\say.dm"
|
||||
#include "code\modules\mob\living\carbon\monkey\update_icons.dm"
|
||||
#include "code\modules\mob\living\silicon\death.dm"
|
||||
#include "code\modules\mob\living\silicon\laws.dm"
|
||||
#include "code\modules\mob\living\silicon\login.dm"
|
||||
#include "code\modules\mob\living\silicon\say.dm"
|
||||
#include "code\modules\mob\living\silicon\silicon.dm"
|
||||
|
||||
Reference in New Issue
Block a user