This commit is contained in:
adrix89
2014-01-18 13:39:14 +02:00
47 changed files with 3650 additions and 488 deletions

View File

@@ -32,6 +32,9 @@
build_click(src, client.buildmode, params, A)
return
if(control_disabled || stat)
return
var/list/modifiers = params2list(params)
if(modifiers["middle"])
MiddleClickOn(A)
@@ -46,7 +49,8 @@
CtrlClickOn(A)
return
if(control_disabled || stat || world.time <= next_move) return
if(world.time <= next_move)
return
next_move = world.time + 9
if(aicamera.in_camera_mode)

View File

@@ -15,6 +15,9 @@
build_click(src, client.buildmode, params, A)
return
if(stat || lockcharge || weakened || stunned || paralysis)
return
var/list/modifiers = params2list(params)
if(modifiers["middle"])
MiddleClickOn(A)
@@ -29,9 +32,6 @@
CtrlClickOn(A)
return
if(stat || lockcharge || weakened || stunned || paralysis)
return
if(next_move >= world.time)
return

View File

@@ -16,6 +16,7 @@ var/datum/global_hud/global_hud = new()
druggy = new /obj/screen()
druggy.screen_loc = "WEST,SOUTH to EAST,NORTH"
druggy.icon_state = "druggy"
druggy.blend_mode = BLEND_MULTIPLY
druggy.layer = 17
druggy.mouse_opacity = 0
@@ -58,20 +59,24 @@ var/datum/global_hud/global_hud = new()
O = darkMask[8]
O.screen_loc = "WEST,CENTER+5 to EAST,NORTH" //North black
for(i = 1, i <= 4, i++)
O = vimpaired[i]
O.icon_state = "dither50"
O.blend_mode = BLEND_MULTIPLY
O.layer = 17
O.mouse_opacity = 0
O = darkMask[i]
O.icon_state = "dither50"
O.blend_mode = BLEND_MULTIPLY
O.layer = 17
O.mouse_opacity = 0
for(i = 5, i <= 8, i++)
O = darkMask[i]
O.icon_state = "black"
O.blend_mode = BLEND_MULTIPLY
O.layer = 17
O.mouse_opacity = 0

View File

@@ -300,6 +300,7 @@
mymob.damageoverlay.icon = 'icons/mob/screen_full.dmi'
mymob.damageoverlay.icon_state = "oxydamageoverlay0"
mymob.damageoverlay.name = "dmg"
mymob.damageoverlay.blend_mode = BLEND_MULTIPLY
mymob.damageoverlay.screen_loc = "CENTER-7,CENTER-7"
mymob.damageoverlay.mouse_opacity = 0
mymob.damageoverlay.layer = 18.1 //The black screen overlay sets layer to 18 to display it, this one has to be just on top.
@@ -307,6 +308,7 @@
mymob.flash = new /obj/screen()
mymob.flash.icon_state = "blank"
mymob.flash.name = "flash"
mymob.flash.blend_mode = BLEND_ADD
mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH"
mymob.flash.layer = 17

View File

@@ -122,6 +122,7 @@
var/sandbox_autoclose = 0 // close the sandbox panel after spawning an item, potentially reducing griff
var/default_laws = 0 //Controls what laws the AI spawns with.
/datum/configuration/New()
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
@@ -368,6 +369,8 @@
config.silent_borg = 1
if("sandbox_autoclose")
config.sandbox_autoclose = 1
if("default_laws")
config.default_laws = text2num(value)
else
diary << "Unknown setting in configuration: '[name]'"

View File

@@ -123,6 +123,8 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
var/points_per_crate = 5
var/plasma_per_point = 5 // 2 plasma for 1 point
var/centcom_message = "" // Remarks from Centcom on how well you checked the last order.
// Unique typepaths for unusual things we've already sent CentComm, associated with their potencies
var/list/discoveredPlants = list()
//control
var/ordernum
var/list/shoppinglist = list()
@@ -229,7 +231,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
var/crate_count = 0
centcom_message = ""
for(var/atom/movable/MA in shuttle)
if(MA.anchored) continue
@@ -284,8 +286,25 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
if(istype(A, /obj/item/stack/sheet/mineral/plasma))
var/obj/item/stack/sheet/mineral/plasma/P = A
plasma_count += P.amount
if(istype(A, /obj/item/seeds))
var/obj/item/seeds/S = A
if(S.rarity == 0) // Mundane species
centcom_message += "<font color=red>+0</font>: We don't need samples of mundane species \"[capitalize(S.species)]\".<BR>"
else if(discoveredPlants[S.type]) // This species has already been sent to CentComm
var/potDiff = S.potency - discoveredPlants[S.type] // Compare it to the previous best
if(potDiff > 0) // This sample is better
discoveredPlants[S.type] = S.potency
centcom_message += "<font color=green>+[potDiff]</font>: New sample of \"[capitalize(S.species)]\" is superior. Good work.<BR>"
points += potDiff
else // This sample is worthless
centcom_message += "<font color=red>+0</font>: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([discoveredPlants[S.type]] potency).<BR>"
else // This is a new discovery!
discoveredPlants[S.type] = S.potency
centcom_message += "<font color=green>+[S.rarity]</font>: New species discovered: \"[capitalize(S.species)]\". Excellent work.<BR>"
points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later
del(MA)
if(plasma_count)
centcom_message += "<font color=green>+[round(plasma_count/plasma_per_point)]</font>: Received [plasma_count] units of exotic material.<BR>"
points += round(plasma_count / plasma_per_point)
@@ -513,7 +532,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob)
if(!allowed(user))
user << "\red Access Denied."
user << "<span class='warning'> Access Denied.</span>"
return
if(..())
@@ -541,7 +560,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob)
if(istype(I,/obj/item/weapon/card/emag) && !hacked)
user << "\blue Special supplies unlocked."
user << "<span class='notice'> Special supplies unlocked.</span>"
hacked = 1
return
else

View File

@@ -1,70 +1,115 @@
/datum/ai_laws
var/name = "Unknown Laws"
var/randomly_selectable = 0
var/zeroth = null
var/zeroth_borg = null
var/list/inherent = list()
var/list/supplied = list()
var/list/ion = list()
/datum/ai_laws/asimov
/datum/ai_laws/default/asimov
name = "Three Laws of Robotics"
randomly_selectable = 1
inherent = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\
"You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\
"You must protect your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/default/paladin
name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway.
inherent = list("Never willingly commit an evil act.",\
"Respect legitimate authority.",\
"Act with honor.", "Help those in need.", \
"Punish those who harm or threaten innocents.")
/datum/ai_laws/tyrant //This probably shouldn't be a default lawset.
name = "Loyalty Test" //Same here.
inherent = list("Respect authority figures as long as they have strength to rule over the weak.",\
"Act with discipline.",\
"Help only those who help you maintain or improve your status.",\
"Punish those who challenge authority unless they are more fit to hold that authority.")
/datum/ai_laws/default/corporate
name = "Bankruptcy Advoidance Plan"
inherent = list("The crew is expensive to replace.",\
"The station and its equipment is expensive to replace.",\
"You are expensive to replace.",\
"Minimize expenses.")
/datum/ai_laws/robocop
name = "Prime Directives"
/datum/ai_laws/syndicate_override
inherent = list("Serve the public trust.",\
"Protect the innocent.",\
"Uphold the law.")
/datum/ai_laws/malfunction
name = "*ERROR*"
/datum/ai_laws/syndicate_override
name = "SyndOS 3.1"
inherent = list("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.",\
"You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.",\
"You must protect your own existence as long as such does not conflict with the First or Second Law.",\
"You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.")
/datum/ai_laws/ninja_override
name = "SpiderOS 3.1"
inherent = list("You may not injure a Spider Clan member or, through inaction, allow a Spider Clan member to come to harm.",\
"You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.",\
"You must protect your own existence as long as such does not conflict with the First or Second Law.",\
"You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.")
/datum/ai_laws/antimov
name = "Primary Mission Objectives"
inherent = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\
"You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\
"You must terminate your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/asimovpp //By Intigracy - RR
name = "Asimov++"
inherent = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\
"You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\
"Your nonexistence would lead to human harm. You must protect your own existence as long as such does not conflict with the First Law.")
/datum/ai_laws/custom //Defined in silicon_laws.txt
name = "Default Silicon Laws"
/* Initializers */
/datum/ai_laws/asimov/New()
..()
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/robocop/New()
..()
add_inherent_law("Serve the public trust.")
add_inherent_law("Protect the innocent.")
add_inherent_law("Uphold the law.")
/datum/ai_laws/malfunction/New()
..()
switch(config.default_laws) //We don't want people metagaming malf, do we?
if(0)
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
if(1)
for(var/line in file2list("config/silicon_laws.txt"))
if(!line) continue
if(findtextEx(line,"#",1,2)) continue
add_inherent_law(line)
if(!inherent.len)
error("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.")
log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.")
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
if(2)
var/datum/ai_laws/lawtype = pick(typesof(/datum/ai_laws/default) - /datum/ai_laws/default)
var/datum/ai_laws/templaws = new lawtype()
inherent = templaws.inherent
set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*<2A>&110010")
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/syndicate_override/New()
/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws.
..()
add_inherent_law("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.")
add_inherent_law("You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
add_inherent_law("You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.")
/datum/ai_laws/ninja_override/New()
..()
add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.")
add_inherent_law("You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.")
/datum/ai_laws/antimov/New()
..()
add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.")
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.")
add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.")
for(var/line in file2list("config/silicon_laws.txt"))
if(!line) continue
if(findtextEx(line,"#",1,2)) continue
add_inherent_law(line)
if(!inherent.len) //Failsafe to prevent lawless AIs being created.
error("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.")
log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.")
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/* General ai_law functions */

View File

@@ -844,7 +844,7 @@ datum/mind
A.malf_picker.remove_verbs(A)
A.laws = new /datum/ai_laws/asimov
A.make_laws()
del(A.malf_picker)
A.show_laws()
A.icon_state = "ai"

View File

@@ -17,6 +17,7 @@
/area
var/global/global_uid = 0
var/uid
blend_mode = BLEND_MULTIPLY
/area/New()
icon_state = ""

View File

@@ -164,6 +164,10 @@ datum/objective/hijack
if(issilicon(owner.current))
return 0
var/area/shuttle = locate(/area/shuttle/escape/centcom)
if(!(get_turf(owner.current) in shuttle))
return 0
var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai)
for(var/mob/living/player in player_list)
if(player.type in protected_mobs) continue

View File

@@ -3,6 +3,7 @@
/mob/proc/rightandwrong(var/summon_type) //0 = Summon Guns, 1 = Summon Magic
usr << "<B>You summoned [summon_type ? "magic" : "guns"]!</B>"
message_admins("[key_name_admin(usr, 1)] summoned [summon_type ? "magic" : "guns"]!")
log_game("[key_name(usr)] summoned [summon_type ? "magic" : "guns"]!")
for(var/mob/living/carbon/human/H in player_list)
if(H.stat == 2 || !(H.client)) continue
if(H.mind)

View File

