Reduced deathsquad marauder number to 3 (previously 4). Added some fluff to their launch sequence.

Revisions to CentCom. CentCom now has its own access levels set, and a unique ID changing computer.
Added nasa void suit and captain armor to item steal list.
Fixed some run time errors for hand-tele from my previous commit.
Removed the remove poo and urine button from secrets.
Decoy AIs can now say stuff like regular AIs. This is useful if you need a non-player announcer for something, while taking into account talk_understand and the like. I use it for deathsquad shuttle announcements. I've placed A.L.I.C.E. on CentCom for such reasons.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1704 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
noisomehollow@lycos.com
2011-06-22 06:28:28 +00:00
parent d6e0f1cf22
commit 3c0a76df30
35 changed files with 3406 additions and 3132 deletions

View File

@@ -8,7 +8,7 @@
invocation = "GIN'YU CAPAN"
invocation_type = "whisper"
range = 7
var/list/protected_roles = list("Wizard","Fake Wizard","Changeling","Cultist") //which roles are immune to the spell
var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell
var/list/compatible_mobs = list(/mob/living/carbon/human,/mob/living/carbon/monkey) //which types of mobs are affected by the spell. NOTE: change at your own risk
var/base_spell_loss_chance = 20 //base probability of the wizard losing a spell in the process
var/spell_loss_chance_modifier = 7 //amount of probability of losing a spell added per spell (mind_transfer included)

View File

@@ -230,9 +230,12 @@ proc/process_ghost_teleport_locs()
/area/centcom
name = "Centcom"
icon_state = "purple"
icon_state = "centcom"
requires_power = 0
/area/centcom/control
name = "Centcom Control"
/area/centcom/evac
name = "Centcom Emergency Shuttle"
@@ -279,7 +282,7 @@ proc/process_ghost_teleport_locs()
/area/tdome
name = "Thunderdome"
icon_state = "medbay"
icon_state = "thunder"
requires_power = 0
/area/tdome/tdome1

View File

@@ -1,6 +1,5 @@
/mob/living/silicon/ai
name = "AI"
voice_name = "synthesized voice"
icon = 'mob.dmi'//
icon_state = "ai"
anchored = 1 // -- TLE

View File

@@ -1,6 +1,5 @@
/mob/living/silicon/decoy
name = "AI"
voice_name = "synthesized voice"
icon = 'mob.dmi'//
icon_state = "ai"
anchored = 1 // -- TLE

View File

@@ -1,6 +1,5 @@
/mob/living/silicon/hivebot
name = "Robot"
voice_name = "synthesized voice"
icon = 'hivebot.dmi'
icon_state = "basic"
health = 80

View File

@@ -1,6 +1,5 @@
/mob/living/silicon/pai
name = "pAI"
voice_name = "synthesized voice"
icon = 'mob.dmi'//
icon_state = "shadow"

View File

@@ -1,6 +1,5 @@
/mob/living/silicon/robot
name = "Robot"
voice_name = "synthesized voice"
icon = 'robots.dmi'//
icon_state = "robot"
health = 300

View File

@@ -1,5 +1,6 @@
/mob/living/silicon
gender = NEUTER
robot_talk_understand = 1
voice_name = "synthesized voice"
var/syndicate = 0
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS

View File

@@ -85,6 +85,11 @@
var/printing = null
req_access = list(access_change_ids)
//ID changing computer for CentCom.
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
req_access = list(access_cent_captain)
/obj/machinery/computer/communications
name = "Communications Console"
icon_state = "comm"

View File

@@ -414,6 +414,15 @@
access = get_access("Captain")
..()
/obj/item/weapon/card/id/centcom
name = "CentCom ID"
icon_state = "centcom"
registered = "Central Command"
assignment = "General"
New()
access = get_all_centcom_access()
..()
/obj/item/weapon/cleaner
desc = "Space Cleaner!"
icon = 'janitor.dmi'

View File