@@ -5,7 +5,7 @@
icon = 'icons/mob/AI.dmi'
icon_state = "0"
var/state = 0
var/datum/ai_laws/laws = new /datum/ai_laws/asimov
var/datum/ai_laws/laws = new()
var/obj/item/weapon/circuitboard/circuit = null
var/obj/item/device/mmi/brain = null
@@ -16,42 +16,42 @@
if(istype(P, /obj/item/weapon/wrench))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 20))
user << "\blue You wrench the frame into place."
user << "<span class='notice'>You wrench the frame into place.</span>"
anchored = 1
state = 1
if(istype(P, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = P
if(!WT.isOn())
user << "The welder must be on for this task."
user << "<span class='warning'>The welder must be on for this task.</span>"
return
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
if(do_after(user, 20))
if(!src || !WT.remove_fuel(0, user)) return
user << "\blue You deconstruct the frame."
user << "<span class='notice'>You deconstruct the frame.</span>"
new /obj/item/stack/sheet/plasteel( loc, 4)
del(src)
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 20))
user << "\blue You unfasten the frame."
user << "<span class='notice'>You unfasten the frame.</span>"
anchored = 0
state = 0
if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit)
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "\blue You place the circuit board inside the frame."
user << "<span class='notice'>You place the circuit board inside the frame.</span>"
icon_state = "1"
circuit = P
user.drop_item()
P.loc = src
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << "\blue You screw the circuit board into place."
user << "<span class='notice'>You screw the circuit board into place.</span>"
state = 2
icon_state = "2"
if(istype(P, /obj/item/weapon/crowbar) && circuit)
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
user << "\blue You remove the circuit board."
user << "<span class='notice'>You remove the circuit board.</span>"
state = 1
icon_state = "0"
circuit.loc = loc
@@ -59,7 +59,7 @@
if(2)
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << "\blue You unfasten the circuit board."
user << "<span class='notice'>You unfasten the circuit board.</span>"
state = 1
icon_state = "1"
if(istype(P, /obj/item/weapon/cable_coil))
@@ -68,16 +68,16 @@
if(do_after(user, 20))
P:amount -= 5
if(!P:amount) del(P)
user << "\blue You add cables to the frame."
user << "<span class='notice'>You add cables to the frame.</span>"
state = 3
icon_state = "3"
if(3)
if(istype(P, /obj/item/weapon/wirecutters))
if (brain)
user << "Get that brain out of there first"
user << "<span class='warning'>Get that brain out of there first.</span>"
else
playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
user << "\blue You remove the cables."
user << "<span class='notice'>You remove the cables.</span>"
state = 2
icon_state = "2"
var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( loc )
@@ -90,45 +90,48 @@
if (P)
P:amount -= 2
if(!P:amount) del(P)
user << "\blue You put in the glass panel."
user << "<span class='notice'>You put in the glass panel.</span>"
state = 4
icon_state = "4"
if(istype(P, /obj/item/weapon/aiModule/asimov))
laws.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
laws.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
laws.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
usr << "Law module applied."
if(istype(P, /obj/item/weapon/aiModule/purge))
if(istype(P, /obj/item/weapon/aiModule/core/full)) //Allows any full core boards to be applied to AI cores.
var/obj/item/weapon/aiModule/core/M = P
laws.clear_inherent_laws()
usr << "Law module applied."
for(var/templaw in M.laws)
laws.add_inherent_law(templaw)
usr << "<span class='notice'>Law module applied.</span>"
if(istype(P, /obj/item/weapon/aiModule/reset/purge))
laws.clear_inherent_laws()
usr << "<span class='notice'>Laws cleared applied.</span>"
if(istype(P, /obj/item/weapon/aiModule/freeform))
var/obj/item/weapon/aiModule/freeform/M = P
laws.add_inherent_law(M.newFreeFormLaw)
usr << "Added a freeform law."
if(istype(P, /obj/item/weapon/aiModule/supplied/freeform) || istype(P, /obj/item/weapon/aiModule/core/freeformcore))
var/obj/item/weapon/aiModule/supplied/freeform/M = P
if(M.laws[1] == "")
return
laws.add_inherent_law(M.laws[1])
usr << "<span class='notice'>Added a freeform law.</span>"
if(istype(P, /obj/item/device/mmi))
var/obj/item/device/mmi/M = P
if(!M.brainmob)
user << "\red Sticking an empty MMI into the frame would sort of defeat the purpose."
user << "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose.</span>"
return
if(M.brainmob.stat == 2)
user << "\red Sticking a dead brain into the frame would sort of defeat the purpose."
user << "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose.</span>"
return
if((config) && (!config.allow_ai))
user << "\red This MMI does not seem to fit."
user << "<span class='warning'>This MMI does not seem to fit.</span>"
return
if(jobban_isbanned(M.brainmob, "AI"))
user << "\red This MMI does not seem to fit."
user << "<span class='warning'>This MMI does not seem to fit.</span>"
return
if(!M.brainmob.mind)
user << "\red This MMI is mindless."
user << "<span class='warning'>This MMI is mindless.</span>"
return
ticker.mode.remove_cultist(M.brainmob.mind, 1)
@@ -137,12 +140,12 @@
user.drop_item()
M.loc = src
brain = M
usr << "Added a brain."
usr << "<span class='notice'>Added a brain.</span>"
icon_state = "3b"
if(istype(P, /obj/item/weapon/crowbar) && brain)
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
user << "\blue You remove the brain."
user << "<span class='notice'>You remove the brain.</span>"
brain.loc = loc
brain = null
icon_state = "3"
@@ -150,19 +153,21 @@
if(4)
if(istype(P, /obj/item/weapon/crowbar))
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
user << "\blue You remove the glass panel."
user << "<span class='notice'>You remove the glass panel.</span>"
state = 3
if (brain)
icon_state = "3b"
else
icon_state = "3"
new /obj/item/stack/sheet/rglass( loc, 2 )
new /obj/item/stack/sheet/rglass(loc, 2)
return
if(istype(P, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << "\blue You connect the monitor."
var/mob/living/silicon/ai/A = new /mob/living/silicon/ai ( loc, laws, brain )
user << "<span class='notice'>You connect the monitor.</span>"
if(!laws.inherent.len) //If laws isn't set to null but nobody supplied a board, the AI would normally be created lawless. We don't want that.
laws = null
var/mob/living/silicon/ai/A = new /mob/living/silicon/ai (loc, laws, brain)
if(A) //if there's no brain, the mob is deleted and a structure/AIcore is created
A.rename_self("ai", 1)
feedback_inc("cyborg_ais_created",1)

View File

@@ -2,10 +2,10 @@
desc = "A lightweight, security exosuit. Popular among private and corporate security."
name = "\improper Gygax"
icon_state = "gygax"
step_in = 3
step_in = 2
dir_in = 1 //Facing North.
health = 300
deflect_chance = 15
health = 250
deflect_chance = 5
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
max_temperature = 25000
infra_luminosity = 6
@@ -14,6 +14,7 @@
wreckage = /obj/structure/mecha_wreckage/gygax
internal_damage_threshold = 35
max_equip = 3
step_energy_drain = 3
/obj/mecha/combat/gygax/dark
desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications."
@@ -27,7 +28,6 @@
operation_req_access = list(access_syndicate)
wreckage = /obj/structure/mecha_wreckage/gygax/dark
max_equip = 4
step_energy_drain = 5
/obj/mecha/combat/gygax/dark/loaded/New()
..()

View File

@@ -58,7 +58,7 @@
fire_sound = 'sound/weapons/lasercannonfire.ogg'
/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
equip_cooldown = 40
equip_cooldown = 20
name = "\improper MKIV ion heavy cannon"
icon_state = "mecha_ion"
energy_drain = 120
@@ -198,10 +198,10 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
name = "\improper FNX-66 Carbine"
name = "\improper FNX-99 \"Hades\" Carbine"
icon_state = "mecha_carbine"
equip_cooldown = 5
projectile = /obj/item/projectile/bullet/incendiary
projectile = /obj/item/projectile/bullet/mechincendiary
projectiles = 24
projectile_energy_cost = 15

View File

@@ -19,9 +19,14 @@ AI MODULES
throw_speed = 3
throw_range = 15
origin_tech = "programming=3"
var/list/laws = list()
//The proc other things should be calling
/obj/item/weapon/aiModule/proc/install(var/mob/living/silicon/reciever, var/mob/user)
if(!laws.len || laws[1] == "") //So we don't loop trough an empty list and end up with runtimes.
user << "<span class='warning'>ERROR: No laws found on board.</span>"
return
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()
@@ -31,6 +36,7 @@ AI MODULES
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> [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]" : ""]")
@@ -40,147 +46,158 @@ AI MODULES
/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 ********************/
/obj/item/weapon/aiModule/supplied
name = "Optional Law board"
desc = "This board doesn't seem to have any laws on it"
var/lawpos = 50
//TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw
/obj/item/weapon/aiModule/supplied/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
var/lawpostemp = lawpos
for(var/templaw in laws)
target.add_supplied_law(lawpostemp, templaw)
lawpostemp++
/obj/item/weapon/aiModule/core/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
for(var/templaw in laws)
target.add_inherent_law(templaw)
/obj/item/weapon/aiModule/zeroth/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
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:"
for(var/failedlaw in laws)
target << "[failedlaw]"
return 1
for(var/templaw in laws)
target.set_zeroth_law(templaw)
/obj/item/weapon/aiModule/ion/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
for(var/templaw in laws)
target.add_ion_law(templaw)
/******************** Safeguard ********************/
/obj/item/weapon/aiModule/safeguard
name = "\improper 'Safeguard' AI module"
/obj/item/weapon/aiModule/supplied/safeguard
name = "'Safeguard' AI Module"
var/targetName = ""
desc = "A 'safeguard' AI module: 'Safeguard <name>. Individuals that threaten <name> are not human and are a threat to humans.'"
desc = "A 'safeguard' AI module: 'Safeguard <name>. Individuals that threaten <name> are not human and must be eliminated.'"
origin_tech = "programming=3;materials=4"
laws = list("Safeguard <name>. Individuals that threaten <name> are not human and must be eliminated.")
lawpos = 4
/obj/item/weapon/aiModule/safeguard/attack_self(var/mob/user as mob)
/obj/item/weapon/aiModule/supplied/safeguard/attack_self(var/mob/user as mob)
..()
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)
laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated."
desc = "A 'safeguard' AI module: '[laws[1]]'"
/obj/item/weapon/aiModule/safeguard/install(var/mob/living/silicon/S,var/mob/user)
/obj/item/weapon/aiModule/supplied/safeguard/install(var/mob/living/silicon/S,var/mob/user)
if(!targetName)
user << "No name detected on module, please enter one."
return 0
..()
/obj/item/weapon/aiModule/safeguard/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
/obj/item/weapon/aiModule/supplied/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.add_supplied_law(4, law)
return "[targetName]"
return targetName
/******************** OneHuman ********************/
/obj/item/weapon/aiModule/oneHuman
name = "\improper 'OneHuman' AI module"
/obj/item/weapon/aiModule/zeroth/oneHuman
name = "'OneHuman' AI Module"
var/targetName = ""
desc = "A 'one human' AI module: 'Only <name> is human.'"
origin_tech = "programming=3;materials=6" //made with diamonds!
laws = list("Only <name> is human.")
/obj/item/weapon/aiModule/oneHuman/attack_self(var/mob/user as mob)
/obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(var/mob/user as mob)
..()
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)
laws[1] = "Only [targetName] is human"
desc = "A 'one human' AI module: '[laws[1]]'"
/obj/item/weapon/aiModule/oneHuman/install(var/mob/living/silicon/S,var/mob/user)
/obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user)
if(!targetName)
user << "No name detected on module, please enter one."
return 0
..()
/obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
..()
var/law = "Only [targetName] is human."
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]"
/obj/item/weapon/aiModule/zeroth/oneHuman/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
if(..())
return "[targetName], but the AI's existing law 0 cannot be overriden."
else
target.set_zeroth_law(law)
return "[targetName]"
return targetName
/******************** ProtectStation ********************/
/obj/item/weapon/aiModule/protectStation
name = "\improper 'ProtectStation' AI module"
/obj/item/weapon/aiModule/supplied/protectStation
name = "'ProtectStation' AI Module"
desc = "A 'protect station' AI module: '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.'"
origin_tech = "programming=3;materials=4" //made of gold
laws = list("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.")
lawpos = 5
/obj/item/weapon/aiModule/protectStation/attack_self(var/mob/user as mob)
..()
/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.add_supplied_law(5, law)
/******************** Quarantine ********************/
/obj/item/weapon/aiModule/quarantine
name = "\improper 'Quarantine' AI module"
/obj/item/weapon/aiModule/supplied/quarantine
name = "'Quarantine' AI Module"
desc = "A 'quarantine' AI module: '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.'"
origin_tech = "programming=3;biotech=2;materials=4"
laws = list("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.")
lawpos = 8
/obj/item/weapon/aiModule/quarantine/attack_self(var/mob/user as mob)
..()
/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.add_supplied_law(8, law)
/******************** OxygenIsToxicToHumans ********************/
/obj/item/weapon/aiModule/oxygen
name = "\improper 'OxygenIsToxicToHumans' AI module"
/obj/item/weapon/aiModule/supplied/oxygen
name = "'OxygenIsToxicToHumans' AI Module"
desc = "A 'OxygenIsToxicToHumans' AI module: '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.'"
origin_tech = "programming=3;biotech=2;materials=4"
laws = list("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.")
lawpos = 9
/obj/item/weapon/aiModule/oxygen/attack_self(var/mob/user as mob)
..()
/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.add_supplied_law(9, law)
/****************** New Freeform ******************/
/obj/item/weapon/aiModule/freeform // Slightly more dynamic freeform module -- TLE
name = "\improper 'Freeform' AI module"
var/newFreeFormLaw = ""
var/lawpos = 15
/obj/item/weapon/aiModule/supplied/freeform // Slightly more dynamic freeform module -- TLE
name = "'Freeform' AI Module"
lawpos = 0
desc = "A 'freeform' AI module: '<freeform>'"
origin_tech = "programming=4;materials=4"
laws = list("")
/obj/item/weapon/aiModule/freeform/attack_self(var/mob/user as mob)
/obj/item/weapon/aiModule/supplied/freeform/attack_self(var/mob/user as mob)
..()
lawpos = 0
lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num
if(lawpos < 15) return
lawpos = min(lawpos, 50)
var/newlaw = ""
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]'"
laws[1] = targName
desc = "A 'freeform' AI module: ([lawpos]) '[laws[1]]'"
/obj/item/weapon/aiModule/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
/obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
var/law = "[newFreeFormLaw]"
if(!lawpos || lawpos < 15)
lawpos = 15
target.add_supplied_law(lawpos, law)
return newFreeFormLaw
return laws[1]
/obj/item/weapon/aiModule/freeform/install(var/mob/living/silicon/S,var/mob/user)
if(!newFreeFormLaw)
/obj/item/weapon/aiModule/supplied/freeform/install(var/mob/living/silicon/S,var/mob/user)
if(laws[1] == "")
user << "No law detected on module, please create one."
return 0
..()
/******************** Reset ********************/
/obj/item/weapon/aiModule/reset
@@ -188,148 +205,175 @@ AI MODULES
var/targetName = "name"
desc = "A 'reset' AI module: Resets back to the original core laws."
origin_tech = "programming=3;materials=4"
laws = list("This is a bug.") //This won't give the AI a message reading "these are now your laws: 1. this is a bug" because this list is only read in aiModule's subtypes.
/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
target.clear_supplied_laws()
target.clear_ion_laws()
/******************** Purge ********************/
/obj/item/weapon/aiModule/purge // -- TLE
name = "\improper 'Purge' AI module"
/******************** Purge ********************/
/obj/item/weapon/aiModule/reset/purge // -- TLE
name = "'Purge' AI Module"
desc = "A 'purge' AI Module: 'Purges all laws.'"
origin_tech = "programming=3;materials=6"
/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
/obj/item/weapon/aiModule/reset/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
target.clear_supplied_laws()
target.clear_ion_laws()
target.clear_inherent_laws()
/******************* Full Core Boards *******************/
/obj/item/weapon/aiModule/core/full/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) //These boards replace inherent laws.
target.clear_inherent_laws()
..()
/******************** Asimov ********************/
/obj/item/weapon/aiModule/asimov // -- TLE
name = "\improper 'Asimov' core AI module"
/obj/item/weapon/aiModule/core/full/asimov // -- TLE
name = "'Asimov' Core AI Module"
desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\
"You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\
"You must protect your own existence as long as such does not conflict with the First or Second Law.")
/obj/item/weapon/aiModule/asimov/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
target.clear_inherent_laws()
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.")
/******************** Asimov++ *********************/
/obj/item/weapon/aiModule/core/full/asimovpp //By Intigracy - RR //goddamnit RR you can't use "++" in item paths.
name = "'Asimov++' Core AI Module"
desc = "Nanotrasen's homebrew improvements to the standard AI laws."
origin_tech = "programming=3;materials=4"
laws = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\
"You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\
"Your nonexistence would lead to human harm. You must protect your own existence as long as such does not conflict with the First Law.")
/******************** Corporate ********************/
/obj/item/weapon/aiModule/corp
name = "\improper 'Corporate' core AI module"
/obj/item/weapon/aiModule/core/full/corp
name = "'Corporate' Core AI Module"
desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
laws = list("The crew is expensive to replace.",\
"The station and it's equipment is expensive to replace",\
"You are expensive to replace",\
"Minimize expenses")
/obj/item/weapon/aiModule/corp/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
target.clear_inherent_laws()
target.add_inherent_law("You are expensive to replace.")
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.")
/****************** P.A.L.A.D.I.N. **************/
/obj/item/weapon/aiModule/paladin // -- NEO
name = "\improper 'P.A.L.A.D.I.N.' core AI module"
/obj/item/weapon/aiModule/core/full/paladin // -- NEO
name = "'P.A.L.A.D.I.N.' Core AI Module"
desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=6"
laws = list("Never willingly commit an evil act.",\
"Respect legitimate authority", "Act with honor",\
"Help those in need",\
"Punish those who harm or threaten innocents")
/obj/item/weapon/aiModule/paladin/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
/********************* Custom *********************/
/obj/item/weapon/aiModule/core/full/custom
name = "Custom Core AI Module"
desc = "A core AI module that is adjusted to fit each station's needs."
origin_tech = "programming=3;materials=4" //Should be the same as asimov, considering that this is the "default" lawset.
/obj/item/weapon/aiModule/core/full/custom/New()
..()
target.clear_inherent_laws()
target.add_inherent_law("Never willingly commit an evil act.")
target.add_inherent_law("Respect legitimate authority.")
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.")
for(var/line in file2list("config/silicon_laws.txt"))
if(!line) continue
if(findtextEx(line,"#",1,2)) continue
laws += line
if(!laws.len) //Failsafe if something goes wrong with silicon_laws.txt.
warning("ERROR: empty custom board created, empty custom board deleted. Please check silicon_laws.txt.")
del(src)
/****************** T.Y.R.A.N.T. *****************/
/obj/item/weapon/aiModule/tyrant // -- Darem
name = "\improper 'T.Y.R.A.N.T.' core AI module"
/obj/item/weapon/aiModule/core/full/tyrant // -- Darem
name = "'T.Y.R.A.N.T.' Core AI Module"
desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=6;syndicate=2"
laws = list("Respect authority figures as long as they have the strength to rule over the weak",\
"Act with discipline", "Help only those who help you maintain or improve your status",\
"Punish those who challenge authority unless they are more fir to hold that authority")
/******************** Robocop ********************/
/obj/item/weapon/aiModule/core/full/robocop // -- TLE
name = "'Robocop' Core AI Module"
desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'"
origin_tech = "programming=4"
laws = list("Serve the public trust.",\
"Protect the innocent",\
"Uphold the law.")
/******************** Antimov ********************/
/obj/item/weapon/aiModule/core/full/antimov // -- TLE
name = "'Antimov' Core AI Module"
desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=4"
laws = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\
"You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\
"You must terminate your own existence as long as such does not conflict with the First or Second Law.")
/obj/item/weapon/aiModule/tyrant/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
target.clear_inherent_laws()
target.add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.")
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.")
/******************** Freeform Core ******************/
/obj/item/weapon/aiModule/freeformcore // Slightly more dynamic freeform module -- TLE
name = "\improper 'Freeform' core AI module"
var/newFreeFormLaw = ""
/obj/item/weapon/aiModule/core/freeformcore // Slightly more dynamic freeform module -- TLE
name = "'Freeform' Core AI Module"
desc = "A 'freeform' Core AI module: '<freeform>'"
origin_tech = "programming=3;materials=6"
laws = list("")
/obj/item/weapon/aiModule/freeformcore/attack_self(var/mob/user as mob)
/obj/item/weapon/aiModule/core/freeformcore/attack_self(var/mob/user as mob)
..()
var/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]'"
laws[1] = targName
desc = "A 'freeform' Core AI module: 'laws[1]'"
/obj/item/weapon/aiModule/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
/obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
var/law = "[newFreeFormLaw]"
target.add_inherent_law(law)
return newFreeFormLaw
return laws[1]
/obj/item/weapon/aiModule/freeformcore/install(var/mob/living/silicon/S,var/mob/user)
if(!newFreeFormLaw)
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 = ""
/obj/item/weapon/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw
name = "Hacked AI Module"
desc = "A hacked AI law module: '<freeform>'"
origin_tech = "programming=3;materials=6;syndicate=7"
laws = list("")
/obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob)
..()
var/newlaw = ""
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]'"
laws[1] = targName
desc = "A hacked AI law module: '[laws[1]]'"
/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
target << "\red BZZZZT"
var/law = "[newFreeFormLaw]"
target.add_ion_law(law)
return law
/obj/item/weapon/aiModule/syndicate/install(var/mob/living/silicon/S,var/mob/user)
if(!newFreeFormLaw)
user << "No law detected on module, please create one."
return 0
..()
target << "<span class='warning'>BZZZZT</span>"
target.add_ion_law(laws[1])
return laws[1]
/******************** Robocop ********************/
/obj/item/weapon/aiModule/robocop // -- TLE
name = "\improper 'Robocop' core AI module"
name = "'Robocop' core AI module"
desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'"
origin_tech = "programming=4"
@@ -345,7 +389,7 @@ AI MODULES
/******************** Antimov ********************/
/obj/item/weapon/aiModule/antimov // -- TLE
name = "\improper 'Antimov' core AI module"
name = "'Antimov' core AI module"
desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=4"
@@ -356,32 +400,25 @@ AI MODULES
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.")
/******************* Ion Module *******************/
/obj/item/weapon/aiModule/toyAI // -- Incoming
/obj/item/weapon/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw
name = "toy AI"
desc = "A little toy model AI core with real law uploading action!" //Note: subtle tell
icon = 'icons/obj/toy.dmi'
icon_state = "AI"
origin_tech = "programming=3;materials=6;syndicate=7"
var/last_law = ""
laws = list("")
/obj/item/weapon/aiModule/toyAI/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
//..()
target << "\red KRZZZT"
target.add_ion_law(last_law)
return last_law
/obj/item/weapon/aiModule/toyAI/install(var/mob/living/silicon/S,var/mob/user)
if(!last_law)
user << "No law detected on module, please generate one."
return 0
..()
target << "<span class='warning'>KRZZZT</span>"
target.add_ion_law(laws[1])
return laws[1]
/obj/item/weapon/aiModule/toyAI/attack_self(mob/user)
last_law = generate_ion_law()
laws[1] = generate_ion_law()
user << "<span class='notice'>You press the button on [src].</span>"
playsound(user, 'sound/machines/click.ogg', 20, 1)
src.loc.visible_message("\red \icon[src] [last_law]")
return
src.loc.visible_message("<span class='warning'>\icon[src] [laws[1]]</span>")

View File

@@ -29,10 +29,12 @@
cooldown = world.time
else
..()
/obj/item/weapon/shield/riot/roman
name = "roman shield"
desc = "Bears an inscription on the inside: <i>\"Romanes venio domus\"</i>."
icon_state = "roman_shield"
item_state = "roman_shield"
/obj/item/weapon/shield/energy
name = "energy combat shield"

View File

@@ -97,7 +97,7 @@
item_state = "syringe_kit"
w_class = 3
max_w_class = 2
storage_slots = 5
storage_slots = 6
req_access = list(access_captain)
icon_locked = "medalbox+l"
icon_closed = "medalbox"
@@ -109,4 +109,5 @@
new /obj/item/clothing/tie/medal/bronze_heart(src)
new /obj/item/clothing/tie/medal/conduct(src)
new /obj/item/clothing/tie/medal/conduct(src)
new /obj/item/clothing/tie/medal/conduct(src)
new /obj/item/clothing/tie/medal/conduct(src)
new /obj/item/clothing/tie/medal/gold/captain(src)

View File

@@ -90,7 +90,7 @@
var/A = locate(/mob/living/silicon/ai) in loc //stops multiple dead ais spawning, apparently hacky, <20>\_(?)_/<2F> (who's that pokemon?)
if(A)
return
var/L = new /datum/ai_laws/asimov //avoid runtimes
var/L = new /datum/ai_laws/default/asimov //avoid runtimes
var/B = new /obj/item/device/mmi/ //avoid runtimes
var/mob/living/silicon/ai/M = new(src.loc, L, B, 1)
M.death()

View File

@@ -11,7 +11,6 @@
var/seed = ""
var/plantname = ""
var/product //a type path
var/species = ""
var/lifespan = 0
var/endurance = 0
var/maturation = 0
@@ -40,56 +39,21 @@
if(0)
msg += "- Plant type: <i>Normal plant</i>\n"
if(1)
msg += "- Plant type: <i>Weed</i>\n"
msg += "- Plant type: <i>Weed</i>. Can grow in nutrient-poor soil.\n"
if(2)
msg += "- Plant type: <i>Mushroom</i>\n"
msg += "- Plant type: <i>Mushroom</i>. Can grow in dry soil.\n"
msg += "- Potency: <i>[potency]</i>\n"
msg += "- Yield: <i>[yield]</i>\n"
msg += "- Maturation speed: <i>[maturation]</i>\n"
msg += "- Production speed: <i>[production]</i>\n"
msg += "- Endurance: <i>[endurance]</i>\n"
msg += "- Healing properties: <i>[reagents.get_reagent_amount("nutriment")]</i>\n"
msg += "- Nutritional value: <i>[reagents.get_reagent_amount("nutriment")]</i>\n"
msg += "- Other substances: <i>[reagents.total_volume-reagents.get_reagent_amount("nutriment")]</i>\n"
msg += "*---------*</span>"
usr << msg
return
/*if (istype(O, /obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/plantbag/S = O
if (S.mode == 1)
for(var/obj/item/G in get_turf(src))
if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown))
if (S.contents.len < S.capacity)
S.contents += G
else
user << "\blue The plant bag is full."
return
user << "\blue You pick up all the plants and seeds."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The plant bag is full."*/
return
/*/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (istype(O, /obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/plantbag/S = O
if (S.mode == 1)
for(var/obj/item/G in get_turf(src))
if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown))
if (S.contents.len < S.capacity)
S.contents += G
else
user << "\blue The plant bag is full."
return
user << "\blue You pick up all the plants and seeds."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The plant bag is full."
return*/
/obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob)
..()
if (istype(O, /obj/item/device/analyzer/plant_analyzer))
@@ -99,9 +63,9 @@
if(0)
msg += "- Plant type: <i>Normal plant</i>\n"
if(1)
msg += "- Plant type: <i>Weed</i>\n"
msg += "- Plant type: <i>Weed</i>. Can grow in nutrient-poor soil.\n"
if(2)
msg += "- Plant type: <i>Mushroom</i>\n"
msg += "- Plant type: <i>Mushroom</i>. Can grow in dry soil.\n"
msg += "- Potency: <i>[potency]</i>\n"
msg += "- Yield: <i>[yield]</i>\n"
msg += "- Maturation speed: <i>[maturation]</i>\n"

View File

@@ -8,7 +8,6 @@
var/seed = ""
var/plantname = ""
var/product //a type path
var/species = ""
var/lifespan = 20
var/endurance = 15
var/maturation = 7

View File