@@ -149,6 +149,20 @@
a.cancelAlarm("Fire", src, src)
return
/area/proc/readyalert()
if(name == "Space")
return
if(!eject)
eject = 1
updateicon()
return
/area/proc/readyreset()
if(eject)
eject = 0
updateicon()
return
/area/proc/partyalert()
if(src.name == "Space") //no parties in space!!!
return
@@ -173,7 +187,7 @@
return
/area/proc/updateicon()
if ((fire || eject || party) && power_environ)
if ((fire || eject || party) && ((!requires_power)?(!requires_power):power_environ))//If it doesn't require power, can still activate this proc.
if(fire && !eject && !party)
icon_state = "blue"
/*else if(atmosalm && !fire && !eject && !party)

View File

@@ -88,7 +88,7 @@ ________________________________________________________________________________
/*
Also a dynamic ninja mission generator.
I decided to scrap round-specific objectives since keeping track of them would require some form of tracking.
When I already created about 4 new objectives, this doesn't terribly important or needed.
When I already created about 4 new objectives, this doesn't seem terribly important or needed.
*/
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
@@ -156,7 +156,8 @@ Not to mention that Malfunction does not use declare_completion (at least, not i
With that said, a ninja on the side of the station would murder the AI very quickly--and the rounds usually
last long enough for the ninja to appear, too.
if ("malfunction")//Only one malf AI. //not only one anymore. --rastaf0
//not only one anymore. --rastaf0
if ("malfunction")
if(current_mode:malf_ai)
antagonist_list += current_mode:malf_ai
*/
@@ -331,17 +332,13 @@ In either case, it's a good idea to spawn the ninja with a semi-random set of ob
if(!ninja_mind.objectives.len||!mission_set)//If they somehow did not get an objective at this point, time to destroy the station.
var/nuke_code
if(current_mode.config_tag == "nuclear"||sent_strike_team)//If it's nuclear, there is a nuke with a code already set. Or if commandos were sent in.
var/temp_code
for(var/obj/machinery/nuclearbomb/N in world)
temp_code = text2num(N.r_code)
if(temp_code)//if it's actually a number. It won't convert any non-numericals.
nuke_code = N.r_code
break
if(!nuke_code)//If there is still no code.
nuke_code = "[rand(10000, 99999.0)]"
for(var/obj/machinery/nuclearbomb/N in world)
N.r_code = nuke_code
if(nuke_code)//If there is a nuke device in world and we got the code.
var/datum/objective/nuclear/ninja_objective = new//Fun.
ninja_objective.owner = ninja_mind
ninja_objective.explanation_text = "Destroy the station with a nuclear device. The code is [nuke_code]." //Let them know what the code is.

View File

@@ -1,3 +1,7 @@
/obj/machinery/nuclearbomb/New()
..()
r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn.
/obj/machinery/nuclearbomb/process()
if (src.timing)
src.timeleft--
@@ -172,8 +176,13 @@
else
world << "<B>The station was destoyed by the nuclear blast!</B>"
ticker.mode.station_was_nuked = 1
//TODO: derped blast should partially damage nearest objects
// and do not reboot the game. Also make it work properly on other z-levels --rastaf0
/*
TODO: derped blast should partially damage nearest objects
and do not reboot the game. Also make it work properly on other z-levels --rastaf0
Further TODO: make nuke detonation work with objectives. Right now, you can't track player
location because they are viewing the cinematic (can't get_turf on them to determine z_level
as it will return null). Leaving this for you since you apparently plan to work this further. /N
*/
ticker.mode.check_win()

View File

@@ -84,7 +84,7 @@ datum
check_completion()
if(!target)//If it's a free objective.
return 1
if(!owner.current||owner.current.stat==2)//If they're dead.
if(!owner.current||owner.current.stat==2)//If you're otherwise dead.
return 0
var/list/all_items = owner.current.get_contents()
for(var/obj/item/device/mmi/mmi in all_items)
@@ -172,14 +172,13 @@ datum
return 0
survive
explanation_text = "Stay alive until the end"
explanation_text = "Stay alive until the end."
check_completion()
if(issilicon(owner.current) && owner.current != owner.original)
return 0
if(!owner.current || owner.current.stat == 2)
return 0
return 1
nuclear
@@ -195,11 +194,13 @@ datum
"an RCD" = /obj/item/weapon/rcd,
"a jetpack" = /obj/item/weapon/tank/jetpack,
"a captains jumpsuit" = /obj/item/clothing/under/rank/captain,
"the captain's armor" = /obj/item/clothing/suit/armor/captain,
"functional ai" = /obj/item/device/aicard,
"a pair of magboots" = /obj/item/clothing/shoes/magboots,
"the station blueprints" = /obj/item/blueprints,
"thermal optics" = /obj/item/clothing/glasses/thermal,
"the engineers rig suit" = /obj/item/clothing/suit/space/rig,
"a engineers rig suit" = /obj/item/clothing/suit/space/rig,
"a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid,
"28 moles of plasma (full tank)" = /obj/item/weapon/tank,
)

View File