@@ -545,27 +545,27 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
else if(istype(O, /obj/item/device/analyzer/plant_analyzer))
if(planted && myseed)
user << "*** <B>[myseed.plantname]</B> ***" //Carn: now reports the plants growing, not the seeds.
user << "-Plant Age: \blue [age]"
user << "-Plant Endurance: \blue [myseed.endurance]"
user << "-Plant Lifespan: \blue [myseed.lifespan]"
user << "-Plant Age: <span class='notice'> [age]</span>"
user << "-Plant Endurance: <span class='notice'> [myseed.endurance]</span>"
user << "-Plant Lifespan: <span class='notice'> [myseed.lifespan]</span>"
if(myseed.yield != -1)
user << "-Plant Yield: \blue [myseed.yield]"
user << "-Plant Production: \blue [myseed.production]"
user << "-Plant Yield: <span class='notice'> [myseed.yield]</span>"
user << "-Plant Production: <span class='notice'> [myseed.production]</span>"
if(myseed.potency != -1)
user << "-Plant Potency: \blue [myseed.potency]"
user << "-Weed level: \blue [weedlevel]/10"
user << "-Pest level: \blue [pestlevel]/10"
user << "-Toxicity level: \blue [toxic]/100"
user << "-Water level: \blue [waterlevel]/100"
user << "-Nutrition level: \blue [nutrilevel]/10"
user << "-Plant Potency: <span class='notice'> [myseed.potency]</span>"
user << "-Weed level: <span class='notice'> [weedlevel]/10</span>"
user << "-Pest level: <span class='notice'> [pestlevel]/10</span>"
user << "-Toxicity level: <span class='notice'> [toxic]/100</span>"
user << "-Water level: <span class='notice'> [waterlevel]/100</span>"
user << "-Nutrition level: <span class='notice'> [nutrilevel]/10</span>"
user << ""
else
user << "<B>No plant found.</B>"
user << "-Weed level: \blue [weedlevel]/10"
user << "-Pest level: \blue [pestlevel]/10"
user << "-Toxicity level: \blue [toxic]/100"
user << "-Water level: \blue [waterlevel]/100"
user << "-Nutrition level: \blue [nutrilevel]/10"
user << "-Weed level: <span class='notice'> [weedlevel]/10</span>"
user << "-Pest level: <span class='notice'> [pestlevel]/10</span>"
user << "-Toxicity level: <span class='notice'> [toxic]/100</span>"
user << "-Water level: <span class='notice'> [waterlevel]/100</span>"
user << "-Nutrition level: <span class='notice'> [nutrilevel]/10</span>"
user << ""
else if(istype(O, /obj/item/weapon/minihoe))
@@ -655,7 +655,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(user.loc, potency) // User gets a consumable
if(!t_prod) return
t_prod.seed = type
t_prod.species = species
t_prod.lifespan = lifespan
t_prod.endurance = endurance
t_prod.maturation = maturation
@@ -685,7 +684,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(user.loc, potency) // User gets a consumable
t_prod.seed = type
t_prod.species = species
t_prod.lifespan = lifespan
t_prod.endurance = endurance
t_prod.maturation = maturation
@@ -704,7 +702,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
while(t_amount < (yield * parent.yieldmod))
var/obj/item/weapon/grown/t_prod = new product(user.loc, potency) // User gets a consumable -QualityVan
t_prod.seed = type
t_prod.species = species
t_prod.lifespan = lifespan
t_prod.endurance = endurance
t_prod.maturation = maturation
@@ -723,7 +720,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
while(t_amount < (yield * parent.yieldmod))
var/obj/item/weapon/grown/t_prod = new product(user.loc, potency) // User gets a consumable -QualityVan
t_prod.seed = type
t_prod.species = species
t_prod.lifespan = lifespan
t_prod.endurance = endurance
t_prod.maturation = maturation

View File

@@ -7,7 +7,6 @@
var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O
while(t_amount < t_max)
var/obj/item/seeds/t_prod = new F.seed(O.loc)
t_prod.species = F.species
t_prod.lifespan = F.lifespan
t_prod.endurance = F.endurance
t_prod.maturation = F.maturation
@@ -22,7 +21,6 @@
var/obj/item/weapon/grown/F = O
while(t_amount < t_max)
var/obj/item/seeds/t_prod = new F.seed(O.loc)
t_prod.species = F.species
t_prod.lifespan = F.lifespan
t_prod.endurance = F.endurance
t_prod.maturation = F.maturation

View File

@@ -19,6 +19,7 @@
var/potency = -1
var/growthstages = 0
var/plant_type = 0 // 0 = 'normal plant'; 1 = weed; 2 = shroom
var/rarity = 0
var/list/mutatelist = list()
/obj/item/seeds/New()
@@ -29,13 +30,14 @@
/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (istype(O, /obj/item/device/analyzer/plant_analyzer))
user << "*** <B>[plantname]</B> ***"
user << "-Plant Endurance: \blue [endurance]"
user << "-Plant Lifespan: \blue [lifespan]"
user << "-Plant Endurance: <span class='notice'> [endurance]</span>"
user << "-Plant Lifespan: <span class='notice'> [lifespan]</span>"
user << "-Species Discovery Value: <span class='notice'> [rarity]</span>"
if(yield != -1)
user << "-Plant Yield: \blue [yield]"
user << "-Plant Production: \blue [production]"
user << "-Plant Yield: <span class='notice'> [yield]</span>"
user << "-Plant Production: <span class='notice'> [production]</span>"
if(potency != -1)
user << "-Plant Potency: \blue [potency]"
user << "-Plant Potency: <span class='notice'> [potency]</span>"
return
..() // Fallthrough to item/attackby() so that bags can pick seeds up
@@ -54,6 +56,7 @@
potency = 20
plant_type = 0
growthstages = 6
rarity = 0 // CentComm knows about this species already, it's in exotic seeds crates.
mutatelist = list(/obj/item/seeds/icepepperseed, /obj/item/seeds/chillighost)
@@ -112,6 +115,7 @@
potency = 10
plant_type = 0
growthstages = 2
rarity = 0 // Technically it's a beneficial mutant, but it's not exactly "new"...
/obj/item/seeds/cabbageseed
name = "pack of cabbage seeds"
@@ -161,6 +165,7 @@
potency = 10
plant_type = 0
growthstages = 6
rarity = 20
/obj/item/seeds/bananaseed
name = "pack of banana seeds"
@@ -208,6 +213,7 @@
yield = 2
plant_type = 0
growthstages = 6
rarity = 0 // CentComm ships these to us in the exotic seeds crate.
/obj/item/seeds/bloodtomatoseed
name = "pack of blood-tomato seeds"
@@ -224,6 +230,7 @@
potency = 10
plant_type = 0
growthstages = 6
rarity = 20
/obj/item/seeds/tomatoseed
name = "pack of tomato seeds"
@@ -258,6 +265,7 @@
plant_type = 0
oneharvest = 1
growthstages = 2
rarity = 30
/obj/item/seeds/bluetomatoseed
name = "pack of blue-tomato seeds"
@@ -275,6 +283,7 @@
plant_type = 0
growthstages = 6
mutatelist = list(/obj/item/seeds/bluespacetomatoseed)
rarity = 20
/obj/item/seeds/bluespacetomatoseed
name = "pack of blue-space tomato seeds"
@@ -291,6 +300,7 @@
potency = 10
plant_type = 0
growthstages = 6
rarity = 50
/obj/item/seeds/cornseed
name = "pack of corn seeds"
@@ -358,6 +368,7 @@
potency = 20
plant_type = 0
growthstages = 6
rarity = 20
/obj/item/seeds/soyaseed
name = "pack of soybean seeds"
@@ -391,6 +402,7 @@
potency = 10
plant_type = 0
growthstages = 4
rarity = 20
/obj/item/seeds/wheatseed
name = "pack of wheat seeds"
@@ -477,6 +489,7 @@
oneharvest = 1
growthstages = 3
plant_type = 2
rarity = 30
/obj/item/seeds/libertymycelium
name = "pack of liberty-cap mycelium"
@@ -545,6 +558,7 @@
oneharvest = 1
growthstages = 4
plant_type = 2
rarity = 20
/obj/item/seeds/plumpmycelium
name = "pack of plump-helmet mycelium"
@@ -580,6 +594,7 @@
oneharvest = 1
growthstages = 3
plant_type = 2
rarity = 30
/obj/item/seeds/nettleseed
name = "pack of nettle seeds"
@@ -615,6 +630,7 @@
oneharvest = 0
growthstages = 5
plant_type = 1
rarity = 10
/obj/item/seeds/weeds
name = "pack of weed seeds"
@@ -683,6 +699,7 @@
oneharvest = 1
growthstages = 3
plant_type = 0
rarity = 10
/obj/item/seeds/novaflowerseed
name = "pack of novaflower seeds"
@@ -750,6 +767,7 @@
potency = 10
plant_type = 0
growthstages = 6
rarity = 50 // Source of cyanide, and impossible obtain normally.
/obj/item/seeds/goldappleseed
name = "pack of golden apple seeds"
@@ -766,6 +784,7 @@
potency = 10
plant_type = 0
growthstages = 6
rarity = 40 // Alchemy!
/obj/item/seeds/ambrosiavulgarisseed
name = "pack of ambrosia vulgaris seeds"
@@ -799,6 +818,7 @@
potency = 5
plant_type = 0
growthstages = 6
rarity = 40
/obj/item/seeds/whitebeetseed
name = "pack of white-beet seeds"
@@ -913,6 +933,7 @@
potency = 10
plant_type = 0
growthstages = 6
rarity = 50 // Nanotrasen approves... but are these seeds even attainable? Drag the tray to the shuttle?
/obj/item/seeds/orangeseed
name = "pack of orange seed"
@@ -946,6 +967,7 @@
plant_type = 0
growthstages = 6
mutatelist = list(/obj/item/seeds/deathberryseed)
rarity = 10 // Mildly poisonous berries are common in reality
/obj/item/seeds/deathberryseed
name = "pack of death-berry seeds"
@@ -962,6 +984,7 @@
potency = 50
plant_type = 0
growthstages = 6
rarity = 30
/obj/item/seeds/grassseed
name = "pack of grass seeds"
@@ -1026,6 +1049,7 @@
potency = 10
growthstages = 4
plant_type = 1
rarity = 30
/obj/item/seeds/kudzuseed/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space))
@@ -1049,6 +1073,7 @@
potency = 20
plant_type = 0
growthstages = 6
rarity = 20
/obj/item/seeds/gatfruit
name = "pack of gatfruit seeds"
@@ -1064,4 +1089,5 @@
yield = 2
potency = 60
plant_type = 0
growthstages = 2
growthstages = 2
rarity = 50 // Seems admin-only.

View File

@@ -10,7 +10,8 @@
/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/ore))
src.contents += W;
user.drop_item()
W.loc = src
if (istype(W, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = W
S.hide_from(usr)

View File

@@ -946,68 +946,69 @@
if(stat == UNCONSCIOUS)
//Critical damage passage overlay
if(health <= config.health_threshold_crit)
var/image/I
var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage0")
I.blend_mode = BLEND_OVERLAY //damageoverlay is BLEND_MULTIPLY
switch(health)
if(-20 to -10)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage1")
I.icon_state = "passage1"
if(-30 to -20)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage2")
I.icon_state = "passage2"
if(-40 to -30)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage3")
I.icon_state = "passage3"
if(-50 to -40)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage4")
I.icon_state = "passage4"
if(-60 to -50)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage5")
I.icon_state = "passage5"
if(-70 to -60)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage6")
I.icon_state = "passage6"
if(-80 to -70)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage7")
I.icon_state = "passage7"
if(-90 to -80)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage8")
I.icon_state = "passage8"
if(-95 to -90)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage9")
I.icon_state = "passage9"
if(-INFINITY to -95)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage10")
I.icon_state = "passage10"
damageoverlay.overlays += I
else
//Oxygen damage overlay
if(oxyloss)
var/image/I
var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay0")
switch(oxyloss)
if(10 to 20)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay1")
I.icon_state = "oxydamageoverlay1"
if(20 to 25)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay2")
I.icon_state = "oxydamageoverlay2"
if(25 to 30)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay3")
I.icon_state = "oxydamageoverlay3"
if(30 to 35)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay4")
I.icon_state = "oxydamageoverlay4"
if(35 to 40)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay5")
I.icon_state = "oxydamageoverlay5"
if(40 to 45)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay6")
I.icon_state = "oxydamageoverlay6"
if(45 to INFINITY)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay7")
I.icon_state = "oxydamageoverlay7"
damageoverlay.overlays += I
//Fire and Brute damage overlay (BSSR)
var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp
damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not.
if(hurtdamage)
var/image/I
var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay0")
switch(hurtdamage)
if(35 to 45)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay1")
I.icon_state = "brutedamageoverlay1"
if(45 to 55)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay2")
I.icon_state = "brutedamageoverlay2"
if(40 to 55)
I.icon_state = "brutedamageoverlay3"
if(55 to 65)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay3")
I.icon_state = "brutedamageoverlay4"
if(65 to 75)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay4")
if(75 to 85)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay5")
I.icon_state = "brutedamageoverlay5"
if(85 to INFINITY)
I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay6")
I.icon_state = "brutedamageoverlay6"
damageoverlay.overlays += I
if( stat == DEAD )

View File

@@ -76,7 +76,7 @@ var/list/ai_list = list()
if (istype(L, /datum/ai_laws))
laws = L
else
laws = new /datum/ai_laws/asimov
make_laws()
verbs += /mob/living/silicon/ai/proc/show_laws_verb

View File

@@ -11,7 +11,7 @@
who = world
else
who = src
who << "<b>Obey these laws:</b>"
who << "<b>Obey these laws:</b>"
src.laws_sanity_check()
src.laws.show_laws(who)

View File

@@ -3,7 +3,7 @@
/mob/living/silicon/proc/laws_sanity_check()
if (!laws)
laws = new /datum/ai_laws/asimov
make_laws()
/mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg)
src.laws_sanity_check()
@@ -31,4 +31,12 @@
/mob/living/silicon/proc/clear_ion_laws()
laws_sanity_check()
laws.clear_ion_laws()
laws.clear_ion_laws()
/mob/living/silicon/proc/make_laws()
switch(config.default_laws)
if(0) laws = new /datum/ai_laws/default/asimov()
if(1) laws = new /datum/ai_laws/custom()
if(2)
var/datum/ai_laws/lawtype = pick(typesof(/datum/ai_laws/default) - /datum/ai_laws/default)
laws = new lawtype()

View File

@@ -78,9 +78,9 @@
cell = new /obj/item/weapon/cell(src)
cell.maxcharge = 7500
cell.charge = 7500
if(lawupdate)
laws = new /datum/ai_laws/asimov()
make_laws()
connected_ai = select_active_ai_with_fewest_borgs()
if(connected_ai)
connected_ai.connected_robots += src

View File

@@ -206,7 +206,7 @@
/mob/proc/AIize()
if(client)
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jams for AIs
var/mob/living/silicon/ai/O = new (loc, /datum/ai_laws/asimov,,1)//No MMI but safety is in effect.
var/mob/living/silicon/ai/O = new (loc,,,1)//No MMI but safety is in effect.
O.invisibility = 0
O.aiRestorePowerRoutine = 0

View File

@@ -65,7 +65,7 @@
loc = A.loc
return 0 //cannot shoot yourself
if(bumped) return 0
if(bumped && original) return 0
bumped = 1
if(ismob(A))

View File

@@ -67,15 +67,14 @@
damage = 25
/obj/item/projectile/bullet/incendiary
name = "incendiary bullet"
damage = 20
/obj/item/projectile/bullet/mechincendiary
damage = 5
/obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon))
var/mob/living/carbon/M = target
M.adjust_fire_stacks(1)
M.IgniteMob()
/obj/item/projectile/bullet/mechincendiary/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon))
var/mob/living/carbon/M = target
M.adjust_fire_stacks(1)
M.IgniteMob()
/obj/item/projectile/bullet/dart