@@ -58,6 +58,19 @@
access_hop = 57
access_hos = 58
//BEGIN CENTCOM ACCESS
/*Should leave plenty of room if we need to add more access levels.
Mostly for admin fun times.*/
access_cent_general = 101//General facilities.
access_cent_thunder = 102//Thunderdome.
access_cent_specops = 103//Special Ops.
access_cent_medical = 104//Medical/Research
access_cent_living = 105//Living quarters.
access_cent_storage = 106//Generic storage areas.
access_cent_teleporter = 107//Teleporter.
access_cent_creed = 108//Creed's office.
access_cent_captain = 109//Captain's office/ID comp/AI.
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
/obj/New()
@@ -191,6 +204,27 @@
else
return list()
/proc/get_centcom_access(job)
switch(job)
if("VIP Guest")
return list(access_cent_general)
if("Custodian")
return list(access_cent_general, access_cent_living, access_cent_storage)
if("Thunderdome Overseer")
return list(access_cent_general, access_cent_thunder)
if("Intel Officer")
return list(access_cent_general, access_cent_living)
if("Medical Officer")
return list(access_cent_general, access_cent_living, access_cent_medical)
if("Death Commando")
return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
if("Research Officer")
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage)
if("BlackOps Commander")
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed)
if("Supreme Commander")
return get_all_centcom_access()
/proc/get_all_accesses()
return list(access_security, access_brig, access_armory, access_forensics_lockers, access_court,
access_medical, access_medlab, access_morgue, access_rd,
@@ -203,6 +237,9 @@
access_theatre, access_research, access_mining, access_mining_office, access_mailsorting, access_mint_vault, access_mint,
access_heads_vault, access_mining_station, access_xenobiology, access_ce, access_hop, access_hos)
/proc/get_all_centcom_access()
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_creed, access_cent_captain)
/proc/get_region_accesses(var/code)
switch(code)
if(0)
@@ -359,6 +396,26 @@
if(access_ce)
return "CE Private"
/proc/get_centcom_access_desc(A)
switch(A)
if(access_cent_general)
return "Code Grey"
if(access_cent_thunder)
return "Code Yellow"
if(access_cent_storage)
return "Code Orange"
if(access_cent_living)
return "Code Green"
if(access_cent_medical)
return "Code White"
if(access_cent_teleporter)
return "Code Blue"
if(access_cent_specops)
return "Code Black"
if(access_cent_creed)
return "Code Silver"
if(access_cent_captain)
return "Code Gold"
/proc/get_all_jobs()
return list("Assistant", "Station Engineer", "Shaft Miner", "Detective", "Medical Doctor", "Captain", "Security Officer", "Warden",
@@ -366,6 +423,9 @@
"Chaplain", "Bartender", "Chemist", "Janitor", "Clown", "Mime", "Chef", "Roboticist", "Quartermaster",
"Chief Engineer", "Research Director", "Botanist", "Librarian", "Lawyer", "Virologist", "Cargo Technician", "Chief Medical Officer")
/proc/get_all_centcom_jobs()
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")
/obj/proc/GetJobName()
if (!istype(src, /obj/item/device/pda) && !istype(src,/obj/item/weapon/card/id))
return

View File

@@ -55,6 +55,9 @@
/obj/item/weapon/circuitboard/card
name = "Circuit board (ID Computer)"
build_path = "/obj/machinery/computer/card"
/obj/item/weapon/circuitboard/card/centcom
name = "Circuit board (CentCom ID Computer)"
build_path = "/obj/machinery/computer/card/centcom"
//obj/item/weapon/circuitboard/shield
// name = "Circuit board (Shield Control)"
// build_path = "/obj/machinery/computer/stationshield"

View File