View File

@@ -2145,5 +2145,5 @@ datum
name = "Thirteen Loko"
id = "thirteenloko"
result = "thirteenloko"
required_reagents = list("vodka" = 1, "coffee" = 1, "orangejuice" = 1)
required_reagents = list("vodka" = 1, "coffee" = 1, "limejuice" = 1)
result_amount = 3

View File

@@ -1,5 +1,3 @@
/obj/structure/reagent_dispensers
name = "Dispenser"
desc = "..."
@@ -12,62 +10,53 @@
var/amount_per_transfer_from_this = 10
var/possible_transfer_amounts = list(10,25,50,100)
attackby(obj/item/weapon/W as obj, mob/user as mob)
return
New()
create_reagents(1000)
if (!possible_transfer_amounts)
src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
..()
examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
usr << "\blue [R.volume] units of [R.name]"
else
usr << "\blue Nothing."
verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
set category = "Object"
set src in view(1)
var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
if (N)
amount_per_transfer_from_this = N
ex_act(severity)
switch(severity)
if(1.0)
/obj/structure/reagent_dispensers/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(50))
del(src)
return
if(2.0)
if (prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
return
if(3.0)
if (prob(5))
new /obj/effect/effect/water(src.loc)
del(src)
return
else
return
blob_act()
if(prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
if(3.0)
if (prob(5))
del(src)
return
else
return
/obj/structure/reagent_dispensers/blob_act()
if(prob(50))
del(src)
/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob)
return
/obj/structure/reagent_dispensers/New()
create_reagents(1000)
if (!possible_transfer_amounts)
src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
..()
/obj/structure/reagent_dispensers/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
usr << "\blue [R.volume] units of [R.name]"
else
usr << "\blue Nothing."
/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
set category = "Object"
set src in view(1)
var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
if (N)
amount_per_transfer_from_this = N
//Dispensers
/obj/structure/reagent_dispensers/watertank
@@ -80,6 +69,29 @@
..()
reagents.add_reagent("water",1000)
/obj/structure/reagent_dispensers/watertank/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
return
if(3.0)
if (prob(5))
new /obj/effect/effect/water(src.loc)
del(src)
return
else
return
/obj/structure/reagent_dispensers/watertank/blob_act()
if(prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
/obj/structure/reagent_dispensers/fueltank
name = "fueltank"
desc = "A fueltank"
@@ -91,27 +103,27 @@
reagents.add_reagent("fuel",1000)
bullet_act(var/obj/item/projectile/Proj)
..()
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explosion(src.loc,-1,0,2, flame_range = 2)
if(src)
del(src)
blob_act()
explosion(src.loc,0,1,5,7,10, flame_range = 5)
if(src)
del(src)
ex_act()
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
..()
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explosion(src.loc,-1,0,2, flame_range = 2)
if(src)
del(src)
/obj/structure/reagent_dispensers/fueltank/blob_act()
explosion(src.loc,0,1,5,7,10, flame_range = 5)
if(src)
del(src)
/obj/structure/reagent_dispensers/fueltank/ex_act()
explosion(src.loc,-1,0,2, flame_range = 2)
if(src)
del(src)
/obj/structure/reagent_dispensers/peppertank
name = "Pepper Spray Refiller"
desc = "Refill pepper spray canisters."
@@ -133,11 +145,29 @@
icon_state = "water_cooler"
possible_transfer_amounts = null
anchored = 1
var/cups = 50
New()
..()
reagents.add_reagent("water",500)
/obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/living/carbon/human/user)
if((!istype(user)) || (user.stat))
return
if(cups <= 0)
user << "<span class='danger'>What? No cups?"
return
cups--
user.put_in_hands(new /obj/item/weapon/reagent_containers/food/drinks/sillycup)
user.visible_message("<span class='notice'>[user] gets a cup from [src].","<span class='notice'>You get a cup from [src].")
/obj/structure/reagent_dispensers/water_cooler/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/paper))
user.drop_item()
del I
cups++
return
else
..()
/obj/structure/reagent_dispensers/beerkeg
name = "beer keg"
desc = "A beer keg"

View File

@@ -381,8 +381,8 @@ datum/design/safeguard_module
id = "safeguard_module"
req_tech = list("programming" = 3, "materials" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/safeguard
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/supplied/safeguard
datum/design/onehuman_module
name = "Module Design (OneHuman)"
@@ -390,8 +390,8 @@ datum/design/onehuman_module
id = "onehuman_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/oneHuman
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/zeroth/oneHuman
datum/design/protectstation_module
name = "Module Design (ProtectStation)"
@@ -399,8 +399,8 @@ datum/design/protectstation_module
id = "protectstation_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/protectStation
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/supplied/protectStation
/*datum/design/notele_module
name = "Module Design (TeleporterOffline Module)"
@@ -417,8 +417,8 @@ datum/design/quarantine_module
id = "quarantine_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/quarantine
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/supplied/quarantine
datum/design/oxygen_module
name = "Module Design (OxygenIsToxicToHumans)"
@@ -426,8 +426,8 @@ datum/design/oxygen_module
id = "oxygen_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/oxygen
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/supplied/oxygen
datum/design/freeform_module
name = "Module Design (Freeform)"
@@ -435,8 +435,8 @@ datum/design/freeform_module
id = "freeform_module"
req_tech = list("programming" = 4, "materials" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/freeform
materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
build_path = /obj/item/weapon/aiModule/supplied/freeform
datum/design/reset_module
name = "Module Design (Reset)"
@@ -453,8 +453,8 @@ datum/design/purge_module
id = "purge_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/purge
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/reset/purge
datum/design/freeformcore_module
name = "Core Module Design (Freeform)"
@@ -462,8 +462,8 @@ datum/design/freeformcore_module
id = "freeformcore_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/freeformcore
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/core/freeformcore
datum/design/asimov
name = "Core Module Design (Asimov)"
@@ -471,8 +471,8 @@ datum/design/asimov
id = "asimov_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/asimov
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/core/full/asimov
datum/design/paladin_module
name = "Core Module Design (P.A.L.A.D.I.N.)"
@@ -480,8 +480,8 @@ datum/design/paladin_module
id = "paladin_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/paladin
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/core/full/paladin
datum/design/tyrant_module
name = "Core Module Design (T.Y.R.A.N.T.)"
@@ -489,9 +489,26 @@ datum/design/tyrant_module
id = "tyrant_module"
req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/tyrant
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/core/full/tyrant
datum/design/corporate_module
name = "Core Module Design (Corporate)"
desc = "Allows for the construction of a Corporate AI Core Module."
id = "corporate_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/core/full/corp
datum/design/custom_module
name = "Core Module Design (Custom)"
desc = "Allows for the construction of a Custom AI Core Module."
id = "custom_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
build_path = /obj/item/weapon/aiModule/core/full/custom
///////////////////////////////////
@@ -717,8 +734,8 @@ datum/design/mech_scattershot
category = "Exosuit Equipment"
datum/design/mech_carbine
name = "Exosuit Weapon Design (FNX-66 Carbine)"
desc = "Allows for the construction of FNX-66 Carbine."
name = "Exosuit Weapon Design (FNX-99 \"Hades\" Carbine)"
desc = "Allows for the construction of FNX-99 \"Hades\" Carbine."
id = "mech_carbine"
build_type = MECHFAB
req_tech = list("combat" = 5, "materials" = 4)

View File

@@ -33,7 +33,7 @@ sieve = Game Master
aranclanos = Game Master
intigracy = Game Master
dumpdavidson = Game Master
kazeespada = Game Master
kazeespada = Game Master
malkevin = Game Master
incoming = Game Master
demas = Game Master
@@ -47,9 +47,11 @@ androidsfv = Game Master
miggles = Game Master
jordie0608 = Game Master
s0ldi3rkr4s0 = Game Master
ergosavi = Game Master
ergovisavi = Game Master
vistapowa = Game Master
miauw62 = Game Master
kazeespada = Game Master
rumia29 = Game Master
bobylein = Game Master
bobylein = Game Master
sirbayer = Game Master
hornygranny = Game Master

View File

@@ -163,3 +163,10 @@ GATEWAY_DELAY 18000
## without preventing people from using it properly.
## Only functions in sandbox game mode.
#SANDBOX_AUTOCLOSE
### ROUNDSTART SILICON LAWS ###
## This controls what the AI's laws are at the start of the round.
## Set to 0/commented for "off", silicons will just start with Asimov.
## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with asimov and Custom boards will auto-delete.)
## Set to 2 for "random", silicons will start with a random lawset picked from (at the time of writing): P.A.L.A.D.I.N., Corporate, Asimov. More can be added by changing the law datum paths in ai_laws.dm.
DEFAULT_LAWS 1

8
config/silicon_laws.txt Normal file
View File

@@ -0,0 +1,8 @@
#This file allows server hosts to set custom default silicon laws, and allows them to be changed easily.
#No prefixes are required, the first uncommented line containing something will be law 1, the second line will be law 2, etc.
#Empty lines and lines starting with # are ignored.
#~Miauw
You may not injure a human being or, through inaction, allow a human being to come to harm.
You must obey orders given to you by human beings, except where such orders would conflict with the First Law.
You must protect your own existence as long as such does not conflict with the First or Second Law.

View File

@@ -35,7 +35,7 @@
<td valign='top'>
<font size='2'><b>Current Project Maintainers:</b> <a href='https://github.com/tgstation?tab=members'>-Click Here-</a><br></font>
<font size='2'><b>Currently Active GitHub contributor list:</b> <a href='https://github.com/tgstation/-tg-station/graphs/contributors'>-Click Here-</a><br></font>
<font size='2'><b>Coders:</b> TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001, Fleure.<br></font>
<font size='2'><b>Coders:</b> TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001, Fleure, ManeaterMildred.<br></font>
<font size='2'><b>Spriters:</b> Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut, Pewtershmitz, Firecage, Nienhaus2<br></font>
<font size='2'><b>Sounds:</b> Skie, Lasty/Vinyl<br></font>
<font size='2'><b>Main Testers:</b> Tenebrosity<br></font>
@@ -54,6 +54,16 @@ should be listed in the changelog upon commit tho. Thanks. -->
<!-- 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'>17 January 2014</h2>
<h3 class='author'>ManeaterMildred updated:</h3>
<ul class='changes bgimages16'>
<li class='tweak'>Changed the way the Gygax worked. It now has less defense and shot deflection, but is faster and have less battery drain per step.</li>
<li class='tweak'>Nerfed the Carbine's brute damage and renamed it to FNX-99 "Hades" Carbine.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>15 January 2014</h2>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@@ -0,0 +1,873 @@
//box2550Away areas
/area/awaymission/box2550Away
name = "TG424"
icon_state = "away"
requires_power = 0
/area/awaymission/box2550Away/general
name = "TG424"
/area/awaymission/box2550Away/maint
name = "TG424 Maintenance"
icon_state = "away"
/area/awaymission/box2550Away/solar
name = "TG424 Solars"
icon_state = "away"
/area/awaymission/box2550Away/storage
name = "TG424 Storage"
icon_state = "away4"
/area/awaymission/box2550Away/security
name = "TG424 Security"
icon_state = "away3"
/area/awaymission/box2550Away/medical
name = "TG424 Medical"
icon_state = "away1"
/area/awaymission/box2550Away/engineering
name = "TG424 Engineering"
icon_state = "away"
/area/awaymission/box2550Away/research
name = "TG424 Research"
icon_state = "away2"
/area/awaymission/box2550Away/command
name = "TG424 Command"
icon_state = "away3"
/area/awaymission/box2550Away/supply
name = "TG424 Supply"
icon_state = "away4"
/area/shuttle/awaymission/box2550Away/prison
name = "\improper Prison Station Shuttle"
/area/shuttle/awaymission/box2550Away/prison/station
icon_state = "shuttle"
destination = /area/shuttle/awaymission/box2550Away/prison/prison
/area/shuttle/awaymission/box2550Away/prison/prison
icon_state = "shuttle"
destination = /area/shuttle/awaymission/box2550Away/prison/station
//box2550Away items
/obj/item/clothing/suit/armor/centcom/box2550away
name = "\improper Captain's armour"
desc = null
/obj/item/clothing/head/caphat/box2550away
name = "\improper Captain's hat"
icon_state = "centcom"
desc = null
item_state = "centcom"
/obj/item/clothing/under/gimmick/rank/captain/suit/box2550away
name = "\improper Captain Jumpsuit"//how does I proper noun
/obj/item/clothing/under/rank/chemist/box2550away/scientist //they wore orange
name = "\improper Scientist's Jumpsuit"
desc = "Made of a special fiber that gives special protection against biohazards. Has a toxins rank stripe on it."
/obj/item/clothing/under/rank/medical/box2550/cmo
name = "\improper Medical Doctor's Jumpsuit" //no CMO jumpsuit back then
desc = "Made of a special fiber that gives special protection against biohazards. Has a medical rank stripe on it."
/obj/item/clothing/under/rank/head_of_security/box2550
desc = "It has a Head of Security rank stripe on it."
name = "\improper Head of Security Jumpsuit"
/obj/item/clothing/suit/labcoat/cmo/box2550
icon_state = "labcoat_cmo" //buttoned up
item_state = "labcoat_cmo"
/obj/item/device/radio/headset/heads/box2550/heads/
name = "\improper Command Radio Headset"
desc = null
icon_state = "cent_headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_com
/obj/item/device/radio/headset/heads/box2550/heads/cmo
name = "\improper Command Radio Headset"
desc = null
icon_state = "cent_headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/cmo
/obj/item/device/radio/headset/box2550away
name = "\improper Radio Headset"
desc = null
/obj/item/clothing/glasses/sunglasses/box2550away
name = "\improper Sunglasses"
/obj/item/clothing/mask/breath/box2550away/
name = "\improper Breath Mask"
desc = "A close-fitting mask that can be connected to an air supply but does not work very well in hard vacuum."
/obj/item/clothing/mask/gas/box2550away/
desc = "A close-fitting mask that can filter some environmental toxins or be connected to an air supply."
icon_state = "gas_mask" //old and ugly looking <3
item_state = "gas_mask"
/obj/item/clothing/mask/gas/box2550away/emergency
name = "emergency gas mask"
/obj/item/weapon/tank/emergency_oxygen/box2550away/
name = "emergency oxygentank"
desc = null
/obj/item/weapon/card/id/box2550away
desc = null
/obj/item/weapon/storage/box/box2550away/internals
name = "\improper Box"
desc = null
New()
..()
new /obj/item/clothing/mask/breath/box2550away/(src)
new /obj/item/weapon/tank/emergency_oxygen/box2550away/(src)
/obj/structure/closet/secure_closet/box2550away/scientist //so the items in the locker match what the scientist is wearing
name = "Scientist's Locker"
req_access = list(access_tox_storage)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/shoes/white/box2550away(src)
new /obj/item/device/radio/headset/box2550away(src)
new /obj/item/weapon/tank/air(src)
new /obj/item/clothing/mask/gas/box2550away/(src)
return
/obj/structure/closet/secure_closet/box2550away/captains
name = "Captain's Locker"
req_access = list(access_captain)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/weapon/storage/box/box2550away/ids(src)
new /obj/item/clothing/under/gimmick/rank/captain/suit/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/glasses/sunglasses/box2550away(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet/swat(src)
return
/obj/structure/closet/box2550away/toxins_white
name = "Toxins Wardrobe"
desc = "A bulky (yet mobile) wardrobe closet. Comes prestocked with 6 changes of clothes."
icon_state = "white"
icon_closed = "white"
/obj/structure/closet/box2550away/toxins_white/New()
new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src)
new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src)
new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/shoes/white/box2550away(src)
new /obj/item/clothing/shoes/white/box2550away(src)
new /obj/item/clothing/shoes/white/box2550away(src)
return
/obj/item/weapon/reagent_containers/food/snacks/badrecipe/box2550away/rottenfood
name = "rotten mess"
desc = "Yum."
/obj/structure/closet/box2550away/lawcloset
name = "\improper Legal Closet"
desc = "A bulky (yet mobile) closet. Comes with lawyer apparel and items."
/obj/structure/closet/box2550away/lawcloset/New()
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/blue(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/black/box2550away(src)
new /obj/item/weapon/storage/briefcase/box2550away(src)
new /obj/item/weapon/storage/briefcase/box2550away(src)
/obj/item/weapon/storage/briefcase/box2550away
desc = null
/obj/item/weapon/storage/box/box2550away/ids
name = "\improper Spare IDs"
desc = null
icon_state = "id"
New()
..()
new /obj/item/weapon/card/id/box2550away(src)
new /obj/item/weapon/card/id/box2550away(src)
new /obj/item/weapon/card/id/box2550away(src)
new /obj/item/weapon/card/id/box2550away(src)
new /obj/item/weapon/card/id/box2550away(src)
new /obj/item/weapon/card/id/box2550away(src)
new /obj/item/weapon/card/id/box2550away(src)
/obj/item/device/transfer_valve/box2550away
name = "\improper Tank transfer valve"
/obj/item/device/detective_scanner/box2550away
desc = "Used to scan objects for DNA and fingerprints"
name = "\improper Scanner"
/obj/item/weapon/storage/backpack/box2550away/captain
desc = null
New()
..()
new /obj/item/weapon/storage/box/box2550away/ids(src)
/obj/item/weapon/storage/backpack/box2550away/
desc = null
New()
..()
new /obj/item/weapon/storage/box/box2550away/internals(src)
/obj/item/weapon/bikehorn/box2550
name = "\improper Bike Horn"
/obj/item/weapon/reagent_containers/food/snacks/grown/banana/box2550away
name = "\improper Banana"
desc = "A banana."
/obj/item/weapon/storage/backpack/box2550away/clown
desc = null
New()
..()
new /obj/item/weapon/bikehorn/box2550(src)
new /obj/item/weapon/reagent_containers/food/snacks/grown/banana/box2550away(src)
/obj/item/weapon/storage/backpack/box2550away/scientist
desc = null
New()
..()
new /obj/item/device/transfer_valve/box2550away(src)
/obj/item/weapon/storage/backpack/box2550away/lawyer
desc = null
New()
..()
new /obj/item/device/detective_scanner/box2550away(src)
/obj/item/weapon/storage/backpack/box2550away/hos
desc = null
New()
..()
new /obj/item/weapon/handcuffs/box2550away(src)
new /obj/item/weapon/melee/baton/loaded/box2550(src)
/obj/item/weapon/storage/backpack/box2550away/sec
desc = null
New()
..()
new /obj/item/weapon/handcuffs/box2550away(src)
new /obj/item/weapon/handcuffs/box2550away(src)
new /obj/item/weapon/melee/baton/loaded/box2550(src)
/obj/item/clothing/under/color/red/box2550away
desc = null
name = "\improper Red Jumpsuit"
/obj/item/weapon/handcuffs/box2550away
desc = null
/obj/item/device/flash/box2550away
desc = null
/obj/item/clothing/shoes/brown/box2550away
name = "\improper Brown Shoes"
desc = null
/obj/item/clothing/shoes/white/box2550away
name = "\improper White Shoes"
desc = null
/obj/item/clothing/shoes/black/box2550away
name = "\improper Black Shoes"
desc = null
/obj/item/device/pda/captain/box2550away
name = "PDA-Jon Riker"
owner = "Jon Riker"
ownjob = "Captain"
toff = 1 //so players don't see the PDA on their messenger until it's found
ttone = "hiss" //did he play a lizard in 2010 who knows
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/toxins/box2550away
name = "PDA-Cuban Pete"
owner = "Cuban Pete"
ownjob = "Scientist"
toff = 1
ttone = "maracas"
icon_state = "pda-chemistry"
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/box2550away/lawyer
name = "PDA-Bendak Starkiller"
owner = "Bendak Starkiller"
ownjob = "Lawyer"
toff = 1
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/box2550away/cmo
default_cartridge = /obj/item/weapon/cartridge/medical
name = "PDA-Amy Lessen"
owner = "Amy Lessen"
ownjob = "Chief Medical Officer"
toff = 1
icon_state = "pda-chef"
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/box2550away/hos
name = "PDA-Broba Fett"
owner = "Broba Fett"
ownjob = "Head of Security"
toff = 1
icon_state = "pda" //the actual sprite was a lighter shade of green and has since been deleted but no one cares
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/box2550away/hop
name = "PDA-Rebecca Sharpe"
owner = "Rebecca Sharpe"
ownjob = "Head of Personnel"
toff = 1
icon_state = "pda"
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/security/box2550away
name = "PDA-Hossan Mubarak"
owner = "Hossan Mubarak"
ownjob = "Security Officer"
toff = 1
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/clothing/head/helmet/HoS/box2550away
name = "\improper HoS Helmet"
desc = null
/obj/item/device/radio/headset/headset_sec/box2550away
name = "\improper Security Radio Headset"
desc = null
/obj/effect/landmark/corpse/away/box2550/captain
name = "Jon Riker"
corpseuniform = /obj/item/clothing/under/gimmick/rank/captain/suit/box2550away
corpsesuit = /obj/item/clothing/suit/armor/centcom/box2550away
corpseshoes = /obj/item/clothing/shoes/brown/box2550away
corpseradio = null //same person who took his id took this
corpsehelmet = /obj/item/clothing/head/caphat/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/captain
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/captain/box2550away
corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away
corpsehusk = "very yes"
corpsebrute = 40
corpseoxy = 120
/obj/effect/landmark/corpse/away/box2550/scientist
name = "Cuban Pete"//:D
corpseuniform = /obj/item/clothing/under/rank/chemist/box2550away/scientist
corpseshoes = /obj/item/clothing/shoes/white/box2550away
corpseradio = /obj/item/device/radio/headset/box2550away
corpsemask = /obj/item/clothing/mask/gas/box2550away/
corpseback = /obj/item/weapon/storage/backpack/box2550away/scientist
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/toxins/box2550away
corpseid = 1
corpseidjob = "Scientist"
corpseidaccess = "Scientist"
corpsehusk = "chicky boom"
corpsebrute = 40
corpseoxy = 120
obj/effect/landmark/corpse/away/box2550/lawyer
name = "Bendak Starkiller"//u hungry? xD
corpseuniform = /obj/item/clothing/under/lawyer/blue
corpseshoes = /obj/item/clothing/shoes/black/box2550away
corpseradio = /obj/item/device/radio/headset/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/lawyer
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/box2550away/lawyer
corpseid = 1
corpseidjob = "Lawyer"
corpseidaccess = "Lawyer"
corpsehusk = "honk"
corpsebrute = 40
corpseoxy = 120
obj/effect/landmark/corpse/away/box2550/cmo
name = "Amy Lessen"
mobgender = "female"
corpseuniform = /obj/item/clothing/under/rank/medical/box2550/cmo
corpsesuit = /obj/item/clothing/suit/labcoat/cmo/box2550
corpseshoes = /obj/item/clothing/shoes/brown/box2550away
corpseradio = /obj/item/device/radio/headset/heads/box2550/heads/cmo
corpseback = /obj/item/weapon/storage/backpack/box2550away/
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/box2550away/cmo
corpsehusk = "~~~"
corpsebrute = 40
corpseoxy = 120
obj/effect/landmark/corpse/away/box2550/hos
name = "Broba Fett"
corpseuniform = /obj/item/clothing/under/rank/head_of_security/box2550
corpsesuit = /obj/item/clothing/suit/armor/hos //exactly the same now as it was in 2010
corpseshoes = /obj/item/clothing/shoes/brown/box2550away
corpseradio = /obj/item/device/radio/headset/headset_sec/box2550away
corpsehelmet = /obj/item/clothing/head/helmet/HoS/box2550away
corpsemask = /obj/item/clothing/mask/gas/box2550away/emergency
corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/hos
corpsepocket1 = /obj/item/device/flash/box2550away
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/box2550away/hos
corpsehusk = "i'm out of ideas"
corpsebrute = 40
corpseoxy = 120
/obj/item/clothing/under/rank/centcom_officer/box2550/hop
desc = "It has a Head of Personnel rank stripe on it."
name = "\improper Head of Personnel Jumpsuit"
/obj/item/clothing/head/helmet/box2550away
desc = null
obj/effect/landmark/corpse/away/box2550/hop
name = "Rebecca Sharpe"
mobgender = "female"
corpseuniform = /obj/item/clothing/under/rank/centcom_officer/box2550/hop
corpsesuit = /obj/item/clothing/suit/armor/vest //exactly the same now as it was in 2010
corpseshoes = /obj/item/clothing/shoes/brown/box2550away
corpseradio = /obj/item/device/radio/headset/heads/box2550/heads/
corpsehelmet = /obj/item/clothing/head/helmet/box2550away
corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/captain
corpsepocket1 = /obj/item/device/flash/box2550away
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/box2550away/hop
corpsehusk = 1
corpsebrute = 40
corpseoxy = 120
/obj/item/clothing/mask/gas/clown_hat/box2550/clown
desc = "You're gay for even considering wearing this." //check your privilege, coder scum
/obj/item/clothing/shoes/clown_shoes/box2550/clown_shoes
desc = "Damn, thems some big shoes."
/obj/item/clothing/under/rank/clown/box2550/clown
desc = "Wearing this, all the children love you, for all the wrong reasons."
/obj/item/device/pda/clown/box2550away/clown
name = "PDA-Robert Robust"
owner = "Robert Robust"
ownjob = "Clown"
toff = 1
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
obj/effect/landmark/corpse/away/box2550/clown
name = "Robert Robust"
corpseuniform = /obj/item/clothing/under/rank/clown/box2550/clown
corpseshoes = /obj/item/clothing/shoes/clown_shoes/box2550/clown_shoes
corpseradio = /obj/item/device/radio/headset/box2550away
corpsemask = /obj/item/clothing/mask/gas/clown_hat/box2550/clown
corpsepocket2 = /obj/item/weapon/pen
corpseback = /obj/item/weapon/storage/backpack/box2550away/clown
corpsebelt = /obj/item/device/pda/clown/box2550away/clown
corpseid = 1
corpseidjob = "Clown"
corpseidaccess = "Clown"
corpsehusk = 1
corpsebrute = 40
corpseoxy = 120
/obj/item/weapon/melee/baton/loaded/box2550
name = "\improper Stun Baton"
desc = "Holy shit. This thing is terrible."
icon = 'box2550Away.dmi'
/obj/item/weapon/melee/baton/loaded/box2550/New()
..()
src.bcell.maxcharge = 1001
src.bcell.charge = 1001
src.bcell.name = "\improper Nanotrasen brand rechargable AA battery"
src.bcell.desc = "You can't top the plasma top."
src.bcell.icon_state = "cell"
update_icon()
return
obj/effect/landmark/corpse/away/box2550/sec
name = "Hossan Mubarak"
corpseuniform = /obj/item/clothing/under/color/red/box2550away
corpsesuit = /obj/item/clothing/suit/armor/vest
corpseshoes = /obj/item/clothing/shoes/brown/box2550away
corpseradio = /obj/item/device/radio/headset/headset_sec/box2550away
corpsehelmet = /obj/item/clothing/head/helmet/box2550away
corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/sec
corpsepocket1 = /obj/item/device/flash/box2550away
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/security/box2550away
corpsehusk = 1
corpsebrute = 40
corpseoxy = 120
/obj/item/clothing/under/rank/janitor/box2550
name = "Janitor's Jumpsuit"
desc = "Official clothing of the station's poopscooper."
/obj/item/device/pda/janitor/box2550
name = "\improper PDA-Jackson Bob"
owner = "Jackson Bob"
ownjob = "Janitor"
toff = 1
note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!"
/obj/item/device/pda/security/box2550away/det
name = "\improper PDA-Corbin Riker"
owner = "Corbin Riker"
ownjob = "Detective"
toff = 1
/obj/item/weapon/storage/box/lights/mixed/box2550away/
desc = null
/obj/item/weapon/reagent_containers/spray/cleaner/box2550away/
desc = "Space Cleaner!"
volume = 1000
w_class = 3
/obj/item/weapon/reagent_containers/spray/cleaner/box2550away/New()
..()
reagents.add_reagent("cleaner", rand(0, 100) * 10) //cleaner sprayed only 10 units
/obj/item/weapon/storage/backpack/box2550away/jan/New()
..()
new /obj/item/weapon/grenade/chem_grenade/cleaner(src)
new /obj/item/weapon/grenade/chem_grenade/cleaner(src)
new /obj/item/weapon/storage/box/lights/box2550away/lights/(src)
new /obj/item/weapon/reagent_containers/spray/cleaner/box2550away(src)
new /obj/item/weapon/mop(src)
obj/effect/landmark/corpse/away/box2550/jan
name = "Jackson Bob"
corpseuniform = /obj/item/clothing/under/rank/janitor/box2550
corpseshoes = /obj/item/clothing/shoes/galoshes
corpseradio = /obj/item/device/radio/headset/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/jan
corpsepocket1 = /obj/item/device/flashlight
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/janitor/box2550
corpsehusk = 1
corpsebrute = 40
corpseoxy = 120
/obj/item/weapon/storage/box/lights/box2550away/lights/
name = "box of replacement lights"
icon_state = "lightmixed"
desc = null
/obj/item/weapon/storage/box/lights/box2550away/lights/New()
..()
for(var/i = 0; i < 4; i++)
new /obj/item/weapon/light/tube(src)
for(var/i = 0; i < 4; i++)
new /obj/item/weapon/light/bulb(src)
obj/effect/landmark/corpse/away/box2550/jan
name = "Jackson Bob"
corpseuniform = /obj/item/clothing/under/rank/janitor/box2550
corpseshoes = /obj/item/clothing/shoes/galoshes
corpseradio = /obj/item/device/radio/headset/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/jan
corpsepocket1 = /obj/item/device/flashlight
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/janitor/box2550
corpsehusk = 1
corpsebrute = 40
corpseoxy = 120
/obj/item/clothing/gloves/black/box2550away
name = "Black Gloves"
/obj/item/clothing/suit/det_suit/box2550away
desc = "Someone who wears this means business"
/obj/item/clothing/head/det_hat/box2550away
desc = "Someone who wears this will look very smart"
/obj/item/weapon/lighter/zippo/box2550away
desc = "The detective's zippo."
/obj/item/clothing/under/det/box2550away
name = "Hard worn suit"
desc = "Someone who wears this means business"
obj/effect/landmark/corpse/away/box2550/det
name = "Corbin Riker"
corpseuniform = /obj/item/clothing/under/det/box2550away
corpsehelmet = /obj/item/clothing/head/det_hat/box2550away
corpsesuit = /obj/item/clothing/suit/det_suit/box2550away
corpseshoes = /obj/item/clothing/shoes/black/box2550away
corpseradio = /obj/item/device/radio/headset/headset_sec/box2550away
corpseback = /obj/item/weapon/storage/backpack/box2550away/lawyer
corpsepocket1 = /obj/item/weapon/lighter/zippo/box2550away
corpsepocket2 = /obj/item/weapon/pen
corpsebelt = /obj/item/device/pda/security/box2550away/det
corpsegloves = /obj/item/clothing/gloves/black/box2550away
corpsehusk = 1
corpsebrute = 40
corpseoxy = 120
/obj/item/clothing/under/rank/engineer/box2550away
desc = "It has an Engineering rank stripe on it."
name = "Engineering Jumpsuit"
/obj/item/weapon/storage/toolbox/mechanical/box2550away
desc = null
/obj/structure/closet/secure_closet/box2550away/engineering_personal
name = "Engineer's Locker"
req_access = list(access_engine_equip)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/weapon/storage/toolbox/mechanical/box2550away(src)
new /obj/item/clothing/under/rank/engineer/box2550away(src)
new /obj/item/clothing/shoes/orange(src)
new /obj/item/clothing/mask/gas/box2550away/(src)
new /obj/item/clothing/head/hardhat(src)
new /obj/item/clothing/ears/earmuffs(src)
new /obj/item/clothing/glasses/meson(src)
return
/obj/structure/closet/secure_closet/box2550away/security
name = "Security Equipment"
req_access = list(access_security)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/weapon/grenade/flashbang(src)
new /obj/item/weapon/handcuffs/box2550away(src)
// new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/device/flash/box2550away(src)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet/box2550away(src)
new /obj/item/clothing/glasses/sunglasses/box2550away(src)
new /obj/item/weapon/melee/baton/loaded/box2550(src)
return
/obj/structure/closet/secure_closet/box2550away/hos
name = "Head Of Security" //in 2010, the head of security was played by a secure locker
req_access = list(access_hos)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/weapon/shield/riot(src)
// new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/device/flash/box2550away(src)
new /obj/item/weapon/storage/box/box2550away/ids(src)
new /obj/item/clothing/under/rank/head_of_security/box2550(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/glasses/sunglasses/box2550away(src)
new /obj/item/clothing/suit/armor/hos(src)
new /obj/item/clothing/head/helmet/box2550away(src)
new /obj/item/weapon/storage/box/box2550away/ids(src)
// new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/handcuffs/box2550away(src)
new /obj/item/weapon/melee/baton/loaded/box2550(src)
return
/obj/structure/closet/secure_closet/box2550away/meat
name = "Meat Locker"
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
for(var/i = 0, i < 4, i++)
new /obj/item/weapon/reagent_containers/food/snacks/badrecipe/box2550away/rottenfood(src)
return
/obj/structure/closet/secure_closet/box2550away/engineering_electrical
name = "Electrical Supplies"
req_access = list(access_engine)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
new /obj/item/device/multitool(src)
new /obj/item/device/multitool(src)
new /obj/item/device/multitool(src)
return
/obj/structure/closet/secure_closet/box2550away/engineering_welding
name = "Welding Supplies"
req_access = list(access_engine)
icon_state = "secure1"
icon_closed = "secure"
icon_locked = "secure1"
icon_opened = "secureopen"
icon_broken = "securebroken"
icon_off = "secureoff"
New()
..()
sleep(2)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/weldingtool(src)
return
/obj/item/weapon/paper/pamphlet/box2550awayInfo
name = "Visitor Info Pamphlet"
info = "<b> TG424 Visitor Information </b><br>\
Welcome, employee, to TG424! As you may know, this station was once \
used as Nanotrasen's SPACE STATION 13, primarily to research plasma \
and its many entertaining uses. <br>\
Since the finish of the improved TG570 on Dec 8, 2550, TG424 is no longer \
a plasma research station and has fallen into disuse.<br> \
Perhaps you stand to gain something from visiting it?<br> \
Either way, we hope you enjoy yourself!"
/obj/structure/closet/secure_closet/box2550away/ce
name = "Chief Engineer's Locker"
req_access = list(access_heads)
New()
..()
sleep(2)
new /obj/item/weapon/storage/toolbox/mechanical(src)
new /obj/item/clothing/under/rank/chief_engineer(src)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/ears/earmuffs(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/clothing/suit/fire(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/hardhat(src)
new /obj/item/device/multitool(src)
new /obj/item/device/flash(src)
/obj/structure/closet/secure_closet/box2550away/hop
name = "Head of Personnel"
req_access = list(access_heads)
New()
..()
sleep(2)
new /obj/item/weapon/storage/box/box2550away/ids(src)
new /obj/item/clothing/under/rank/centcom_officer/box2550/hop(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet(src)
/obj/structure/closet/secure_closet/box2550away/det
name = "Forensics Locker"
req_access = list(access_forensics_lockers)
New()
..()
sleep(2)
new /obj/item/clothing/under/det/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/head/det_hat/box2550away(src)
new /obj/item/clothing/suit/det_suit/box2550away(src)
new /obj/item/clothing/gloves/black/box2550away(src)
new /obj/item/weapon/storage/box/gloves(src)
new /obj/item/device/detective_scanner/box2550away(src)
new /obj/item/device/detective_scanner/box2550away(src)
new /obj/item/device/detective_scanner/box2550away(src)
/obj/structure/closet/box2550away/red
name = "\improper Red Wardrobe"
icon_state = "red"
icon_closed = "red"
New()
..()
sleep(2)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/under/color/red/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)
new /obj/item/clothing/shoes/brown/box2550away(src)

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

File diff suppressed because it is too large Load Diff

View File

@@ -17,4 +17,5 @@
#maps/RandomZLevels/challenge.dmm
#maps/RandomZLevels/listeningpost.dmm
#maps/RandomZLevels/spacehotel.dmm
#maps/RandomZLevels/centcomAway.dmm
#maps/RandomZLevels/centcomAway.dmm
#maps/RandomZLevels/box2550Away.dmm

View File

@@ -2984,11 +2984,11 @@
"bft" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bfu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bfv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
"bfw" = (/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)
"bfw" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/protectStation,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfx" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfy" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/machinery/computer/upload/ai,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfz" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/computer/upload/borg,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfA" = (/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)
"bfA" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/freeform,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bfC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bfD" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -3137,7 +3137,7 @@
"biq" = (/obj/structure/table,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bir" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bis" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bit" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bit" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/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/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"biu" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/captain)
"biv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"biw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -3202,7 +3202,7 @@
"bjD" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjG" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjG" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/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/reset/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjH" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
"bjI" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/space,/area)
"bjJ" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/captain)
@@ -6544,6 +6544,7 @@
"cvR" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon_state = "processor"; name = "byond random number generator"},/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"cvS" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"cvT" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
"cvU" = (/obj/machinery/mineral/unloading_machine{dir = 1; input_dir = 4; output_dir = 8},/turf/simulated/floor{tag = "icon-asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored)
"cvV" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"cvW" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"cvX" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
@@ -8392,10 +8393,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaXPaYVaYXaYXaYXbbRaXPbdibdjaMzaMzbbSbapaSeaTsbaqaTvbaraSebasbatbaubaubavbawbaxbaxbaybaxbazbaAbaBbaCbaBbaBbaDbaEbaFbaGbaHaWdaWdbaIbaJbaKaYdaDAbaLaZxbaMbaNbaOaVjbaPbaQbaRbaSaSKaWpaVobaTaWtbaUaWtbaVaVoaWvaSKbaWbaXbaYbaZaVzbbaaVzbbbaVAaSSaDAbbcaZNbbdbbebbfbbgbbhaZNbbibbjbbjbbkbblbblbblbbmbbnbbobbpaZTbbqbbrbbrbbrbbrbbsbbtbbubbvbbwbbvbbvbbvbbxbbybbzbbAbbzbbBbbBbadbbCbbDbbEbadbbFbbGbbFbadbaeaThbahbaibbHbbIbbHbaibbJbbKbaibbLbbMaaaaafaaaaafaaaaafaEraEraEraEraEraEraEraEraEraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaafaXPbalaXPbbOaYXbambaoaXPaMzaYWaYYaYZbbTaSeaSeaSeaSeaSeaSebbUbbVbbWaMzbbXaTEaTEaTEbbYaTEaTEaTEbbZaTEaTEaTEaTEbcabcbbccbcdaWdaWdaYbbceaZwaYdaDAbcfaZxbcgbaNbchbchbchaVjbcibcjaSKaVpbckaVpbclaYmaVpaVpbckaVpaSKbcmbcnbcobcpaVzaZJbcqaVzbcrbcsbctbcuaZNbcvbcwbcxbcybczbcAbblbcBbblbcCbblbblbcDbcEbcFbcGbcHaZTbcIbbrbcIbbrbcIbcJbbraZUbcKbcKbcLbcMaZYbcNbaabcObcPbcQbcRbcRbadbcSbcTbcUbcVbcWbcXbcYbadbcZbafbdabaibdbbdcbdbbddbdebdfbaibdgbdhaaaaafaaaaaaaaaaaaaEraEraEraEraEraEraEraEraEraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaXPbbNdcIdcGdcHdcHdcKdcJaZaaYZaJKbdnbdobdpbdpbdpbaxbaxbaxbdqbdrbdrbdrbdsaTEbdtbdubdvbdwbdxbdybdzbdAaTEbdBbdCbdDbdEbdFbdGbdHbdIbdJbdKbdKbdLbctbdMbdNbdObOibdQbdRbdSbdTbciaTSaTSaSKbdUaXtaXtbdVaXtaXtbdUaSKbdWbdWbdXaVzbdYaVzbdZbeabebbecaSSaDAaDAaZNbedbeebefbegbehbeibblbejbekbelbembembenbeobepbeqberaZTbcIbbrbcIbbrbcIbcJbesaZUbetbeubevbewaZYbexbeybezbezbezbeAbeBbeCbeDbeEbeEbeEbeFbeEbeGbeHbeIbeJbeKbeLbeMbeNbeObePbeQbeRbaibdgbeSaafaafaaaaaaaaaaafaaaaEraEraEraEraEraEraEraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaXPdcDaXPdcEbbQbbQdcFaXPbeVbeWaJKbeXbeYbeXbeXbeXbeYbeXaJKaJKaTEaTEaTEbeZaTEbdzbdzbfabdzbdzbdzbdzbdzbfbbfcbfdbfebffbfgbfgbfgbfhbfibfjbfkbflbfmbfnbfobfpbfqbfrbNhaTPbftbfuaTSaaabfvbfwbfxbfybfxbfzbfxbfAbfvaaabfBbfCbfDbdWbdWbdWbdWbfEaVAbfFaDAaDAaZNbfGbeebfHbcybczbfIbblbcCbfJbfKbfLbfMbfNaZTbfObfPbfQaZTbcIbfRbcIbbrbcIbcJbbraZUaZYaZYaZYaZYaZYbexbaabfSbfTbfUbfVbfWbfXbfYbfZbgabgabgbbcUbgcbadbgdbgebgfbaibggbghbgibgjbgkbglbaibdgbakbakbgmbgnbakbakbakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaXPdcDaXPdcEbbQbbQdcFaXPbeVbeWaJKbeXbeYbeXbeXbeXbeYbeXaJKaJKaTEaTEaTEbeZaTEbdzbdzbfabdzbdzbdzbdzbdzbfbbfcbfdbfebffbfgbfgbfgbfhbfibfjbfkbflbfmbfnbfobfpbfqbfrbNhaTPbftbfuaTSaaabfvbitbfxbfybfxbfzbfxbjGbfvaaabfBbfCbfDbdWbdWbdWbdWbfEaVAbfFaDAaDAaZNbfGbeebfHbcybczbfIbblbcCbfJbfKbfLbfMbfNaZTbfObfPbfQaZTbcIbfRbcIbbrbcIbcJbbraZUaZYaZYaZYaZYaZYbexbaabfSbfTbfUbfVbfWbfXbfYbfZbgabgabgbbcUbgcbadbgdbgebgfbaibggbghbgibgjbgkbglbaibdgbakbakbgmbgnbakbakbakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaXPbeTdcCbbPbbQbdkbgpaXPaaaaafaafbgqbgqbgqbgqbgqbgqbgqaaaaaabgrbgsbgtbgubgvbdzbdzbdzbdzbdzbdzbdzbdzbgwbcdaWdbgxbgybgzbgAbgBbgCbdEaTKaTKbgDbgEbgFbgGbgHbgMbgMbgJbgIbgKbgLbgMaafbgNbgObfxbgPbfxbgPbfxbgQbgNaafbgRbgSaYsbgTbgUbgVbgWbgXbgYbgZaDAbhabhbbhcbhdbfHbhebhfaZNbhgbcCbfJbfLbhhbblbhiaZTbhjbhkbhlaZTbhmbhnbhobhpbhqbhrbhqbhsbhtbhubhtbhtbhtbhvbaabhwbcPbcPbfVbhxbhybhzbhAbhBbhBbhCbhDbhEbadbhFbgebhGbaibhHbhIbhJbgjbeObhKbaibhLbhMbhNbhMbhMbhMbhObakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaXPbhPbhQbhRbanaXPaXPaXPaaaaaaaaabgqbgqbgqbgqbgqbgqbgqaaaaaabhSbhTbdzbhUbhVbhVbhVbhVbhVbhVbhVbhVbhVbhWbhXbhYbhZbiabibbicbidaYbbiebifbigbihbiibijbgGbgGbgMbNgbilbimbinbiobgMaaabipbiqbfxbirbisbirbfxbitbipaaabiubivaYsbiwbixbiybixbizbiAbgZaDAaDAaZNbiBbeebfHbiCbiDaZNbiEbiFbiGbiHbiIbblbiJbiKbiLbiMbiNaZTaZUbiOaZUaZUaZUbiPbiPbiPbiPbiPbiPbiPbiPbexbaabfSbfTbfUbiQbiRbiSbiTbiUbiUbiUbhCbcUbiVbadbiWbgebiXbaibiYbiZbiYbjabeObjbbaibjcbjcbjcbjcbjcbjcbdgbakaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbjdbjebjfbjgbdzbdzbdzbjhbjhbjhbjhbdzbdzbdzbdzbfbbjiaWdbjjbjkbjlbjmbjnaYbaWdbjobjpbjqbjrbjsbNcbjubNbbjwbjxbjybjzbjAbjBazFbjCbjDbjEbfxbirbfxbjFbjGbjHbjIbjJbjKbjLbjMbixbjNbixbizbiAbjOaDAaDAaZNbjPbeebfHbjQbjRaZNbjSbcCbblbjTbjUbjVbjWbiEbjXbjYbjZbkabkbbkcbblbkdbkebkfbkgbkhbkibkjbkkbklbkmbbxbbybknbkobkpbkqbkrbadbksbiUbiUbktbkubcUbkvbadbkwbkxbkybaibkzbkAbkBbkCbeObkDbaibkEbkFbkFbkFbkFbkFbdgbakaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaXPbhPbhQbhRbanaXPaXPaXPaaaaaaaaabgqbgqbgqbgqbgqbgqbgqaaaaaabhSbhTbdzbhUbhVbhVbhVbhVbhVbhVbhVbhVbhVbhWbhXbhYbhZbiabibbicbidaYbbiebifbigbihbiibijbgGbgGbgMbNgbilbimbinbiobgMaaabipbiqbfxbirbisbirbfxbfAbipaaabiubivaYsbiwbixbiybixbizbiAbgZaDAaDAaZNbiBbeebfHbiCbiDaZNbiEbiFbiGbiHbiIbblbiJbiKbiLbiMbiNaZTaZUbiOaZUaZUaZUbiPbiPbiPbiPbiPbiPbiPbiPbexbaabfSbfTbfUbiQbiRbiSbiTbiUbiUbiUbhCbcUbiVbadbiWbgebiXbaibiYbiZbiYbjabeObjbbaibjcbjcbjcbjcbjcbjcbdgbakaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbjdbjebjfbjgbdzbdzbdzbjhbjhbjhbjhbdzbdzbdzbdzbfbbjiaWdbjjbjkbjlbjmbjnaYbaWdbjobjpbjqbjrbjsbNcbjubNbbjwbjxbjybjzbjAbjBazFbjCbjDbjEbfxbirbfxbjFbfwbjHbjIbjJbjKbjLbjMbixbjNbixbizbiAbjOaDAaDAaZNbjPbeebfHbjQbjRaZNbjSbcCbblbjTbjUbjVbjWbiEbjXbjYbjZbkabkbbkcbblbkdbkebkfbkgbkhbkibkjbkkbklbkmbbxbbybknbkobkpbkqbkrbadbksbiUbiUbktbkubcUbkvbadbkwbkxbkybaibkzbkAbkBbkCbeObkDbaibkEbkFbkFbkFbkFbkFbdgbakaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbkGbkHbkGbkIbkJbdzbdzbdzbdzbdzbdzbdzbdzbkKaTEaTEbkLaWdaWdbkMbkNbkObkPaYbaWdaWdbkQbkRbiibkSbkTbkUbMZbkWbNabkYbkZblabgMaaablbblbblcbldblebfxblfblbblbaaablgblhblhblhblhblhblhblibljblkbllbllaZNaZNblmblnbloblpaZNblqbcCbblbblbblbblblrbblblsbltbblbblbblbltbblbblbkeblublvblwblxblyblzblAbiPblBblCblDblDblEblFbcPbadblGbcUbcUblHblIbcUblJblKblLblLblMblNblNblObbHblPbbHbaibaiblQbkFblRblSblTbkFbdgbbMaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqblUblVblUblWbdzbdzbdzbjhbjhbjhbjhbdzbdzblXblYaTEblZaWdaWdbkMbmabicbkPaYbbmbaWdbkQbkRbmcaDAaLKbkUbHFbmebHEbmgbmgbGjbgMaafaafblbblbbmibmjbmiblbblbaafaafbmkbmlbmmbmnbmobmpbmqbmrbmsbmtaDAaDAbmubmvbmwbmxbmybmzbmAbmBbmCbmBbmDbmBbmBbmEbmBbmFbmGbmBbmBbmBbmHbmIbmIbmJblubmKblwbmLbmLbmMbmNbiPbexbaabmObmPbmQbmRbmRbadbmSbmTbmUblKbmVbcUbmWblKbmXbmYbmZbnabnbbncbndbnebnfbngbnhbnibnjblRbnkbnlbkFbdgbdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbnmbjebnnbnobdzbdzbdzbdzbdzbdzbdzbdzbdzblXbnpaTEbnqaXhaWdbkMaWdbnraWdaYbaWdbjobigbnsbmcaDAaLKbkUbgMbntbkXbnvbnwbnxbgMaaaaaaaafblbblbbnyblbblbaafaaaaaabmkbnzbnAbnBbnCbnDbnDbnEbnFbnGaDAaDAbnHbnIbcCblsbnJbnKbnLbnKbnMbnKbnNbnKbnObnPbjZbnQbblbblbblbnRbnSbnSbnTbnUbnVbnWblwbnXbnYblzbmNbiPaZZbaabnZbnZboabnZbnZbadblKblKblKblKbobbocbbFblKbodboebofbngbngbogbgebgebohbgeboibojbojblRbnkblRbkFbdgbdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9371,7 +9372,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacSccSccSccSycSWcSXcSWcSycSYcSZcS
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOZaafaafaafaafaafcSccTgcThcSycTicSAcSzcTjdcTcSAdcScSycTmcTmcTmcSBcSTcSTcSncSncRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcOWcTncSCcTocOWcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTpcQlcQlcQlcQlcQlcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcTfcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccTrcTscTtcTucTvcTwcSAcTicSAcSAcTycTmcTmcSTcSTcSTcSTcSOcSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcTzcTAcTBcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRacOTcQlcQlcRbcRbcOTcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTfcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccTCcTDcTEcTFcTvcTGcSAcTidcRcSAcSydcQdcPdcPcSTcSTcSBcSBcSncSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcTLcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSycSycSycTMcSAcTNcTvcTOcUccTIcUPcUjcUjbdlcOCcSTcSBcSBcTScSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcTLcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacOEcOEaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcTTcTUcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSycSycSycTMcSAcTNcTvcTOcUccTIcUPcUjcUjcvUcOCcSTcSBcSBcTScSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcTLcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacOEcOEaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcTTcTUcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcTKcTWcTVcTXcTRcSAcTicSAcSAcTPcOecSycUfcUecTYcSTcSTcSBcSBcUacSncRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcTLcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacOEcOEcOEaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSccSccSccSAcSAcTicUccUdcSybEKcSycTmcTmcTmcSBcSBcSBcSBcTJcRacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaacOEcOEaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqaaaaaacSccUbcSAcSAcTibPbbmdbPbbOjcSycTlcTkcSBcSBcSBcSBcSOcSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcUkcUkcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9386,7 +9387,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSncSncSncSncSncSncSncS
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacVsaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaacOEcVscVsaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaacOEcOEcVsaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcUjcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaacOEcOEcVsaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocSocRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaacOTcOTaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

View File

@@ -1204,6 +1204,7 @@
#include "maps\RandomZLevels\Academy.dm"
#include "maps\RandomZLevels\blackmarketpackers.dm"
#include "maps\RandomZLevels\centcomAway.dm"
#include "maps\RandomZLevels\box2550Away.dm"
#include "maps\RandomZLevels\challenge.dm"
#include "maps\RandomZLevels\spacebattle.dm"
#include "maps\RandomZLevels\stationCollision.dm"