@@ -12,8 +12,8 @@ Pod/Blast Doors computer
power_change()
/obj/machinery/computer/meteorhit(var/obj/O as obj)
for(var/x in src.verbs)
src.verbs -= x
for(var/x in verbs)
verbs -= x
set_broken()
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(5, 0, src)
@@ -34,31 +34,31 @@ Pod/Blast Doors computer
del(src)
return
if (prob(50))
for(var/x in src.verbs)
src.verbs -= x
for(var/x in verbs)
verbs -= x
set_broken()
if(3.0)
if (prob(25))
for(var/x in src.verbs)
src.verbs -= x
for(var/x in verbs)
verbs -= x
set_broken()
else
return
/obj/machinery/computer/blob_act()
if (prob(75))
for(var/x in src.verbs)
src.verbs -= x
for(var/x in verbs)
verbs -= x
set_broken()
src.density = 0
density = 0
/obj/machinery/computer/power_change()
if(!istype(src,/obj/machinery/computer/security/telescreen))
if(stat & BROKEN)
icon_state = initial(icon_state)
src.icon_state += "b"
icon_state += "b"
if (istype(src,/obj/machinery/computer/aifixer))
src.overlays = null
overlays = null
else if(powered())
icon_state = initial(icon_state)
@@ -68,19 +68,19 @@ Pod/Blast Doors computer
if (O.occupant)
switch (O.occupant.stat)
if (0)
src.overlays += image('computer.dmi', "ai-fixer-full")
overlays += image('computer.dmi', "ai-fixer-full")
if (2)
src.overlays += image('computer.dmi', "ai-fixer-404")
overlays += image('computer.dmi', "ai-fixer-404")
else
src.overlays += image('computer.dmi', "ai-fixer-empty")
overlays += image('computer.dmi', "ai-fixer-empty")
else
spawn(rand(0, 15))
//src.icon_state = "c_unpowered"
//icon_state = "c_unpowered"
icon_state = initial(icon_state)
src.icon_state += "0"
icon_state += "0"
stat |= NOPOWER
if (istype(src,/obj/machinery/computer/aifixer))
src.overlays = null
overlays = null
/obj/machinery/computer/process()
if(stat & (NOPOWER|BROKEN))
@@ -94,19 +94,19 @@ Pod/Blast Doors computer
/obj/machinery/computer/security/New()
..()
src.verbs -= /obj/machinery/computer/security/verb/station_map
verbs -= /obj/machinery/computer/security/verb/station_map
/obj/machinery/computer/security/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
playsound(loc, 'Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
if (stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/computerframe/A = new /obj/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/computerframe/A = new /obj/computerframe( loc )
new /obj/item/weapon/shard( loc )
var/obj/item/weapon/circuitboard/security/M = new /obj/item/weapon/circuitboard/security( A )
for (var/obj/C in src)
C.loc = src.loc
C.loc = loc
A.circuit = M
A.state = 3
A.icon_state = "3"
@@ -114,38 +114,38 @@ Pod/Blast Doors computer
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/computerframe/A = new /obj/computerframe( src.loc )
var/obj/computerframe/A = new /obj/computerframe( loc )
var/obj/item/weapon/circuitboard/security/M = new /obj/item/weapon/circuitboard/security( A )
for (var/obj/C in src)
C.loc = src.loc
C.loc = loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else
src.attack_hand(user)
attack_hand(user)
return
/obj/machinery/computer/security/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/security/attack_paw(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/security/check_eye(var/mob/user as mob)
if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( src.current ) || !( src.current.status )) && (!istype(user, /mob/living/silicon)))
if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
return null
user.reset_view(src.current)
user.reset_view(current)
return 1
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
if(..())
@@ -155,59 +155,66 @@ Pod/Blast Doors computer
var/dat
if (!( ticker ))
return
if (src.mode) // accessing crew manifest
if (mode) // accessing crew manifest
var/crew = ""
for(var/datum/data/record/t in data_core.general)
crew += "[t.fields["name"]] - [t.fields["rank"]]<br>"
dat = "<tt><b>Crew Manifest:</b><br>Please use security record computer to modify entries.<br>[crew]<a href='?src=\ref[src];print=1'>Print</a><br><br><a href='?src=\ref[src];mode=0'>Access ID modification console.</a><br></tt>"
dat = "<tt><b>Crew Manifest:</b><br>Please use security record computer to modify entries.<br>[crew]<a href='?src=\ref[src];choice=print'>Print</a><br><br><a href='?src=\ref[src];choice=mode;mode_target=0'>Access ID modification console.</a><br></tt>"
else
var/header = "<b>Identification Card Modifier</b><br><i>Please insert the cards into the slots</i><br>"
var/target_name
var/target_owner
var/target_rank
if(src.modify)
target_name = src.modify.name
if(modify)
target_name = modify.name
else
target_name = "--------"
if(src.modify && src.modify.registered)
target_owner = src.modify.registered
if(modify && modify.registered)
target_owner = modify.registered
else
target_owner = "--------"
if(src.modify && src.modify.assignment)
target_rank = src.modify.assignment
if(modify && modify.assignment)
target_rank = modify.assignment
else
target_rank = "Unassigned"
header += "Target: <a href='?src=\ref[src];modify=1'>[target_name]</a><br>"
header += "Target: <a href='?src=\ref[src];choice=modify'>[target_name]</a><br>"
var/scan_name
if(src.scan)
scan_name = src.scan.name
if(scan)
scan_name = scan.name
else
scan_name = "--------"
header += "Confirm Identity: <a href='?src=\ref[src];scan=1'>[scan_name]</a><br>"
header += "Confirm Identity: <a href='?src=\ref[src];choice=scan'>[scan_name]</a><br>"
header += "<hr>"
var/body
if (src.authenticated && src.modify)
var/carddesc = "Registered: <a href='?src=\ref[src];reg=1'>[target_owner]</a><br>Assignment: [target_rank]"
var/list/alljobs = get_all_jobs() + "Custom"
if (authenticated && modify)
var/carddesc = "Registered: <a href='?src=\ref[src];choice=reg'>[target_owner]</a><br>Assignment: [target_rank]"
var/jobs = ""
var/list/alljobs = (istype(src,/obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
for(var/job in alljobs)
jobs += "<a href='?src=\ref[src];assign=[job]'>[dd_replacetext(job, " ", "&nbsp")]</a> " //make sure there isn't a line break in the middle of a job
jobs += "<a href='?src=\ref[src];choice=assign;assign_target=[job]'>[dd_replacetext(job, " ", "&nbsp")]</a> " //make sure there isn't a line break in the middle of a job
var/accesses = ""
var/i
for(i = 1; i <= 7; i++)
if(istype(src,/obj/machinery/computer/card/centcom))
accesses += "<h5>Central Command:</h5>"
for(var/A in get_all_centcom_access())
if(A in modify.access)
accesses += "<a href='?src=\ref[src];choice=access;access_target=[A];allowed=0'><font color=\"red\">[dd_replacetext(get_centcom_access_desc(A), " ", "&nbsp")]</font></a> "
else
accesses += "<a href='?src=\ref[src];choice=access;access_target=[A];allowed=1'>[dd_replacetext(get_centcom_access_desc(A), " ", "&nbsp")]</a> "
else
for(var/i = 1; i <= 7; i++)
accesses += "<b>[get_region_accesses_name(i)]:</b> "
for(var/A in get_region_accesses(i))
if(A in src.modify.access)
accesses += "<a href='?src=\ref[src];access=[A];allowed=0'><font color=\"red\">[dd_replacetext(get_access_desc(A), " ", "&nbsp")]</font></a> "
if(A in modify.access)
accesses += "<a href='?src=\ref[src];choice=access;access_target=[A];allowed=0'><font color=\"red\">[dd_replacetext(get_access_desc(A), " ", "&nbsp")]</font></a> "
else
accesses += "<a href='?src=\ref[src];access=[A];allowed=1'>[dd_replacetext(get_access_desc(A), " ", "&nbsp")]</a> "
accesses += "<a href='?src=\ref[src];choice=access;access_target=[A];allowed=1'>[dd_replacetext(get_access_desc(A), " ", "&nbsp")]</a> "
accesses += "<br>"
body = "[carddesc]<br>[jobs]<br><br>[accesses]"
else
body = "<a href='?src=\ref[src];auth=1'>{Log in}</a>"
dat = "<tt>[header][body]<hr><a href='?src=\ref[src];mode=1'>Access Crew Manifest</a><br></tt>"
body = "<a href='?src=\ref[src];choice=auth'>{Log in}</a>"
dat = "<tt>[header][body]<hr><a href='?src=\ref[src];choice=mode;mode_target=1'>Access Crew Manifest</a><br></tt>"
user << browse(dat, "window=id_com;size=700x520")
onclose(user, "id_com")
return
@@ -216,90 +223,90 @@ Pod/Blast Doors computer
if(..())
return
usr.machine = src
if (href_list["modify"])
if (src.modify)
src.modify.name = text("[]'s ID Card ([])", src.modify.registered, src.modify.assignment)
src.modify.loc = src.loc
src.modify = null
switch(href_list["choice"])
if ("modify")
if (modify)
modify.name = text("[]'s ID Card ([])", modify.registered, modify.assignment)
modify.loc = loc
modify = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
src.modify = I
src.authenticated = 0
if (href_list["scan"])
if (src.scan)
src.scan.loc = src.loc
src.scan = null
modify = I
authenticated = 0
if ("scan")
if (scan)
scan.loc = loc
scan = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
src.scan = I
src.authenticated = 0
if (href_list["auth"])
if ((!( src.authenticated ) && (src.scan || (istype(usr, /mob/living/silicon))) && (src.modify || src.mode)))
if (src.check_access(src.scan))
src.authenticated = 1
else if ((!( src.authenticated ) && (istype(usr, /mob/living/silicon))) && (!src.modify))
scan = I
authenticated = 0
if ("auth")
if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode)))
if (check_access(scan))
authenticated = 1
else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify))
usr << "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in."
if(href_list["access"] && href_list["allowed"])
if(src.authenticated)
var/access_type = text2num(href_list["access"])
if("access")
if(href_list["allowed"])
if(authenticated)
var/access_type = text2num(href_list["access_target"])
var/access_allowed = text2num(href_list["allowed"])
if(access_type in get_all_accesses())
src.modify.access -= access_type
if(access_type in (istype(src,/obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
modify.access -= access_type
if(access_allowed == 1)
src.modify.access += access_type
if (href_list["assign"])
if (src.authenticated)
var/t1 = href_list["assign"]
modify.access += access_type
if ("assign")
if (authenticated)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
t1 = input("Enter a custom job assignment.","Assignment")
else
src.modify.access = get_access(t1)
if (src.modify)
src.modify.assignment = t1
if (href_list["reg"])
if (src.authenticated)
var/t2 = src.modify
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
if (modify)
modify.assignment = t1
if ("reg")
if (authenticated)
var/t2 = modify
var/t1 = input(usr, "What name?", "ID computer", null) as text
if ((src.authenticated && src.modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(src.loc, /turf)))
src.modify.registered = t1
if (href_list["mode"])
src.mode = text2num(href_list["mode"])
if (href_list["print"])
if (!( src.printing ))
src.printing = 1
if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
modify.registered = t1
if ("mode")
mode = text2num(href_list["mode_target"])
if ("print")
if (!( printing ))
printing = 1
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
var/t1 = "<B>Crew Manifest:</B><BR>"
for(var/datum/data/record/t in data_core.general)
t1 += "<B>[t.fields["name"]]</B> - [t.fields["rank"]]<BR>"
P.info = t1
P.name = "paper- 'Crew Manifest'"
src.printing = null
if (href_list["mode"])
src.authenticated = 0
src.mode = text2num(href_list["mode"])
if (src.modify)
src.modify.name = text("[]'s ID Card ([])", src.modify.registered, src.modify.assignment)
src.updateUsrDialog()
printing = null
if (modify)
modify.name = text("[]'s ID Card ([])", modify.registered, modify.assignment)
updateUsrDialog()
return
/obj/machinery/computer/card/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
playsound(loc, 'Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
var/card_path = text2path("/obj/item/weapon/circuitboard/card[istype(src,/obj/machinery/computer/card/centcom)?"/centcom":""]")
if (stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/computerframe/A = new /obj/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/card/M = new /obj/item/weapon/circuitboard/card( A )
var/obj/computerframe/A = new /obj/computerframe( loc )
new /obj/item/weapon/shard( loc )
var/obj/item/weapon/circuitboard/card/M = new card_path( A )
for (var/obj/C in src)
C.loc = src.loc
C.loc = loc
A.circuit = M
A.state = 3
A.icon_state = "3"
@@ -307,17 +314,17 @@ Pod/Blast Doors computer
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/computerframe/A = new /obj/computerframe( src.loc )
var/obj/item/weapon/circuitboard/card/M = new /obj/item/weapon/circuitboard/card( A )
var/obj/computerframe/A = new /obj/computerframe( loc )
var/obj/item/weapon/circuitboard/card/M = new card_path( A )
for (var/obj/C in src)
C.loc = src.loc
C.loc = loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else
src.attack_hand(user)
attack_hand(user)
return
/obj/datacore/proc/manifest()
@@ -386,26 +393,26 @@ Pod/Blast Doors computer
if(stat & (NOPOWER|BROKEN))
return
if (!( src.connected ))
if (!( connected ))
viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!"
return
for(var/obj/machinery/door/poddoor/M in machines)
if (M.id == src.id)
if (M.id == id)
spawn( 0 )
M.open()
return
sleep(20)
//src.connected.drive() *****RM from 40.93.3S
//connected.drive() *****RM from 40.93.3S
for(var/obj/machinery/mass_driver/M in machines)
if(M.id == src.id)
M.power = src.connected.power
if(M.id == id)
M.power = connected.power
M.drive()
sleep(50)
for(var/obj/machinery/door/poddoor/M in machines)
if (M.id == src.id)
if (M.id == id)
spawn( 0 )
M.close()
return
@@ -415,20 +422,20 @@ Pod/Blast Doors computer
..()
spawn( 5 )
for(var/obj/machinery/mass_driver/M in machines)
if (M.id == src.id)
src.connected = M
if (M.id == id)
connected = M
else
return
return
/obj/machinery/computer/pod/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
playsound(loc, 'Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
if (stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/computerframe/A = new /obj/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/computerframe/A = new /obj/computerframe( loc )
new /obj/item/weapon/shard( loc )
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
@@ -442,8 +449,8 @@ Pod/Blast Doors computer
M = new /obj/item/weapon/circuitboard/pod( A )
for (var/obj/C in src)
C.loc = src.loc
M.id = src.id
C.loc = loc
M.id = id
A.circuit = M
A.state = 3
A.icon_state = "3"
@@ -451,7 +458,7 @@ Pod/Blast Doors computer
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/computerframe/A = new /obj/computerframe( src.loc )
var/obj/computerframe/A = new /obj/computerframe( loc )
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
@@ -465,22 +472,22 @@ Pod/Blast Doors computer
M = new /obj/item/weapon/circuitboard/pod( A )
for (var/obj/C in src)
C.loc = src.loc
M.id = src.id
C.loc = loc
M.id = id
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else
src.attack_hand(user)
attack_hand(user)
return
/obj/machinery/computer/pod/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/pod/attack_paw(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/pod/attack_hand(var/mob/user as mob)
if(..())
@@ -489,18 +496,18 @@ Pod/Blast Doors computer
var/dat = "<HTML><BODY><TT><B>Mass Driver Controls</B>"
user.machine = src
var/d2
if (src.timing)
if (timing)
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Launch</A>", src)
else
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Launch</A>", src)
var/second = src.time % 60
var/minute = (src.time - second) / 60
var/second = time % 60
var/minute = (time - second) / 60
dat += text("<HR>\nTimer System: []\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
if (src.connected)
if (connected)
var/temp = ""
var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
for(var/t in L)
if (t == src.connected.power)
if (t == connected.power)
temp += text("[] ", t)
else
temp += text("<A href = '?src=\ref[];power=[]'>[]</A> ", src, t, t)
@@ -517,37 +524,37 @@ Pod/Blast Doors computer
/obj/machinery/computer/pod/process()
..()
if (src.timing)
if (src.time > 0)
src.time = round(src.time) - 1
if (timing)
if (time > 0)
time = round(time) - 1
else
alarm()
src.time = 0
src.timing = 0
src.updateDialog()
time = 0
timing = 0
updateDialog()
return
/obj/machinery/computer/pod/Topic(href, href_list)
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
if (href_list["power"])
var/t = text2num(href_list["power"])
t = min(max(0.25, t), 16)
if (src.connected)
src.connected.power = t
if (connected)
connected.power = t
else
if (href_list["alarm"])
src.alarm()
alarm()
else
if (href_list["time"])
src.timing = text2num(href_list["time"])
timing = text2num(href_list["time"])
else
if (href_list["tp"])
var/tp = text2num(href_list["tp"])
src.time += tp
src.time = min(max(round(src.time), 0), 120)
time += tp
time = min(max(round(time), 0), 120)
else
if (href_list["door"])
if(istype(src, /obj/machinery/computer/pod/old/syndicate))//Added here so Nuke ops don't go running naked into space before moving the shuttle.
@@ -555,7 +562,7 @@ Pod/Blast Doors computer
usr << "\red You need to launch the Syndicate Shuttle via the computer terminal at the head of the ship before departing."
return
for(var/obj/machinery/door/poddoor/M in machines)
if (M.id == src.id)
if (M.id == id)
if (M.density)
spawn( 0 )
M.open()
@@ -565,8 +572,8 @@ Pod/Blast Doors computer
M.close()
return
//Foreach goto(298)
src.add_fingerprint(usr)
src.updateUsrDialog()
add_fingerprint(usr)
updateUsrDialog()
return

View File

@@ -28,8 +28,8 @@ Frequency:
..()
if (usr.stat || usr.restrained())
return
var/turf/current_location = locate(usr.x,usr.y,usr.z)//Can't teleport on clown-planet z-level.
if(current_location.z==6)
var/turf/current_location = get_turf(usr)//What turf is the user on?
if(!current_location||current_location.z==6)//If turf was not found or they're on z level 6.
usr << "The [src] is malfunctioning."
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
@@ -103,8 +103,8 @@ Frequency:
/// HAND TELE
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
var/turf/current_location = locate(usr.x,user.y,usr.z)//Can't teleport on clown-planet z-level.
if(current_location.z==6)
var/turf/current_location = get_turf(user)//What turf is the user on?
if(!current_location||current_location.z==6)//If turf was not found or they're on z level 6.
user << "The [src] is malfunctioning."
return
var/list/L = list( )

View File

@@ -14,19 +14,42 @@ var/specops_shuttle_timeleft = 0
name = "Spec. Ops. Shuttle Console"
icon = 'computer.dmi'
icon_state = "shuttle"
req_access = list()
req_access = list(access_cent_specops)
var/temp = null
var/hacked = 0
var/allowedtocall = 0
/proc/specops_process()
var/area/centcom/control/cent_com = locate()//To find announcer. This area should exist for this proc to work.
var/area/centcom/specops/special_ops = locate()//Where is the specops area located?
var/mob/living/silicon/decoy/announcer = locate() in cent_com//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
var/message = "THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH"//Initial message shown.
if(announcer)
announcer.say(message)
//world << "Should be hearing a message here."
while(specops_shuttle_time - world.timeofday > 0)
var/ticksleft = specops_shuttle_time - world.timeofday
if(ticksleft > 1e5)
specops_shuttle_time = world.timeofday + 10 // midnight rollover
specops_shuttle_timeleft = (ticksleft / 10)
//All this does is announce the time before launch.
if(announcer)
var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions.
if(rounded_time_left in message_tracker)//If that time is in the list for message announce.
message = "ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN"
if(rounded_time_left==0)
message = "ALERT: TAKEOFF"
announcer.say(message)
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
sleep(5)
specops_shuttle_moving_to_station = 0
specops_shuttle_moving_to_centcom = 0
@@ -39,7 +62,7 @@ var/specops_shuttle_timeleft = 0
//Begin Marauder launchpad.
spawn(0)//So it parallel processes it.
for(var/obj/machinery/door/poddoor/M in machines)
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)
if("ASSAULT0")
spawn(10)//1 second delay between each.
@@ -63,14 +86,14 @@ var/specops_shuttle_timeleft = 0
for(var/obj/landmark/L in world)
if(L.name == "Marauder Exit")
var/obj/portal/P = new(L.loc)
P.invisibility = 101
P.failchance = 0
P.target = pick(spawn_marauder)
P.invisibility = 101//So it is not seen by anyone.
P.failchance = 0//So it has no fail chance when teleporting.
P.target = pick(spawn_marauder)//Where the marauder will arrive.
spawn_marauder.Remove(P.target)
sleep(10)
for(var/obj/machinery/mass_driver/M in machines)
for(var/obj/machinery/mass_driver/M in special_ops)
switch(M.id)
if("ASSAULT0")
spawn(10)
@@ -87,7 +110,7 @@ var/specops_shuttle_timeleft = 0
sleep(50)//Doors remain open for 5 seconds.
for(var/obj/machinery/door/poddoor/M in machines)
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)//Doors close at the same time.
if("ASSAULT0")
spawn(0)
@@ -101,6 +124,7 @@ var/specops_shuttle_timeleft = 0
if("ASSAULT3")
spawn(0)
M.close()
special_ops.readyreset()//Reset firealarm after the team launched.
//End Marauder launchpad.
var/area/start_location = locate(/area/shuttle/specops/centcom)
@@ -135,22 +159,22 @@ var/specops_shuttle_timeleft = 0
else return 1
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_paw(var/mob/user as mob)
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
if(istype(I,/obj/item/weapon/card/emag))
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
else
return src.attack_hand(user)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob)
if(!src.allowed(user))
if(!allowed(user))
user << "\red Access Denied."
return
@@ -163,8 +187,8 @@ var/specops_shuttle_timeleft = 0
user.machine = src
var/dat
if (src.temp)
dat = src.temp
if (temp)
dat = temp
else
dat += {"<BR><B>Special Operations Shuttle</B><HR>
\nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]<BR>
@@ -179,7 +203,7 @@ var/specops_shuttle_timeleft = 0
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
if (href_list["sendtodock"])
@@ -197,9 +221,12 @@ var/specops_shuttle_timeleft = 0
usr << "\blue The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds."
src.temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
src.updateUsrDialog()
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
updateUsrDialog()
var/area/centcom/specops/special_ops = locate()
if(special_ops)
special_ops.readyalert()//Trigger alarm for the spec ops area.
specops_shuttle_moving_to_station = 1
specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME
@@ -207,8 +234,8 @@ var/specops_shuttle_timeleft = 0
specops_process()
else if (href_list["mainmenu"])
src.temp = null
temp = null
src.add_fingerprint(usr)
src.updateUsrDialog()
add_fingerprint(usr)
updateUsrDialog()
return

View File

@@ -1608,7 +1608,6 @@ var/showadminmessages = 1
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR>
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
<A href='?src=\ref[src];secretsfun=cleanexcrement'>Remove all urine/poo from station</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A><BR>

View File

@@ -318,7 +318,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
id = pda.id
log_admin("[key_name(src)] has granted [M.key] full access.")
id.icon_state = "gold"
id:access = get_all_accesses()
id:access = get_all_accesses()+get_all_centcom_access()
else
alert("Invalid ID card")
else

View File

@@ -498,7 +498,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("traitor")
new_character.Equip_Rank(new_character.mind.assigned_role, joined_late=1)
ticker.mode.equip_traitor(new_character)
if("Wizard","Fake Wizard")
if("Wizard")
new_character.loc = pick(wizardstart)
ticker.mode.learn_basic_spells(new_character)
ticker.mode.equip_wizard(new_character)

View File

@@ -43,7 +43,13 @@ var/global/sent_strike_team = 0
var/leader_selected = 0 //when the leader is chosen. The last person spawned.
//Code for spawning a nuke auth code.
var/nuke_code = "[rand(10000, 99999.0)]"
var/nuke_code
var/temp_code
for(var/obj/machinery/nuclearbomb/N in world)
temp_code = text2num(N.r_code)
if(temp_code)//if it's actually a number. It won't convert any non-numericals.
nuke_code = N.r_code
break
//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos.
var/mob/dead/observer/G//Basic variable to search for later.
@@ -77,23 +83,21 @@ var/global/sent_strike_team = 0
commandos_list -= G
del(G)
new_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].")//So they don't forget their code or mission.
//So they don't forget their code or mission.
if(nuke_code)
new_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].")
new_commando.mind.store_memory("<B>Mission:</B> \red [input].")
new_commando << "\blue You are a Special Ops. [!leader_selected?"commando":"<B>LEADER</B>"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: \red<B>[input]</B>"
commando_number--
//Targets any nukes in the world and changes their auth code as needed.
//Bad news for Nuke operatives--or great news.
for(var/obj/machinery/nuclearbomb/N in world)
N.r_code = nuke_code
//Spawns the rest of the commando gear.
for (var/obj/landmark/L)
if (L.name == "Commando_Manual")
new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
var/obj/item/weapon/paper/P = new(L.loc)
P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code]</b></p><p><b>Good luck, soldier!</b></p>"
P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
P.name = "Spec. Ops. Manual"
for (var/obj/landmark/L in world)
@@ -176,7 +180,9 @@ var/global/sent_strike_team = 0
var/obj/item/weapon/card/id/W = new(src)
W.name = "[real_name]'s ID Card"
W.access = get_all_accesses()
W.icon = "centcom"
W.access = get_all_accesses()//They get full station access.
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
W.assignment = "Death Commando"
W.registered = real_name
equip_if_possible(W, slot_wear_id)

View File

@@ -18,6 +18,8 @@
say_understands(var/other)
if (istype(other, /mob/living/silicon/ai))
return 1
if (istype(other, /mob/living/silicon/decoy))
return 1
if (istype(other, /mob/living/silicon/robot))
return 1
if (istype(other, /mob/living/carbon/human))

View File

@@ -76,6 +76,8 @@
/mob/living/carbon/human/say_understands(var/other)
if (istype(other, /mob/living/silicon/ai))
return 1
if (istype(other, /mob/living/silicon/decoy))
return 1
if (istype(other, /mob/living/silicon/pai))
return 1
if (istype(other, /mob/living/silicon/robot))

View File

@@ -3,6 +3,8 @@
return 1
if (istype(other, /mob/living/silicon/robot))
return 1
if (istype(other, /mob/living/silicon/decoy))
return 1
return ..()
/mob/living/silicon/ai/say_quote(var/text)

View File

@@ -3,3 +3,22 @@
src.icon_state = "ai"
src.anchored = 1
src.canmove = 0
/mob/living/silicon/decoy/say_understands(var/other)
if (istype(other, /mob/living/carbon/human))
return 1
if (istype(other, /mob/living/silicon/robot))
return 1
if (istype(other, /mob/living/silicon/ai))
return 1
return ..()
/mob/living/silicon/decoy/say_quote(var/text)
var/ending = copytext(text, length(text))
if (ending == "?")
return "queries, \"[text]\"";
else if (ending == "!")
return "declares, \"[copytext(text, 1, length(text))]\"";
return "states, \"[text]\"";

View File

@@ -7,6 +7,8 @@
return 1
if (istype(other, /mob/living/silicon/ai))
return 1
if (istype(other, /mob/living/silicon/decoy))
return 1
if (istype(other, /mob/living/carbon/brain))
return 1
return ..()

View File

@@ -1,6 +1,8 @@
/mob/living/silicon/robot/say_understands(var/other)
if (istype(other, /mob/living/silicon/ai))
return 1
if (istype(other, /mob/living/silicon/decoy))
return 1
if (istype(other, /mob/living/carbon/human))
return 1
if (istype(other, /mob/living/silicon/hivebot))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -41,7 +41,6 @@
#define FILE_DIR "code/game/gamemodes/revolution"
#define FILE_DIR "code/game/gamemodes/sandbox"
#define FILE_DIR "code/game/gamemodes/traitor"
#define FILE_DIR "code/game/gamemodes/traitor_pair"
#define FILE_DIR "code/game/gamemodes/wizard"
#define FILE_DIR "code/game/jobs"
#define FILE_DIR "code/game/machinery"
@@ -347,7 +346,6 @@
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
#include "code\game\gamemodes\sandbox\sandbox.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
#include "code\game\gamemodes\traitor_pair\traitor_pair.dm"
#include "code\game\gamemodes\wizard\spells.dm"
#include "code\game\gamemodes\wizard\wizard.dm"
#include "code\game\jobs\access.dm"