Tg patch branch to master (#192)

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Tg modern (#149)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* Mentor system, Tickets, and discord (#151)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* Vore code sync (#157)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* edgy code of the modernization (#164)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* Small fixes for dogborgs and sprite accessories:
-Ported the hidden snippets of the dogborg code.
-Reset module now resets pixel offset and icon directory again. (broke shit when reseting from dogborg)
-Medihound belly fixed.
-Husky body marking tweaked to not overlap arms in side view.
-Added husky ears that are basically wolf ears that use secondary color instead.

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* some species and DNA tweaks

* Digest already damn you

* suddenly sound and resist works. wtf

* Minor tweaks, cryopod noise change

* Vore tested working, species working

* Merge test onto bleeding edgy (#165)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* Small fixes for dogborgs and sprite accessories:
-Ported the hidden snippets of the dogborg code.
-Reset module now resets pixel offset and icon directory again. (broke shit when reseting from dogborg)
-Medihound belly fixed.
-Husky body marking tweaked to not overlap arms in side view.
-Added husky ears that are basically wolf ears that use secondary color instead.

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* some species and DNA tweaks

* Digest already damn you

* suddenly sound and resist works. wtf

* Minor tweaks, cryopod noise change

* Vore tested working, species working

* travis map updates

* updates

* pool's closed due to lag

* datum pools are closed too

* Initializing new pool's closed

* Pool's closed and initializing shit is done

* sprite updates

* chattering is okay to do now.

* bleeblin edgy 1/23 (#166)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Escape and Devourable

For the normies who play here yet complain about it.

* Things that should be committed

* unneeded files

* Sizeray works now

* tweaks and bed time going

* IT WORKS mostly

Need to get multiple guts and saving working tho

* save tweaks

* item hotfix

* gut examine message

* damifino

* save system works

also ensured some mobs have vore controls, so silicons can't even
remotely do vore things.

* code nitpicking

* Midnight oil

More like 6am oil.  Still having issues with actually eating anyone.

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* missed commit

* Noms

* specific release doesn't work

* Tg modernization patch (#115)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes

* port from cactus did

* fix format error

* Update preferences.dm

unfuck

* Revert "port from cactus did"

* unfuck

* more sprite work

* vore

* disabled roundstart xenos for now

* admin QOL

needs callback porting, TBD

* Mentor system initial port

I'm sure I've missed a fuckton of shit

* test merge

* Jesus tits did this finally fix compile issues?

* Initial test compiles. hooray.

* Admin ticket fixes

* I'll give you a bad argument you piece of shit dream maker I fucking swear on my mum

* who list wip

also ahelps are broken again. fuck if I know why

* discord bot basics

* maybe tickets work now & bot framework done

* ahelp callback readd

* vore tweaks

* progress

* Small fixes for dogborgs and sprite accessories:
-Ported the hidden snippets of the dogborg code.
-Reset module now resets pixel offset and icon directory again. (broke shit when reseting from dogborg)
-Medihound belly fixed.
-Husky body marking tweaked to not overlap arms in side view.
-Added husky ears that are basically wolf ears that use secondary color instead.

* dirtier fix than a korean hooker in the 60s

* The release your hooker will always fake

* you could save that hookers number but wouldn't you rather just vore the hooker instead

* Save system is literal black magic

* great googly moogly it's all gone to shit

* We May 2015 save code now

* fiddling with digestion code now

* fuck if I know anymore. I'm going to bed

* OWN UP YOUR OWN DIGESTION

* UNREGULATED GUTS ARE NON COMPLIANT

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

* BELLIES MUST COMPLY WITH USER OWNERSHIP

* Removed debug messages

* Unneeded verb additions

* file change tweaks

* WATCH YOUR SPACING, DRIVER

* Changelog and devourment for some mobs.

Because I knew people were gunna ask.

NO YOU CANNOT EAT THE FUCKING LEGION

* title screen change from Crow's PR.

* More of Crow's title screen stuff

* mode tweaks.... again

* gamemode voting in lobby via TalkingCactus
disabled ashwalkers as roundstart
Verk's species tweak
paralax starts disabled by default

* LOOC

* index sync problem (#158)

* digifix

* things

* furry races.dm

* actually deletes species_types

* maps

* tgui and stuff

* Sounds

* icon updates

* Defines and helpers

* global vars and on click

* controllers

* datums

* game folder

* fixes invisible flan mobs

* some modules

* dropbomb verb enhanced

* moar

* moar

* moar

* even more again

* and finally these for modules

* Some compile tweaks

* silly dme get updated you scrub

* compiles cleanly now

* various open PR fixes from TG

as of 0800 Texas Standard Time

* also fancy cryopods before I forget again

* headslug gold core fix

* some species and DNA tweaks

* Digest already damn you

* suddenly sound and resist works. wtf

* Minor tweaks, cryopod noise change

* Vore tested working, species working

* travis map updates

* updates

* pool's closed due to lag

* datum pools are closed too

* Initializing new pool's closed

* Pool's closed and initializing shit is done

* sprite updates

* chattering is okay to do now.

* Update .travis.yml

* Update .travis.yml

* Update .travis.yml

* Revert "Modern modern"

* Revert "Revert "Modern modern""

* fix it fix it fix it fix it

* fixes title screen - thanks crow

* Riding code reverted

* possible tgui fix?

* who the fuck even knows if this is the problem

* adds moths and sharks (no colors yet, not greyscaled)
adds LOOC back

* "fixes" missing items in some machinery.

* slight tweaks to abductor spawns
borer event enabled (max 1)

* Update .travis.yml

* fixes shuttle purchase from comms

* fixes and QoL

* Polymorphing all is dangerous too

* re-fixes ahelp ticket system again

* metagaming check proving to be spamlicious

* Fixes not being able to see devoured mob poses

* fix for vehicle buckling

* ahelp timer runtime fix (#178)

* controller and game updates 1/29

* Defines, helpers, datums 1/29

* world.dm updates

* modules/admin tweaks

* everything in modules not a mob

* modules/mob fixes and such

No more PAIs ventcrawling

* icons, maps, tools, etc.

* compiler fixes

* round type vote fixed

* hardsuit cargo pack

* reduce ion and electric storm chance

* perms access for travis

* fix helmet to the suit
removes CE from crate

* changelog

* fuck

* perms for travis... again

* Update tgstation.dme

* Update tgstation.dme

* Donation race

* redpanda

* red panda

* size play work

* Size chemical basics

Needs testing/refining

* some fixing ports before I just fucking ported it anyway

* It's been a fucking week.

* commiting moar changes because github

* admins.txt lol

* icons

* defines and such

* globalvars and onclick

* Controllers

* datums

* game folder

* oh look, HoG is back

* modules pt 1

* client things

* more modules

* everything not mob code

* some mob stuff

* more mob things

* silicon mobs

* ayylims and monkeys

* human updates

* huh

* housekeeping is fired.

* last minute fixes

* more last minute things

* human parts double check'd

* more paper

* Icons are fixed

* double check of thermal protection code. (#191)
This commit is contained in:
TalkingCactus
2017-02-03 06:56:14 -05:00
committed by Poojawa
parent 7735dec0ec
commit f7c09077d2
2489 changed files with 830965 additions and 416701 deletions
+2 -11
View File
@@ -6,15 +6,8 @@
circuit = /obj/item/weapon/circuitboard/computer/operating
var/mob/living/carbon/human/patient = null
var/obj/structure/table/optable/table = null
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/operating/New()
..()
if(ticker)
find_table()
/obj/machinery/computer/operating/initialize()
/obj/machinery/computer/operating/Initialize()
find_table()
/obj/machinery/computer/operating/proc/find_table()
@@ -40,10 +33,8 @@
else
patient = null
dat += "<B>No patient detected</B>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
dat += "<B>Operating table not found.</B>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
var/datum/browser/popup = new(user, "op", "Operating Computer", 400, 500)
popup.set_content(dat)
@@ -69,4 +60,4 @@
var/datum/surgery_step/surgery_step = procedure.get_surgery_step()
dat += "Next step: [capitalize(surgery_step.name)]<BR>"
dat += "</div>"
return dat
return dat
+19 -23
View File
@@ -7,7 +7,6 @@
circuit = /obj/item/weapon/circuitboard/computer/aifixer
icon_keyboard = "tech_key"
icon_screen = "ai-fixer"
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/aifixer/attackby(obj/I, mob/user, params)
if(occupier && istype(I, /obj/item/weapon/screwdriver))
@@ -65,43 +64,40 @@
else
dat += "<br><br>Reconstruction in process, please wait.<br>"
dat += {"<br><A href='?src=\ref[user];mach_close=computer'>Close</A>"}
//user << browse(dat, "window=computer;size=400x500")
//onclose(user, "computer")
var/datum/browser/popup = new(user, "computer", "AI System Integrity Restorer", 400, 500)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/aifixer/proc/Fix()
. = use_power(1000)
if(.)
occupier.adjustOxyLoss(-1, 0)
occupier.adjustFireLoss(-1, 0)
occupier.adjustToxLoss(-1, 0)
occupier.adjustBruteLoss(-1, 0)
occupier.updatehealth()
occupier.updatehealth()
if(occupier.health >= 0 && occupier.stat == DEAD)
occupier.revive()
. = occupier.health < 100
/obj/machinery/computer/aifixer/process()
if(..())
src.updateDialog()
return
if(active)
active = Fix()
updateDialog()
update_icon()
/obj/machinery/computer/aifixer/Topic(href, href_list)
if(..())
return
if(href_list["fix"])
usr << "<span class='notice'>Reconstruction in progress. This will take several minutes.</span>"
playsound(src, 'sound/machines/terminal_processing.ogg', 25, 0)
active = 1
while (occupier.health < 100)
occupier.adjustOxyLoss(-1, 0)
occupier.adjustFireLoss(-1, 0)
occupier.adjustToxLoss(-1, 0)
occupier.adjustBruteLoss(-1, 0)
occupier.updatehealth()
if(occupier.health >= 0 && occupier.stat == DEAD)
occupier.revive()
updateUsrDialog()
update_icon()
sleep(10)
active = 0
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
active = TRUE
add_fingerprint(usr)
updateUsrDialog()
update_icon()
/obj/machinery/computer/aifixer/update_icon()
..()
+13 -14
View File
@@ -1,12 +1,10 @@
/obj/machinery/computer/arcade/
/obj/machinery/computer/arcade
name = "random arcade"
desc = "random arcade machine"
icon_state = "arcade"
icon_keyboard = null
icon_screen = "invaders"
clockwork = TRUE //it'd look weird
light_color = LIGHT_COLOR_GREEN
light_range_on = 2
var/list/prizes = list(
/obj/item/weapon/storage/box/snappops = 2,
/obj/item/toy/talking/AI = 2,
@@ -14,7 +12,7 @@
/obj/item/clothing/under/syndicate/tacticool = 2,
/obj/item/toy/sword = 2,
/obj/item/toy/gun = 2,
/obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2,
/obj/item/weapon/gun/ballistic/shotgun/toy/crossbow = 2,
/obj/item/weapon/storage/box/fakesyndiesuit = 2,
/obj/item/weapon/storage/crayons = 2,
/obj/item/toy/spinningtoy = 2,
@@ -40,6 +38,7 @@
/obj/item/weapon/coin/antagtoken = 2,
/obj/item/stack/tile/fakespace/loaded = 2,
/obj/item/toy/toy_xeno = 2,
/obj/item/weapon/storage/box/actionfigure = 1,
/obj/item/weapon/restraints/handcuffs/fake = 2)
/obj/machinery/computer/arcade/New()
@@ -52,9 +51,12 @@
new CB.build_path(loc, CB)
qdel(src)
#define PULSE_MEDAL "Jackpot"
/obj/machinery/computer/arcade/proc/prizevend()
if(prob(0.0001)) //1 in a million
new /obj/item/weapon/gun/energy/pulse/prize(src)
UnlockMedal(PULSE_MEDAL,usr.client)
if(!contents.len)
var/prizeselect = pickweight(prizes)
@@ -66,7 +68,7 @@
"<span class='notice'>You hear a chime and a clunk.</span>")
prize.loc = src.loc
#undef PULSE_MEDAL
/obj/machinery/computer/arcade/emp_act(severity)
..(severity)
@@ -136,9 +138,6 @@
dat += "<a href='byond://?src=\ref[src];charge=1'>Recharge Power</a>"
dat += "</b></center>"
//user << browse(dat, "window=arcade")
//onclose(user, "arcade")
var/datum/browser/popup = new(user, "arcade", "Space Villian 2000")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -497,7 +496,7 @@
M.hallucination += 30
else
usr << "<span class='userdanger'>Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...</span>"
M.take_organ_damage(30)
M.take_bodypart_damage(30)
playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1)
if(ORION_TRAIL_ILLNESS)
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
@@ -515,7 +514,7 @@
if(prob(75))
M.Weaken(3)
say("A sudden gust of powerful wind slams [M] into the floor!")
M.take_organ_damage(25)
M.take_bodypart_damage(25)
playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1)
else
M << "<span class='userdanger'>A violent gale blows past you, and you barely manage to stay standing!</span>"
@@ -886,7 +885,7 @@
if(ORION_TRAIL_SPACEPORT)
gameStatus = ORION_STATUS_MARKET
if(spaceport_raided)
eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!"
eventdat += "The Spaceport is on high alert! They won't let you dock since you tried to attack them!"
if(last_spaceport_action)
eventdat += "<br>Last Spaceport Action: [last_spaceport_action]"
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];leave_spaceport=1'>Depart Spaceport</a></P>"
@@ -1038,7 +1037,7 @@
desc = "The Premier security forces for all spaceports found along the Orion Trail."
faction = list("orion")
loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity,
/obj/item/weapon/gun/projectile/automatic/c20r/unrestricted,
/obj/item/weapon/gun/ballistic/automatic/c20r/unrestricted,
/obj/item/weapon/shield/energy)
/obj/effect/mob_spawn/human/corpse/orionsecurity
@@ -1053,14 +1052,14 @@
back = /obj/item/weapon/storage/backpack
has_id = 1
id_job = "Officer"
id_access = "Syndicate"
id_access_list = list(access_syndicate)
/obj/item/weapon/orion_ship
name = "model settler ship"
desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..."
icon = 'icons/obj/toy.dmi'
icon_state = "ship"
w_class = 2
w_class = WEIGHT_CLASS_SMALL
var/active = 0 //if the ship is on
/obj/item/weapon/orion_ship/examine(mob/user)
+2 -3
View File
@@ -8,9 +8,8 @@
var/list/minor_alarms = list()
var/receive_frequency = 1437
var/datum/radio_frequency/radio_connection
light_color = LIGHT_COLOR_CYAN
/obj/machinery/computer/atmos_alert/initialize()
/obj/machinery/computer/atmos_alert/Initialize()
..()
set_frequency(receive_frequency)
@@ -83,4 +82,4 @@
if(priority_alarms.len)
add_overlay("alert:2")
else if(minor_alarms.len)
add_overlay("alert:1")
add_overlay("alert:1")
+8 -16
View File
@@ -32,9 +32,10 @@
"gases" = list()
)
var/total_moles = air_sample.total_moles()
for(var/gas_id in air_sample.gases)
var/gas_name = air_sample.gases[gas_id][GAS_META][META_GAS_NAME]
signal.data["gases"][gas_name] = air_sample.gases[gas_id][MOLES] / total_moles * 100
if(total_moles)
for(var/gas_id in air_sample.gases)
var/gas_name = air_sample.gases[gas_id][GAS_META][META_GAS_NAME]
signal.data["gases"][gas_name] = air_sample.gases[gas_id][MOLES] / total_moles * 100
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
@@ -44,14 +45,10 @@
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/air_sensor/initialize()
set_frequency(frequency)
/obj/machinery/air_sensor/New()
/obj/machinery/air_sensor/Initialize()
..()
SSair.atmos_machinery += src
if(SSradio)
set_frequency(frequency)
set_frequency(frequency)
/obj/machinery/air_sensor/Destroy()
SSair.atmos_machinery -= src
@@ -69,7 +66,6 @@
icon_screen = "tank"
icon_keyboard = "atmos_key"
circuit = /obj/item/weapon/circuitboard/computer/atmos_control
light_color = LIGHT_COLOR_CYAN
var/frequency = 1441
var/list/sensors = list(
@@ -86,10 +82,9 @@
var/list/sensor_information = list()
var/datum/radio_frequency/radio_connection
/obj/machinery/computer/atmos_control/New()
/obj/machinery/computer/atmos_control/Initialize()
..()
if(SSradio)
set_frequency(frequency)
set_frequency(frequency)
/obj/machinery/computer/atmos_control/Destroy()
if(SSradio)
@@ -136,9 +131,6 @@
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/computer/atmos_control/initialize()
set_frequency(frequency)
/////////////////////////////////////////////////////////////
// LARGE TANK CONTROL
/////////////////////////////////////////////////////////////
+99 -68
View File
@@ -11,10 +11,11 @@
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You start wrenching the frame into place...</span>"
if(do_after(user, 20/P.toolspeed, target = src))
if(do_after(user, 20*P.toolspeed, target = src))
user << "<span class='notice'>You wrench the frame into place.</span>"
anchored = 1
state = 1
return
if(istype(P, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = P
if(!WT.remove_fuel(0, user))
@@ -23,38 +24,42 @@
return
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You start deconstructing the frame...</span>"
if(do_after(user, 20/P.toolspeed, target = src))
if(do_after(user, 20*P.toolspeed, target = src))
if(!src || !WT.isOn()) return
user << "<span class='notice'>You deconstruct the frame.</span>"
var/obj/item/stack/sheet/metal/M = new (loc, 5)
M.add_fingerprint(user)
qdel(src)
return
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You start to unfasten the frame...</span>"
if(do_after(user, 20/P.toolspeed, target = src))
if(do_after(user, 20*P.toolspeed, target = src))
user << "<span class='notice'>You unfasten the frame.</span>"
anchored = 0
state = 0
return
if(istype(P, /obj/item/weapon/circuitboard/computer) && !circuit)
if(!user.drop_item())
return
playsound(src.loc, P.usesound, 50, 1)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "<span class='notice'>You place the circuit board inside the frame.</span>"
icon_state = "1"
circuit = P
circuit.add_fingerprint(user)
P.loc = null
return
else if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
user << "<span class='warning'>This frame does not accept circuit boards of this type!</span>"
return
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You screw the circuit board into place.</span>"
state = 2
icon_state = "2"
return
if(istype(P, /obj/item/weapon/crowbar) && circuit)
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You remove the circuit board.</span>"
@@ -63,18 +68,20 @@
circuit.loc = src.loc
circuit.add_fingerprint(user)
circuit = null
return
if(2)
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You unfasten the circuit board.</span>"
state = 1
icon_state = "1"
return
if(istype(P, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = P
if(C.get_amount() >= 5)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "<span class='notice'>You start adding cables to the frame...</span>"
if(do_after(user, 20/P.toolspeed, target = src))
if(do_after(user, 20*P.toolspeed, target = src))
if(C.get_amount() >= 5 && state == 2)
C.use(5)
user << "<span class='notice'>You add cables to the frame.</span>"
@@ -82,6 +89,7 @@
icon_state = "3"
else
user << "<span class='warning'>You need five lengths of cable to wire the frame!</span>"
return
if(3)
if(istype(P, /obj/item/weapon/wirecutters))
playsound(src.loc, P.usesound, 50, 1)
@@ -91,6 +99,7 @@
var/obj/item/stack/cable_coil/A = new (loc)
A.amount = 5
A.add_fingerprint(user)
return
if(istype(P, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = P
@@ -106,6 +115,7 @@
user << "<span class='notice'>You put in the glass panel.</span>"
state = 4
src.icon_state = "4"
return
if(4)
if(istype(P, /obj/item/weapon/crowbar))
playsound(src.loc, P.usesound, 50, 1)
@@ -114,14 +124,27 @@
icon_state = "3"
var/obj/item/stack/sheet/glass/G = new (loc, 2)
G.add_fingerprint(user)
return
if(istype(P, /obj/item/weapon/screwdriver))
playsound(src.loc, P.usesound, 50, 1)
user << "<span class='notice'>You connect the monitor.</span>"
var/obj/B = new src.circuit.build_path (src.loc, circuit)
transfer_fingerprints_to(B)
qdel(src)
return
if(user.a_intent == INTENT_HARM)
return ..()
/obj/structure/frame/computer/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
if(state == 4)
new /obj/item/weapon/shard(loc)
new /obj/item/weapon/shard(loc)
if(state >= 3)
new /obj/item/stack/cable_coil(loc , 5)
..()
/obj/item/weapon/circuitboard
name = "circuit board"
@@ -130,62 +153,66 @@
item_state = "electronic"
origin_tech = "programming=2"
materials = list(MAT_GLASS=1000)
w_class = 2
w_class = WEIGHT_CLASS_SMALL
var/build_path = null
/obj/item/weapon/circuitboard/computer/turbine_computer
name = "circuit board (Turbine Computer)"
name = "Turbine Computer (Computer Board)"
build_path = /obj/machinery/computer/turbine_computer
origin_tech = "programming=4;engineering=4;powerstorage=4"
/obj/item/weapon/circuitboard/computer/telesci_console
name = "circuit board (Telescience Console)"
name = "Telescience Console (Computer Board)"
build_path = /obj/machinery/computer/telescience
origin_tech = "programming=3;bluespace=3;plasmatech=4"
/obj/item/weapon/circuitboard/computer/message_monitor
name = "circuit board (Message Monitor)"
name = "Message Monitor (Computer Board)"
build_path = /obj/machinery/computer/message_monitor
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/computer/security
name = "circuit board (Security Cameras)"
name = "Security Cameras (Computer Board)"
build_path = /obj/machinery/computer/security
origin_tech = "programming=2;combat=2"
/obj/item/weapon/circuitboard/computer/xenobiology
name = "circuit board (Xenobiology Console)"
build_path = /obj/machinery/computer/camera_advanced/xenobio
origin_tech = "programming=3;bio=3"
/obj/item/weapon/circuitboard/computer/aiupload
name = "circuit board (AI Upload)"
name = "AI Upload (Computer Board)"
build_path = /obj/machinery/computer/upload/ai
origin_tech = "programming=4;engineering=4"
/obj/item/weapon/circuitboard/computer/borgupload
name = "circuit board (Cyborg Upload)"
name = "Cyborg Upload (Computer Board)"
build_path = /obj/machinery/computer/upload/borg
origin_tech = "programming=4;engineering=4"
/obj/item/weapon/circuitboard/computer/med_data
name = "circuit board (Medical Records Console)"
name = "Medical Records Console (Computer Board)"
build_path = /obj/machinery/computer/med_data
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/pandemic
name = "circuit board (PanD.E.M.I.C. 2200)"
name = "PanD.E.M.I.C. 2200 (Computer Board)"
build_path = /obj/machinery/computer/pandemic
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/scan_consolenew
name = "circuit board (DNA Machine)"
name = "DNA Machine (Computer Board)"
build_path = /obj/machinery/computer/scan_consolenew
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/communications
name = "circuit board (Communications)"
name = "Communications (Computer Board)"
build_path = /obj/machinery/computer/communications
origin_tech = "programming=3;magnets=3"
var/lastTimeUsed = 0
/obj/item/weapon/circuitboard/computer/card
name = "circuit board (ID Console)"
name = "ID Console (Computer Board)"
build_path = /obj/machinery/computer/card
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/card/centcom
name = "circuit board (Centcom ID Console)"
name = "Centcom ID Console (Computer Board)"
build_path = /obj/machinery/computer/card/centcom
/obj/item/weapon/circuitboard/computer/card/minor
name = "circuit board (Department Management Console)"
name = "Department Management Console (Computer Board)"
build_path = /obj/machinery/computer/card/minor
var/target_dept = 1
var/list/dept_list = list("General","Security","Medical","Science","Engineering")
@@ -202,112 +229,112 @@
user << "Currently set to \"[dept_list[target_dept]]\"."
//obj/item/weapon/circuitboard/computer/shield
// name = "Circuit board (Shield Control)"
// name = "Shield Control (Computer Board)"
// build_path = /obj/machinery/computer/stationshield
/obj/item/weapon/circuitboard/computer/teleporter
name = "circuit board (Teleporter)"
name = "Teleporter (Computer Board)"
build_path = /obj/machinery/computer/teleporter
origin_tech = "programming=3;bluespace=3;plasmatech=3"
/obj/item/weapon/circuitboard/computer/secure_data
name = "circuit board (Security Records Console)"
name = "Security Records Console (Computer Board)"
build_path = /obj/machinery/computer/secure_data
origin_tech = "programming=2;combat=2"
/obj/item/weapon/circuitboard/computer/stationalert
name = "circuit board (Station Alerts)"
name = "Station Alerts (Computer Board)"
build_path = /obj/machinery/computer/station_alert
/*/obj/item/weapon/circuitboard/computer/atmospheresiphonswitch
name = "circuit board (Atmosphere siphon control)"
name = "Atmosphere siphon control (Computer Board)"
build_path = /obj/machinery/computer/atmosphere/siphonswitch*/
/obj/item/weapon/circuitboard/computer/atmos_control
name = "circuit board (Atmospheric Monitor)"
name = "Atmospheric Monitor (Computer Board)"
build_path = /obj/machinery/computer/atmos_control
/obj/item/weapon/circuitboard/computer/atmos_control/tank
name = "circuit board (Tank Control)"
name = "Tank Control (Computer Board)"
build_path = /obj/machinery/computer/atmos_control/tank
origin_tech = "programming=2;engineering=3;materials=2"
/obj/item/weapon/circuitboard/computer/atmos_alert
name = "circuit board (Atmospheric Alert)"
name = "Atmospheric Alert (Computer Board)"
build_path = /obj/machinery/computer/atmos_alert
/obj/item/weapon/circuitboard/computer/pod
name = "circuit board (Massdriver control)"
name = "Massdriver control (Computer Board)"
build_path = /obj/machinery/computer/pod
/obj/item/weapon/circuitboard/computer/robotics
name = "circuit board (Robotics Control)"
name = "Robotics Control (Computer Board)"
build_path = /obj/machinery/computer/robotics
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/cloning
name = "circuit board (Cloning)"
name = "Cloning (Computer Board)"
build_path = /obj/machinery/computer/cloning
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/arcade/battle
name = "circuit board (Arcade Battle)"
name = "Arcade Battle (Computer Board)"
build_path = /obj/machinery/computer/arcade/battle
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/arcade/orion_trail
name = "circuit board (Orion Trail)"
name = "Orion Trail (Computer Board)"
build_path = /obj/machinery/computer/arcade/orion_trail
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/turbine_control
name = "circuit board (Turbine control)"
name = "Turbine control (Computer Board)"
build_path = /obj/machinery/computer/turbine_computer
/obj/item/weapon/circuitboard/computer/solar_control
name = "circuit board (Solar Control)" //name fixed 250810
name = "Solar Control (Computer Board)" //name fixed 250810
build_path = /obj/machinery/power/solar_control
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/computer/powermonitor
name = "circuit board (Power Monitor)" //name fixed 250810
name = "Power Monitor (Computer Board)" //name fixed 250810
build_path = /obj/machinery/computer/monitor
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/computer/olddoor
name = "circuit board (DoorMex)"
name = "DoorMex (Computer Board)"
build_path = /obj/machinery/computer/pod/old
/obj/item/weapon/circuitboard/computer/syndicatedoor
name = "circuit board (ProComp Executive)"
name = "ProComp Executive (Computer Board)"
build_path = /obj/machinery/computer/pod/old/syndicate
/obj/item/weapon/circuitboard/computer/swfdoor
name = "circuit board (Magix)"
name = "Magix (Computer Board)"
build_path = /obj/machinery/computer/pod/old/swf
/obj/item/weapon/circuitboard/computer/prisoner
name = "circuit board (Prisoner Management Console)"
name = "Prisoner Management Console (Computer Board)"
build_path = /obj/machinery/computer/prisoner
/obj/item/weapon/circuitboard/computer/gulag_teleporter_console
name = "circuit board (Labor Camp teleporter console)"
name = "Labor Camp teleporter console (Computer Board)"
build_path = /obj/machinery/computer/gulag_teleporter_computer
/obj/item/weapon/circuitboard/computer/rdconsole
name = "circuit board (RD Console)"
name = "RD Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/screwdriver))
if(build_path == /obj/machinery/computer/rdconsole/core)
name = "circuit board (RD Console - Robotics)"
name = "RD Console - Robotics (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/robotics
user << "<span class='notice'>Access protocols successfully updated.</span>"
else
name = "circuit board (RD Console)"
name = "RD Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
user << "<span class='notice'>Defaulting access protocols.</span>"
else
return ..()
/obj/item/weapon/circuitboard/computer/mecha_control
name = "circuit board (Exosuit Control Console)"
name = "Exosuit Control Console (Computer Board)"
build_path = /obj/machinery/computer/mecha
/obj/item/weapon/circuitboard/computer/rdservercontrol
name = "circuit board (R&D Server Control)"
name = "R&D Server Control (Computer Board)"
build_path = /obj/machinery/computer/rdservercontrol
/obj/item/weapon/circuitboard/computer/crew
name = "circuit board (Crew Monitoring Console)"
name = "Crew Monitoring Console (Computer Board)"
build_path = /obj/machinery/computer/crew
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/mech_bay_power_console
name = "circuit board (Mech Bay Power Control Console)"
name = "Mech Bay Power Control Console (Computer Board)"
build_path = /obj/machinery/computer/mech_bay_power_console
origin_tech = "programming=3;powerstorage=3"
/obj/item/weapon/circuitboard/computer/cargo
name = "circuit board (Supply Console)"
name = "Supply Console (Computer Board)"
build_path = /obj/machinery/computer/cargo
origin_tech = "programming=3"
var/contraband = 0
@@ -330,27 +357,31 @@
/obj/item/weapon/circuitboard/computer/cargo/request
name = "circuit board (Supply Request Console)"
name = "Supply Request Console (Computer Board)"
build_path = /obj/machinery/computer/cargo/request
/obj/item/weapon/circuitboard/computer/stockexchange
name = "circuit board (Stock Exchange Console)"
build_path = /obj/machinery/computer/stockexchange
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/operating
name = "circuit board (Operating Computer)"
name = "Operating Computer (Computer Board)"
build_path = /obj/machinery/computer/operating
origin_tech = "programming=2;biotech=3"
/obj/item/weapon/circuitboard/computer/mining
name = "circuit board (Outpost Status Display)"
name = "Outpost Status Display (Computer Board)"
build_path = /obj/machinery/computer/security/mining
/obj/item/weapon/circuitboard/computer/comm_monitor
name = "circuit board (Telecommunications Monitor)"
name = "Telecommunications Monitor (Computer Board)"
build_path = /obj/machinery/computer/telecomms/monitor
origin_tech = "programming=3;magnets=3;bluespace=2"
/obj/item/weapon/circuitboard/computer/comm_server
name = "circuit board (Telecommunications Server Monitor)"
name = "Telecommunications Server Monitor (Computer Board)"
build_path = /obj/machinery/computer/telecomms/server
origin_tech = "programming=3;magnets=3;bluespace=2"
/obj/item/weapon/circuitboard/computer/shuttle
name = "circuit board (Shuttle)"
name = "Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle
var/shuttleId
var/possible_destinations = ""
@@ -366,52 +397,52 @@
return ..()
/obj/item/weapon/circuitboard/computer/labor_shuttle
name = "circuit board (Labor Shuttle)"
name = "Labor Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/labor
/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way
name = "circuit board (Prisoner Shuttle Console)"
name = "Prisoner Shuttle Console (Computer Board)"
build_path = /obj/machinery/computer/shuttle/labor/one_way
/obj/item/weapon/circuitboard/computer/ferry
name = "circuit board (Transport Ferry)"
name = "Transport Ferry (Computer Board)"
build_path = /obj/machinery/computer/shuttle/ferry
/obj/item/weapon/circuitboard/computer/ferry/request
name = "circuit board (Transport Ferry Console)"
name = "Transport Ferry Console (Computer Board)"
build_path = /obj/machinery/computer/shuttle/ferry/request
/obj/item/weapon/circuitboard/computer/mining_shuttle
name = "circuit board (Mining Shuttle)"
name = "Mining Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/mining
/obj/item/weapon/circuitboard/computer/white_ship
name = "circuit board (White Ship)"
name = "White Ship (Computer Board)"
build_path = /obj/machinery/computer/shuttle/white_ship
/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
name = "circuit board (Holodeck Control)"
name = "Holodeck Control (Computer Board)"
build_path = /obj/machinery/computer/holodeck
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/computer/aifixer
name = "circuit board (AI Integrity Restorer)"
name = "AI Integrity Restorer (Computer Board)"
build_path = /obj/machinery/computer/aifixer
origin_tech = "programming=2;biotech=2"
/*/obj/item/weapon/circuitboard/computer/prison_shuttle
name = "circuit board (Prison Shuttle)"
name = "Prison Shuttle (Computer Board)"
build_path = /obj/machinery/computer/prison_shuttle*/
/obj/item/weapon/circuitboard/computer/slot_machine
name = "circuit board (Slot Machine)"
name = "Slot Machine (Computer Board)"
build_path = /obj/machinery/computer/slot_machine
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole
name = "circuit board (Library Visitor Console)"
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/screwdriver))
if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement)
name = "circuit board (Library Visitor Console)"
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
user << "<span class='notice'>Defaulting access protocols.</span>"
else
name = "circuit board (Book Inventory Management Console)"
name = "Book Inventory Management Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole/bookmanagement
user << "<span class='notice'>Access protocols successfully updated.</span>"
else
+6 -9
View File
@@ -8,8 +8,6 @@
var/list/network = list("SS13")
var/mapping = 0//For the overview file, interesting bit of code.
var/list/watchers = list() //who's using the console, associated with the camera they're on.
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/security/check_eye(mob/user)
if( (stat & (NOPOWER|BROKEN)) || user.incapacitated() || user.eye_blind )
@@ -29,7 +27,7 @@
if(!Adjacent(user))
user.unset_machine()
return
else if(isrobot(user))
else if(iscyborg(user))
var/list/viewing = viewers(src)
if(!viewing.Find(user))
user.unset_machine()
@@ -70,7 +68,7 @@
if(!(user in watchers))
user.unset_machine() // no usable camera on the network, we disconnect the user from the computer.
return
playsound(src, 'sound/machines/terminal_displaying.ogg', 25, 0)
playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0)
use_camera_console(user)
/obj/machinery/computer/security/proc/use_camera_console(mob/user)
@@ -93,7 +91,7 @@
var/camera_fail = 0
if(!C.can_use() || user.machine != src || user.eye_blind || user.incapacitated())
camera_fail = 1
else if(isrobot(user))
else if(iscyborg(user))
var/list/viewing = viewers(src)
if(!viewing.Find(user))
camera_fail = 1
@@ -105,18 +103,18 @@
user.unset_machine()
return 0
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
if(isAI(user))
var/mob/living/silicon/ai/A = user
A.eyeobj.setLoc(get_turf(C))
A.client.eye = A.eyeobj
else
user.reset_perspective(C)
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/noise)
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
user.clear_fullscreen("flash", 5)
watchers[user] = C
use_power(50)
addtimer(src, "use_camera_console", 5, FALSE, user)
playsound(src, 'sound/machines/terminal_select.ogg', 25, 0)
addtimer(CALLBACK(src, .proc/use_camera_console, user), 5)
else
user.unset_machine()
@@ -155,7 +153,6 @@
density = 0
circuit = null
clockwork = TRUE //it'd look very weird
use_auto_lights = 0
/obj/machinery/computer/security/telescreen/update_icon()
icon_state = initial(icon_state)
@@ -47,7 +47,7 @@
if(!eyeobj)
CreateEye()
if(!eyeobj.initialized)
if(!eyeobj.eye_initialized)
var/camera_location
for(var/obj/machinery/camera/C in cameranet.cameras)
if(!C.can_use())
@@ -56,7 +56,7 @@
camera_location = get_turf(C)
break
if(camera_location)
eyeobj.initialized = 1
eyeobj.eye_initialized = 1
give_eye_control(L)
eyeobj.setLoc(camera_location)
else
@@ -82,7 +82,7 @@
var/acceleration = 1
var/mob/living/carbon/human/eye_user = null
var/obj/machinery/computer/camera_advanced/origin
var/initialized = 0
var/eye_initialized = 0
var/visible_icon = 0
var/image/user_image = null
@@ -175,14 +175,15 @@
if (tempnetwork.len)
T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam
playsound(origin, 'sound/machines/terminal_select.ogg', 25, 0)
playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0)
var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T
var/obj/machinery/camera/final = T[camera]
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, "terminal_type", 25, 0)
if(final)
playsound(origin, 'sound/machines/terminal_select.ogg', 25, 0)
playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
remote_eye.setLoc(get_turf(final))
C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/noise)
C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console!
else
playsound(origin, 'sound/machines/terminal_error.ogg', 25, 0)
playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, 0)
+42 -27
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
//Keeps track of the time for the ID console. Having it as a global variable prevents people from dismantling/reassembling it to
//increase the slots of many jobs.
@@ -19,7 +19,6 @@ var/time_last_changed_position = 0
var/list/region_access = null
var/list/head_subordinates = null
var/target_dept = 0 //Which department this computer has access to. 0=all departments
light_color = LIGHT_COLOR_BLUE
//Cooldown for closing positions in seconds
//if set to -1: No cooldown... probably a bad idea
@@ -35,8 +34,7 @@ var/time_last_changed_position = 0
"Head of Security",
"Chief Engineer",
"Research Director",
"Chief Medical Officer",
"Chaplain")
"Chief Medical Officer")
//The scaling factor of max total positions in relation to the total amount of people on board the station in %
var/max_relative_positions = 30 //30%: Seems reasonable, limit of 6 @ 20 players
@@ -71,6 +69,32 @@ var/time_last_changed_position = 0
else
return ..()
/obj/machinery/computer/card/Destroy()
if(scan)
qdel(scan)
scan = null
if(modify)
qdel(modify)
modify = null
return ..()
/obj/machinery/computer/card/handle_atom_del(atom/A)
..()
if(A == scan)
scan = null
updateUsrDialog()
if(A == modify)
modify = null
updateUsrDialog()
/obj/machinery/computer/card/on_deconstruction()
if(scan)
scan.forceMove(loc)
scan = null
if(modify)
modify.forceMove(loc)
modify = null
//Check if you can't open a new position for a certain job
/obj/machinery/computer/card/proc/job_blacklisted(jobtitle)
return (jobtitle in blacklisted)
@@ -293,10 +317,6 @@ var/time_last_changed_position = 0
body += "<br><hr><a href = '?src=\ref[src];choice=mode;mode_target=2'>Job Management</a>"
dat = "<tt>[header][body]<hr><br></tt>"
//user << browse(dat, "window=id_com;size=900x520")
//onclose(user, "id_com")
var/datum/browser/popup = new(user, "id_com", src.name, 900, 620)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -320,7 +340,7 @@ var/time_last_changed_position = 0
region_access = null
head_subordinates = null
else
var/obj/item/I = usr.get_active_hand()
var/obj/item/I = usr.get_active_held_item()
if (istype(I, /obj/item/weapon/card/id))
if(!usr.drop_item())
return
@@ -336,7 +356,7 @@ var/time_last_changed_position = 0
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
scan = null
else
var/obj/item/I = usr.get_active_hand()
var/obj/item/I = usr.get_active_held_item()
if (istype(I, /obj/item/weapon/card/id))
if(!usr.drop_item())
return
@@ -345,7 +365,7 @@ var/time_last_changed_position = 0
scan = I
authenticated = 0
if ("auth")
if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode)))
if ((!( authenticated ) && (scan || issilicon(usr)) && (modify || mode)))
if (check_access(scan))
region_access = list()
head_subordinates = list()
@@ -356,7 +376,7 @@ var/time_last_changed_position = 0
authenticated = 1
else
authenticated = 2
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
else
if((access_hop in scan.access) && ((target_dept==1) || !target_dept))
@@ -377,13 +397,13 @@ var/time_last_changed_position = 0
get_subordinates("Chief Engineer")
if(region_access)
authenticated = 1
else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify))
else if ((!( authenticated ) && issilicon(usr)) && (!modify))
usr << "<span class='warning'>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.</span>"
if ("logout")
region_access = null
head_subordinates = null
authenticated = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_off.ogg', 50, 0)
if("access")
if(href_list["allowed"])
if(authenticated)
@@ -393,7 +413,7 @@ var/time_last_changed_position = 0
modify.access -= access_type
if(access_allowed == 1)
modify.access += access_type
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, "terminal_type", 50, 0)
if ("assign")
if (authenticated == 2)
var/t1 = href_list["assign_target"]
@@ -419,23 +439,22 @@ var/time_last_changed_position = 0
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
if (modify)
modify.assignment = t1
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if ("demote")
if(modify.assignment in head_subordinates || modify.assignment == "Assistant")
modify.assignment = "Unassigned"
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
usr << "<span class='error'>You are not authorized to demote this position.</span>"
if ("reg")
if (authenticated)
var/t2 = modify
//var/t1 = input(usr, "What name?", "ID computer", null) as text
if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
if ((authenticated && modify == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc)))
var/newName = reject_bad_name(href_list["reg"])
if(newName)
modify.registered_name = newName
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else
usr << "<span class='error'>Invalid name entered.</span>"
return
@@ -445,7 +464,7 @@ var/time_last_changed_position = 0
if("return")
//DISPLAY MAIN MENU
mode = 3;
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, "terminal_type", 25, 0)
if("make_job_available")
// MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS
@@ -460,7 +479,7 @@ var/time_last_changed_position = 0
time_last_changed_position = world.time / 10
j.total_positions++
opened_positions[edit_job_target]++
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if("make_job_unavailable")
// MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS
@@ -476,7 +495,7 @@ var/time_last_changed_position = 0
time_last_changed_position = world.time / 10
j.total_positions--
opened_positions[edit_job_target]--
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if ("print")
if (!( printing ))
@@ -490,7 +509,6 @@ var/time_last_changed_position = 0
P.name = "paper- 'Crew Manifest'"
printing = null
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
if (modify)
modify.update_label()
updateUsrDialog()
@@ -525,7 +543,6 @@ var/time_last_changed_position = 0
/obj/machinery/computer/card/minor/hos
target_dept = 2
icon_screen = "idhos"
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/card/minor/cmo
target_dept = 3
@@ -534,9 +551,7 @@ var/time_last_changed_position = 0
/obj/machinery/computer/card/minor/rd
target_dept = 4
icon_screen = "idrd"
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/card/minor/ce
target_dept = 5
icon_screen = "idce"
light_color = LIGHT_COLOR_ORANGE
+130 -70
View File
@@ -7,7 +7,7 @@
circuit = /obj/item/weapon/circuitboard/computer/cloning
req_access = list(access_heads) //Only used for record deletion right now.
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
var/list/pods //Linked cloning pods
var/temp = "Inactive"
var/scantemp_ckey
var/scantemp = "Ready to Scan"
@@ -17,35 +17,66 @@
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
var/autoprocess = 0
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/cloning/New()
/obj/machinery/computer/cloning/Initialize()
..()
spawn(5)
updatemodules()
updatemodules(TRUE)
/obj/machinery/computer/cloning/Destroy()
if(pods)
for(var/P in pods)
DetachCloner(P)
pods = null
return ..()
/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null)
if(pods)
for(var/P in pods)
var/obj/machinery/clonepod/pod = P
if(pod.occupant && pod.clonemind == mind)
return null
if(pod.is_operational() && !(pod.occupant || pod.mess))
return pod
/obj/machinery/computer/cloning/proc/HasEfficientPod()
if(pods)
for(var/P in pods)
var/obj/machinery/clonepod/pod = P
if(pod.is_operational() && pod.efficiency > 5)
return TRUE
/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null)
if(pods)
for(var/P in pods)
var/obj/machinery/clonepod/pod = P
if(pod.occupant && pod.clonemind == mind)
return pod
else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5)
. = pod
/obj/machinery/computer/cloning/process()
if(!(scanner && pod1 && autoprocess))
if(!(scanner && LAZYLEN(pods) && autoprocess))
return
if(!pod1.is_operational())
return
if(scanner.occupant && (scanner.scan_level > 2))
if(scanner.occupant && scanner.scan_level > 2)
scan_mob(scanner.occupant)
if(!(pod1.occupant || pod1.mess) && (pod1.efficiency > 5))
for(var/datum/data/record/R in records)
if(!(pod1.occupant || pod1.mess))
if(pod1.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"]))
records -= R
for(var/datum/data/record/R in records)
var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"])
if(!pod)
return
/obj/machinery/computer/cloning/proc/updatemodules()
if(pod.occupant)
continue //how though?
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"]))
records -= R
/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner)
src.scanner = findscanner()
src.pod1 = findcloner()
if (!isnull(src.pod1))
src.pod1.connected = src // Some variable the pod needs
if(findfirstcloner && !LAZYLEN(pods))
findcloner()
/obj/machinery/computer/cloning/proc/findscanner()
var/obj/machinery/dna_scannernew/scannerf = null
@@ -71,7 +102,16 @@
podf = locate(/obj/machinery/clonepod, get_step(src, dir))
if (!isnull(podf) && podf.is_operational())
return podf
AttachCloner(podf)
/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod)
if(!pod.connected)
pod.connected = src
LAZYADD(pods, pod)
/obj/machinery/computer/cloning/proc/DetachCloner(obj/machinery/clonepod/pod)
pod.connected = null
LAZYREMOVE(pods, pod)
/obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
@@ -83,6 +123,23 @@
user << "<span class='notice'>You insert [W].</span>"
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
src.updateUsrDialog()
else if(istype(W,/obj/item/device/multitool))
var/obj/item/device/multitool/P = W
if(istype(P.buffer, /obj/machinery/clonepod))
if(get_area_master(P.buffer) != get_area_master(src))
user << "<font color = #666633>-% Cannot link machines across power zones. Buffer cleared %-</font color>"
P.buffer = null
return
user << "<font color = #666633>-% Successfully linked [P.buffer] with [src] %-</font color>"
var/obj/machinery/clonepod/pod = P.buffer
if(pod.connected)
pod.connected.DetachCloner(pod)
AttachCloner(pod)
else
P.buffer = src
user << "<font color = #666633>-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-</font color>"
return
else
return ..()
@@ -98,11 +155,12 @@
if(..())
return
updatemodules()
updatemodules(TRUE)
var/dat = ""
dat += "<a href='byond://?src=\ref[src];refresh=1'>Refresh</a>"
if(scanner && pod1 && ((scanner.scan_level > 2) || (pod1.efficiency > 5)))
if(scanner && HasEfficientPod() && scanner.scan_level > 2)
if(!autoprocess)
dat += "<a href='byond://?src=\ref[src];task=autoprocess'>Autoprocess</a>"
else
@@ -115,12 +173,12 @@
switch(src.menu)
if(1)
// Modules
if (isnull(src.scanner) || isnull(src.pod1))
if (isnull(src.scanner) || !LAZYLEN(pods))
dat += "<h3>Modules</h3>"
//dat += "<a href='byond://?src=\ref[src];relmodules=1'>Reload Modules</a>"
if (isnull(src.scanner))
dat += "<font class='bad'>ERROR: No Scanner detected!</font><br>"
if (isnull(src.pod1))
if (!LAZYLEN(pods))
dat += "<font class='bad'>ERROR: No Pod detected</font><br>"
// Scanner
@@ -211,8 +269,6 @@
dat += "<b><a href='byond://?src=\ref[src];menu=3'>Cancel</a></b>"
//user << browse(dat, "window=cloning")
//onclose(user, "cloning")
var/datum/browser/popup = new(user, "cloning", "Cloning System Control")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -229,17 +285,17 @@
switch(href_list["task"])
if("autoprocess")
autoprocess = 1
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if("stopautoprocess")
autoprocess = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational())
scantemp = ""
loading = 1
src.updateUsrDialog()
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
say("Initiating scan...")
spawn(20)
@@ -247,19 +303,20 @@
loading = 0
src.updateUsrDialog()
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
//No locking an open scanner.
else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational())
if ((!scanner.locked) && (scanner.occupant))
scanner.locked = 1
playsound(src, 'sound/machines/DoorClick.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else
scanner.locked = 0
playsound(src, 'sound/machines/DoorClick.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else if(href_list["view_rec"])
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, "terminal_type", 25, 0)
src.active_record = find_record("id", href_list["view_rec"], records)
if(active_record)
if(!active_record.fields["ckey"])
@@ -277,20 +334,20 @@
if (src.menu == 3) //If we are viewing a record, confirm deletion
src.temp = "Delete record?"
src.menu = 4
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
else if (src.menu == 4)
var/obj/item/weapon/card/id/C = usr.get_active_hand()
var/obj/item/weapon/card/id/C = usr.get_active_held_item()
if (istype(C)||istype(C, /obj/item/device/pda))
if(src.check_access(C))
src.temp = "[src.active_record.fields["name"]] => Record deleted."
src.records.Remove(active_record)
active_record = null
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
src.menu = 2
else
src.temp = "<font class='bad'>Access Denied.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if (href_list["disk"]) //Load or eject.
switch(href_list["disk"])
@@ -298,19 +355,19 @@
if (!diskette || !istype(diskette.fields) || !diskette.fields["name"] || !diskette.fields)
src.temp = "<font class='bad'>Load error.</font>"
src.updateUsrDialog()
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
if (!src.active_record)
src.temp = "<font class='bad'>Record error.</font>"
src.menu = 1
src.updateUsrDialog()
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
for(var/key in diskette.fields)
src.active_record.fields[key] = diskette.fields[key]
src.temp = "Load successful."
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if("eject")
if(src.diskette)
@@ -321,52 +378,54 @@
if(!diskette || diskette.read_only || !active_record || !active_record.fields)
src.temp = "<font class='bad'>Save error.</font>"
src.updateUsrDialog()
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
diskette.fields = active_record.fields.Copy()
diskette.name = "data disk - '[src.diskette.fields["name"]]'"
src.temp = "Save successful."
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else if (href_list["refresh"])
src.updateUsrDialog()
playsound(src, "terminal_type", 25, 0)
else if (href_list["clone"])
var/datum/data/record/C = find_record("id", href_list["clone"], records)
//Look for that player! They better be dead!
if(C)
var/obj/machinery/clonepod/pod = GetAvailablePod()
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
if(!pod1)
temp = "<font class='bad'>No Clonepod detected.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(pod1.occupant)
temp = "<font class='bad'>Clonepod is currently occupied.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(pod1.mess)
temp = "<font class='bad'>Clonepod malfunction.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
if(!LAZYLEN(pods))
temp = "<font class='bad'>No Clonepods detected.</font>"
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if(!pod)
temp = "<font class='bad'>No Clonepods available.</font>"
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if(!config.revival_cloning)
temp = "<font class='bad'>Unable to initiate cloning cycle.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"]))
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if(pod.occupant)
temp = "<font class='bad'>Cloning cycle already in progress.</font>"
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"]))
temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
records.Remove(C)
if(active_record == C)
active_record = null
menu = 1
else
temp = "[C.fields["name"]] => <font class='bad'>Initialisation failure.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else
temp = "<font class='bad'>Data corruption.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
else if (href_list["menu"])
src.menu = text2num(href_list["menu"])
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, "terminal_type", 25, 0)
src.add_fingerprint(usr)
src.updateUsrDialog()
@@ -375,27 +434,27 @@
/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject)
if (!istype(subject))
scantemp = "<font class='bad'>Unable to locate valid genetic data.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
if (!subject.getorgan(/obj/item/organ/brain))
scantemp = "<font class='bad'>No signs of intelligence detected.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
return
if (subject.suiciding == 1 || subject.hellbound)
scantemp = "<font class='bad'>Subject's brain is not responding to scanning stimuli.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
if ((subject.disabilities & NOCLONE) && (src.scanner.scan_level < 2))
scantemp = "<font class='bad'>Subject no longer contains the fundamental materials required to create a living clone.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
return
if ((!subject.ckey) || (!subject.client))
scantemp = "<font class='bad'>Mental interface failure.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
if (find_record("ckey", subject.ckey, records))
scantemp = "<font class='average'>Subject already in database.</font>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
var/datum/data/record/R = new()
@@ -416,19 +475,20 @@
R.fields["blood_type"] = subject.dna.blood_type
R.fields["features"] = subject.dna.features
R.fields["factions"] = subject.faction
//Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
var/obj/item/weapon/implant/health/imp
for(var/obj/item/weapon/implant/health/HI in subject.implants)
imp = HI
break
if(!imp)
imp = new /obj/item/weapon/implant/health(subject)
imp.implanted = subject
R.fields["imp"] = "\ref[imp]"
//Update it if needed
else
R.fields["imp"] = "\ref[imp]"
imp.implant(subject)
R.fields["imp"] = "\ref[imp]"
if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning.
R.fields["mind"] = "\ref[subject.mind]"
src.records += R
scantemp = "Subject successfully scanned."
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+90 -71
View File
@@ -1,5 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
var/const/CALL_SHUTTLE_REASON_LENGTH = 12
// The communications computer
@@ -31,13 +29,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/const/STATE_ALERT_LEVEL = 8
var/const/STATE_CONFIRM_LEVEL = 9
var/const/STATE_TOGGLE_EMERGENCY = 10
var/const/STATE_PURCHASE = 11
var/status_display_freq = "1435"
var/stat_msg1
var/stat_msg2
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/communications/New()
shuttle_caller_list += src
@@ -64,9 +61,10 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
// main interface
if("main")
src.state = STATE_DEFAULT
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if("login")
var/mob/M = usr
var/obj/item/weapon/card/id/I = M.get_active_hand()
var/obj/item/weapon/card/id/I = M.get_active_held_item()
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
@@ -76,23 +74,23 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
auth_id = "[I.registered_name] ([I.assignment])"
if((20 in I.access))
authenticated = 2
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
if(src.emagged)
authenticated = 2
auth_id = "ERROR: CANNOT READ"
M << "<span class='warning'>[src] lets out a few quiet beeps as its login is overriden.</span>"
auth_id = "Unknown"
M << "<span class='warning'>[src] lets out a quiet alarm as its login is overriden.</span>"
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_alert.ogg', 25, 0)
if(prob(25))
for(var/mob/living/silicon/ai/AI in active_ais())
AI << sound('sound/machines/terminal_emagged.ogg', volume = 10) //Very quiet for balance reasons
AI << sound('sound/machines/terminal_alert.ogg', volume = 10) //Very quiet for balance reasons
if("logout")
authenticated = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_off.ogg', 50, 0)
if("swipeidseclevel")
var/mob/M = usr
var/obj/item/weapon/card/id/I = M.get_active_hand()
var/obj/item/weapon/card/id/I = M.get_active_held_item()
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
@@ -105,7 +103,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
set_security_level(tmp_alertlevel)
if(security_level != old_level)
usr << "<span class='notice'>Authorization confirmed. Modifying security level.</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
//Only notify the admins if an actual change happened
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
@@ -115,37 +113,68 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(SEC_LEVEL_BLUE)
feedback_inc("alert_comms_blue",1)
tmp_alertlevel = 0
else:
else
usr << "<span class='warning'>You are not authorized to do this!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
tmp_alertlevel = 0
state = STATE_DEFAULT
else
usr << "<span class='warning'>You need to swipe your ID!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
if("announce")
if(src.authenticated==2 && !message_cooldown)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(src.authenticated==2)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
make_announcement(usr)
else if (src.authenticated==2 && message_cooldown)
usr << "Intercomms recharging. Please stand by."
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
if("crossserver")
/* if("crossserver")
if(authenticated==2)
if(CM.lastTimeUsed + 600 > world.time)
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
var/input = stripped_multiline_input(usr, "Please choose a message to transmit to an allied station. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "")
if(!input || !(usr in view(1,src)))
return
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
send2otherserver("[station_name()]", input,"Comms_Console")
minor_announce(input, title = "Outgoing message to allied station")
log_say("[key_name(usr)] has sent a message to the other server: [input]")
message_admins("[key_name_admin(usr)] has sent a message to the other server.")
CM.lastTimeUsed = world.time
*/
if("purchase_menu")
state = STATE_PURCHASE
if("buyshuttle")
if(authenticated==2)
var/list/shuttles = flatten_list(shuttle_templates)
var/datum/map_template/shuttle/S = locate(href_list["chosen_shuttle"]) in shuttles
if(S && istype(S))
if(SSshuttle.emergency.mode != SHUTTLE_RECALL && SSshuttle.emergency.mode != SHUTTLE_IDLE)
usr << "It's a bit late to buy a new shuttle, don't you think?"
return
if(SSshuttle.shuttle_purchased)
usr << "A replacement shuttle has already been purchased."
else if(!S.prerequisites_met())
usr << "You have not met the requirements for purchasing this shuttle."
else
if(SSshuttle.points >= S.credit_cost)
var/obj/machinery/shuttle_manipulator/M = locate() in machines
if(M)
SSshuttle.shuttle_purchased = TRUE
M.unload_preview()
M.load_template(S)
M.existing_shuttle = SSshuttle.emergency
M.action_load(S)
SSshuttle.points -= S.credit_cost
minor_announce("[usr.name] has purchased [S.name] for [S.credit_cost] credits." , "Shuttle Purchase")
message_admins("[key_name_admin(usr)] purchased [S.name].")
feedback_add_details("shuttle_purchase", S.name)
else
usr << "Something went wrong! The shuttle exchange system seems to be down."
else
usr << "Not enough credits."
if("callshuttle")
src.state = STATE_DEFAULT
@@ -168,7 +197,6 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("messagelist")
src.currmsg = 0
src.state = STATE_MESSAGELIST
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("viewmessage")
src.state = STATE_VIEWMESSAGE
if (!src.currmsg)
@@ -193,7 +221,6 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
src.state = STATE_VIEWMESSAGE
if("status")
src.state = STATE_STATUSDISPLAY
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("securitylevel")
src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
@@ -217,7 +244,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
// Status display stuff
if("setstat")
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, "terminal_type", 50, 0)
switch(href_list["statdisp"])
if("message")
post_status("message", stat_msg1, stat_msg2)
@@ -227,11 +254,9 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
post_status(href_list["statdisp"])
if("setmsg1")
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
stat_msg1 = reject_bad_text(input("Line 1", "Enter Message Text", stat_msg1) as text|null, 40)
src.updateDialog()
if("setmsg2")
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
stat_msg2 = reject_bad_text(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40)
src.updateDialog()
@@ -240,14 +265,13 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(src.authenticated==2)
if(CM.lastTimeUsed + 600 > world.time)
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "")
if(!input || !(usr in view(1,src)))
return
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
Centcomm_announce(input, usr)
usr << "Message transmitted."
usr << "<span class='notice'>Message transmitted to Central Command.</span>"
log_say("[key_name(usr)] has made a Centcom announcement: [input]")
CM.lastTimeUsed = world.time
@@ -257,12 +281,12 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if((src.authenticated==2) && (src.emagged))
if(CM.lastTimeUsed + 600 > world.time)
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
return
var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "")
if(!input || !(usr in view(1,src)))
return
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
Syndicate_announce(input, usr)
usr << "<span class='danger'>SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.</span>"
log_say("[key_name(usr)] has made a Syndicate announcement: [input]")
@@ -270,7 +294,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("RestoreBackup")
usr << "<span class='notice'>Backup routing data restored!</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
src.emagged = 0
src.updateDialog()
@@ -278,16 +302,14 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if(src.authenticated==2)
if(CM.lastTimeUsed + 600 > world.time)
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","")
if(!input || !(usr in view(1,src)))
return
Nuke_request(input, usr)
usr << "<span class='notice'>Request sent.</span>"
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
log_say("[key_name(usr)] has requested the nuclear codes from Centcomm")
priority_announce("The codes for the on-station nuclear self-destruct have been requested by [auth_id]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/AI/commandreport.ogg')
priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/AI/commandreport.ogg')
CM.lastTimeUsed = world.time
@@ -325,8 +347,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
if("ai-status")
src.aistate = STATE_STATUSDISPLAY
if("ai-announce")
if(!ai_message_cooldown)
make_announcement(usr, 1)
make_announcement(usr, 1)
if("ai-securitylevel")
src.tmp_alertlevel = text2num( href_list["newalertlevel"] )
if(!tmp_alertlevel) tmp_alertlevel = 0
@@ -375,15 +396,14 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
src.emagged = 1
if(authenticated == 1)
authenticated = 2
user << "<span class='danger'>You scramble the communication routing circuits.</span>"
playsound(src, 'sound/machines/terminal_emagged.ogg', 50, 0)
user << "<span class='danger'>You scramble the communication routing circuits!</span>"
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
/obj/machinery/computer/communications/attack_hand(mob/user)
if(..())
return
if (src.z > 6)
user << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
user.set_machine(src)
@@ -396,13 +416,10 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
if (istype(user, /mob/living/silicon))
if(issilicon(user))
var/dat2 = src.interact_ai(user) // give the AI a different interact proc to limit its access
if(dat2)
dat += dat2
//user << browse(dat, "window=communications;size=400x500")
//onclose(user, "communications")
popup.set_content(dat)
popup.open()
return
@@ -431,6 +448,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make a Captain's Announcement</A> \]"
if(cross_allowed)
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=crossserver'>Send a message to an allied station</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=purchase_menu'>Purchase Shuttle</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=changeseclevel'>Change Alert Level</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=emergencyaccess'>Emergency Maintenance Access</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=nukerequest'>Request Nuclear Authentication Codes</A> \]"
@@ -443,20 +461,20 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=login'>Log In</A> \]"
if(STATE_CALLSHUTTLE)
dat += get_call_shuttle_form()
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
if(STATE_CANCELSHUTTLE)
dat += get_cancel_shuttle_form()
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
if(STATE_MESSAGELIST)
dat += "Messages:"
for(var/i = 1; i<=src.messagetitle.len; i++)
dat += "<BR><A HREF='?src=\ref[src];operation=viewmessage;message-num=[i]'>[src.messagetitle[i]]</A>"
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if(STATE_VIEWMESSAGE)
if (src.currmsg)
dat += "<B>[src.messagetitle[src.currmsg]]</B><BR><BR>[src.messagetext[src.currmsg]]"
if (src.authenticated)
dat += "<BR><BR>\[ <A HREF='?src=\ref[src];operation=delmessage'>Delete \]"
dat += "<BR><BR>\[ <A HREF='?src=\ref[src];operation=delmessage'>Delete</a> \]"
else
src.state = STATE_MESSAGELIST
src.attack_hand(user)
@@ -479,8 +497,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if(STATE_ALERT_LEVEL)
dat += "Current alert level: [get_security_level()]<BR>"
if(security_level == SEC_LEVEL_DELTA)
@@ -493,7 +510,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]<BR>"
dat += "<A HREF='?src=\ref[src];operation=swipeidseclevel'>Swipe ID</A> to confirm change.<BR>"
if(STATE_TOGGLE_EMERGENCY)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
if(emergency_access == 1)
dat += "<b>Emergency Maintenance Access is currently <font color='red'>ENABLED</font></b>"
dat += "<BR>Restore maintenance access restrictions? <BR>\[ <A HREF='?src=\ref[src];operation=disableemergency'>OK</A> | <A HREF='?src=\ref[src];operation=viewmessage'>Cancel</A> \]"
@@ -501,9 +518,21 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
dat += "<b>Emergency Maintenance Access is currently <font color='green'>DISABLED</font></b>"
dat += "<BR>Lift access restrictions on maintenance and external airlocks? <BR>\[ <A HREF='?src=\ref[src];operation=enableemergency'>OK</A> | <A HREF='?src=\ref[src];operation=viewmessage'>Cancel</A> \]"
if(STATE_PURCHASE)
dat += "Budget: [SSshuttle.points] Credits.<BR>"
for(var/shuttle_id in shuttle_templates)
var/datum/map_template/shuttle/S = shuttle_templates[shuttle_id]
if(S.can_be_bought && S.credit_cost < INFINITY)
dat += "[S.name] | [S.credit_cost] Credits<BR>"
dat += "[S.description]<BR>"
if(S.prerequisites)
dat += "Prerequisites: [S.prerequisites]<BR>"
dat += "<A href='?src=\ref[src];operation=buyshuttle;chosen_shuttle=\ref[S]'>(<font color=red><i>Purchase</i></font>)</A><BR><BR>"
dat += "<BR><BR>\[ [(src.state != STATE_DEFAULT) ? "<A HREF='?src=\ref[src];operation=main'>Main Menu</A> | " : ""]<A HREF='?src=\ref[user];mach_close=communications'>Close</A> \]"
//user << browse(dat, "window=communications;size=400x500")
//onclose(user, "communications")
popup.set_content(dat)
popup.open()
popup.set_content(dat)
popup.open()
@@ -619,23 +648,13 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
return dat
/obj/machinery/computer/communications/proc/make_announcement(mob/living/user, is_silicon)
if(!SScommunications.can_announce(user, is_silicon))
user << "Intercomms recharging. Please stand by."
return
var/input = stripped_input(user, "Please choose a message to announce to the station crew.", "What?")
if(!input || !user.canUseTopic(src))
return
if(is_silicon)
minor_announce(input,"[user.name] Announces:")
ai_message_cooldown = 1
spawn(600)//One minute cooldown
ai_message_cooldown = 0
else
priority_announce(html_decode(input), null, 'sound/misc/announce.ogg', "Captain")
message_cooldown = 1
spawn(600)//One minute cooldown
message_cooldown = 0
log_say("[key_name(user)] has made a priority announcement: [input]")
message_admins("[key_name_admin(user)] has made a priority announcement.")
SScommunications.make_announcement(user, is_silicon, input)
/obj/machinery/computer/communications/proc/post_status(command, data1, data2)
+68 -68
View File
@@ -7,28 +7,35 @@
use_power = 1
idle_power_usage = 300
active_power_usage = 300
obj_integrity = 200
max_integrity = 200
integrity_failure = 100
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 20)
var/obj/item/weapon/circuitboard/computer/circuit = null // if circuit==null, computer can't disassembly
var/processing = 0
var/brightness_on = 2
var/icon_keyboard = "generic_key"
var/icon_screen = "generic"
var/computer_health = 25
var/clockwork = FALSE
use_auto_lights = 1
light_power_on = 1
light_range_on = 3
/obj/machinery/computer/New(location, obj/item/weapon/circuitboard/C)
..(location)
if(C && istype(C))
circuit = C
else if(circuit)
//Some machines, oldcode arcades mostly, new themselves, so circuit
//can already be an instance of a type and trying to new that will
//cause a runtime
else if(ispath(circuit))
circuit = new circuit(null)
power_change()
update_icon()
/obj/machinery/computer/initialize()
/obj/machinery/computer/Destroy()
if(circuit)
qdel(circuit)
circuit = null
return ..()
/obj/machinery/computer/Initialize()
..()
power_change()
/obj/machinery/computer/process()
@@ -36,30 +43,8 @@
return 0
return 1
/obj/machinery/computer/emp_act(severity)
if(severity == 1)
take_damage(rand(15,30), BRUTE, 0)
else
take_damage(rand(15,25), BRUTE, 0)
..()
/obj/machinery/computer/ex_act(severity, target)
if(target == src)
qdel(src)
return
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(25))
qdel(src)
else
take_damage(rand(20,30), BRUTE, 0)
if(3)
take_damage(rand(10,30), BRUTE, 0)
/obj/machinery/computer/ratvar_act()
if(!clockwork && prob(20))
if(!clockwork)
clockwork = TRUE
icon_screen = "ratvar[rand(1, 4)]"
icon_keyboard = "ratvar_key[rand(1, 6)]"
@@ -74,10 +59,6 @@
icon_state = initial(icon_state)
update_icon()
/obj/machinery/computer/bullet_act(obj/item/projectile/P)
take_damage(P.damage, P.damage_type, 0)
..()
/obj/machinery/computer/update_icon()
cut_overlays()
if(stat & NOPOWER)
@@ -86,13 +67,15 @@
add_overlay(icon_keyboard)
if(stat & BROKEN)
add_overlay("[icon_state]_broken")
set_light(l_color = LIGHT_COLOR_BLUE)
else
add_overlay(icon_screen)
set_light(l_color = initial(light_color))
/obj/machinery/computer/power_change()
..()
if(stat & NOPOWER)
SetLuminosity(0)
else
SetLuminosity(brightness_on)
update_icon()
return
@@ -100,44 +83,61 @@
if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&NODECONSTRUCT))
playsound(src.loc, I.usesound, 50, 1)
user << "<span class='notice'> You start to disconnect the monitor...</span>"
if(do_after(user, 20/I.toolspeed, target = src))
deconstruction()
if(do_after(user, 20*I.toolspeed, target = src))
deconstruct(TRUE, user)
else
return ..()
/obj/machinery/computer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(stat & BROKEN)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
else
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
if(BURN)
playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
/obj/machinery/computer/obj_break(damage_flag)
if(circuit && !(flags & NODECONSTRUCT)) //no circuit, no breaking
if(!(stat & BROKEN))
playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1)
stat |= BROKEN
update_icon()
/obj/machinery/computer/emp_act(severity)
switch(severity)
if(1)
if(prob(50))
obj_break("energy")
if(2)
if(prob(10))
obj_break("energy")
..()
/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user)
on_deconstruction()
if(!(flags & NODECONSTRUCT))
if(circuit) //no circuit, no computer frame
var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc)
A.circuit = circuit
A.anchored = 1
circuit = null
for (var/obj/C in src)
C.loc = src.loc
if (stat & BROKEN)
user << "<span class='notice'>The broken glass falls out.</span>"
if(stat & BROKEN)
if(user)
user << "<span class='notice'>The broken glass falls out.</span>"
else
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
new /obj/item/weapon/shard(src.loc)
new /obj/item/weapon/shard(src.loc)
A.state = 3
A.icon_state = "3"
else
user << "<span class='notice'>You disconnect the monitor.</span>"
if(user)
user << "<span class='notice'>You disconnect the monitor.</span>"
A.state = 4
A.icon_state = "4"
qdel(src)
else
return ..()
circuit = null
for(var/obj/C in src)
C.forceMove(loc)
/obj/machinery/computer/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
switch(damage_type)
if(BRUTE)
if(sound_effect)
if(stat & BROKEN)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
else
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
if(BURN)
if(sound_effect)
playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
else
return
computer_health = max(computer_health - damage, 0)
if(circuit) //no circuit, no breaking
if(!computer_health && !(stat & BROKEN))
playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1)
stat |= BROKEN
update_icon()
qdel(src)
+11 -3
View File
@@ -7,7 +7,11 @@
idle_power_usage = 250
active_power_usage = 500
circuit = /obj/item/weapon/circuitboard/computer/crew
light_color = LIGHT_COLOR_BLUE
var/monitor = null //For VV debugging purposes
/obj/machinery/computer/crew/New()
monitor = crewmonitor
return ..()
/obj/machinery/computer/crew/attack_ai(mob/user)
if(stat & (BROKEN|NOPOWER))
@@ -104,6 +108,7 @@ var/global/datum/crewmonitor/crewmonitor = new
src.update(z, TRUE)
else
hi = src.interfaces["[z]"]
src.update(z,TRUE)
// Debugging purposes
mob << browse_rsc(file("code/game/machinery/computer/crew.js"), "crew.js")
@@ -205,9 +210,12 @@ var/global/datum/crewmonitor/crewmonitor = new
for (z in src.interfaces)
if (src.interfaces[z] == hi) break
if(hclient.client.mob && IsAdminGhost(hclient.client.mob))
return TRUE
if (hclient.client.mob && hclient.client.mob.stat == 0 && hclient.client.mob.z == text2num(z))
if (isAI(hclient.client.mob)) return TRUE
else if (isrobot(hclient.client.mob))
else if (iscyborg(hclient.client.mob))
return (locate(/obj/machinery/computer/crew, range(world.view, hclient.client.mob))) || (locate(/obj/item/device/sensor_device, hclient.client.mob.contents))
else
return (locate(/obj/machinery/computer/crew, range(1, hclient.client.mob))) || (locate(/obj/item/device/sensor_device, hclient.client.mob.contents))
@@ -252,7 +260,7 @@ var/global/datum/crewmonitor/crewmonitor = new
return ..()
/datum/crewmonitor/proc/queueUpdate(z)
addtimer(crewmonitor, "update", 5, TRUE, z)
addtimer(CALLBACK(crewmonitor, .proc/update, z), 5, TIMER_UNIQUE)
/datum/crewmonitor/proc/sendResources(var/client/client)
send_asset(client, "crewmonitor.js")
+2 -15
View File
@@ -37,7 +37,6 @@
use_power = 1
idle_power_usage = 10
active_power_usage = 400
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user, params)
if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
@@ -47,7 +46,6 @@
I.loc = src
src.diskette = I
user << "<span class='notice'>You insert [I].</span>"
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
src.updateUsrDialog()
return
else
@@ -74,7 +72,7 @@
/obj/machinery/computer/scan_consolenew/proc/ShowInterface(mob/user, last_change)
if(!user) return
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window
if(!( in_range(src, user) || istype(user, /mob/living/silicon) ))
if(!(in_range(src, user) || issilicon(user)))
popup.close()
return
popup.add_stylesheet("scannernew", 'html/browser/scannernew.css')
@@ -318,7 +316,7 @@
return
if(!isturf(usr.loc))
return
if(!( (isturf(loc) && in_range(src, usr)) || istype(usr, /mob/living/silicon) ))
if(!((isturf(loc) && in_range(src, usr)) || issilicon(usr)))
return
if(current_screen == "working")
return
@@ -341,13 +339,11 @@
if("setduration")
if(!num)
num = round(input(usr, "Choose pulse duration:", "Input an Integer", null) as num|null)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(num)
radduration = Wrap(num, 1, RADIATION_DURATION_MAX+1)
if("setstrength")
if(!num)
num = round(input(usr, "Choose pulse strength:", "Input an Integer", null) as num|null)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(num)
radstrength = Wrap(num, 1, RADIATION_STRENGTH_MAX+1)
if("screen")
@@ -357,10 +353,8 @@
var/potassiodide_amount = viable_occupant.reagents.get_reagent_amount("potass_iodide")
var/can_add = max(min(REJUVENATORS_MAX - potassiodide_amount, REJUVENATORS_INJECT), 0)
viable_occupant.reagents.add_reagent("potass_iodide", can_add)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("setbufferlabel")
var/text = sanitize(input(usr, "Input a new label:", "Input an Text", null) as text|null)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(num && text)
num = Clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
@@ -368,7 +362,6 @@
buffer_slot["label"] = text
if("setbuffer")
if(num && viable_occupant)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
num = Clamp(num, 1, NUMBER_OF_BUFFERS)
buffer[num] = list(
"label"="Buffer[num]:[viable_occupant.real_name]",
@@ -380,14 +373,12 @@
)
if("clearbuffer")
if(num)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
num = Clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
if(istype(buffer_slot))
buffer_slot.Cut()
if("transferbuffer")
if(num && viable_occupant)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
switch(href_list["text"]) //Numbers are this high because other way upgrading laser is just not worth the hassle, and i cant think of anything better to inmrove
if("se")
apply_buffer(SCANNER_ACTION_SE,num)
@@ -451,12 +442,10 @@
injectorready = 1
if("loaddisk")
if(num && diskette && diskette.fields)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
num = Clamp(num, 1, NUMBER_OF_BUFFERS)
buffer[num] = diskette.fields.Copy()
if("savedisk")
if(num && diskette && !diskette.read_only)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
num = Clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
if(istype(buffer_slot))
@@ -464,7 +453,6 @@
diskette.fields = buffer_slot.Copy()
if("ejectdisk")
if(diskette)
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
diskette.loc = get_turf(src)
diskette = null
if("setdelayed")
@@ -472,7 +460,6 @@
delayed_action = list("action"=text2num(href_list["delayaction"]),"buffer"=num)
if("pulseui","pulsese")
if(num && viable_occupant && connected)
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
radduration = Wrap(radduration, 1, RADIATION_DURATION_MAX+1)
radstrength = Wrap(radstrength, 1, RADIATION_STRENGTH_MAX+1)
@@ -4,7 +4,7 @@
desc = "Used to send criminals to the Labor Camp"
icon_screen = "explosive"
icon_keyboard = "security_key"
req_access = list(access_security)
req_access = list(access_armory)
circuit = /obj/item/weapon/circuitboard/computer/gulag_teleporter_console
var/default_goal = 200
var/obj/item/weapon/card/id/prisoner/id = null
@@ -12,11 +12,10 @@
var/obj/structure/gulag_beacon/beacon = null
var/mob/living/carbon/human/prisoner = null
var/datum/data/record/temporary_record = null
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/gulag_teleporter_computer/New()
..()
addtimer(src, "scan_machinery", 5)
addtimer(CALLBACK(src, .proc/scan_machinery), 5)
/obj/machinery/computer/gulag_teleporter_computer/Destroy()
if(id)
@@ -31,7 +30,6 @@
W.forceMove(src)
id = W
user << "<span class='notice'>You insert [W].</span>"
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
return
else
user << "<span class='notice'>There's an ID inserted already.</span>"
@@ -84,26 +82,23 @@
if(..())
return
if(!allowed(usr))
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
usr << "<span class='warning'>Access denied.</span>"
return
switch(action)
if("scan_teleporter")
teleporter = findteleporter()
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("scan_beacon")
beacon = findbeacon()
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("handle_id")
if(id)
if(!usr.get_active_hand())
if(!usr.get_active_held_item())
usr.put_in_hands(id)
id = null
else
id.forceMove(get_turf(src))
id = null
else
var/obj/item/I = usr.get_active_hand()
var/obj/item/I = usr.get_active_held_item()
if(istype(I, /obj/item/weapon/card/id/prisoner))
if(!usr.drop_item())
return
@@ -111,7 +106,6 @@
id = I
if("set_goal")
var/new_goal = input("Set the amount of points:", "Points", id.goal) as num|null
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(!isnum(new_goal))
return
if(!new_goal)
@@ -119,23 +113,18 @@
id.goal = Clamp(new_goal, 0, 1000) //maximum 1000 points
if("toggle_open")
if(teleporter.locked)
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
usr << "The teleporter is locked"
return
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
teleporter.toggle_open()
if("teleporter_lock")
if(teleporter.state_open)
usr << "Close the teleporter before locking!"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
teleporter.locked = !teleporter.locked
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("teleport")
if(!teleporter || !beacon)
return
addtimer(src, "teleport", 5, FALSE, usr)
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
addtimer(CALLBACK(src, .proc/teleport, usr), 5)
/obj/machinery/computer/gulag_teleporter_computer/proc/scan_machinery()
teleporter = findteleporter()
@@ -159,10 +148,17 @@
prisoner.forceMove(get_turf(beacon))
prisoner.Weaken(2) // small travel dizziness
prisoner << "<span class='warning'>The teleportation makes you a little dizzy.</span>"
PoolOrNew(/obj/effect/particle_effect/sparks, prisoner.loc)
new /obj/effect/particle_effect/sparks(prisoner.loc)
playsound(src.loc, "sparks", 50, 1)
if(teleporter.locked)
teleporter.locked = FALSE
teleporter.toggle_open()
id = null
temporary_record = null
+3 -11
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/upload
var/mob/living/silicon/current = null //The target of future law uploads
@@ -11,21 +11,17 @@
return
if(!current)
user << "<span class='caution'>You haven't selected anything to transmit laws to!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
if(!can_upload_to(current))
user << "<span class='caution'>Upload failed!</span> Check to make sure [current.name] is functioning properly."
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
current = null
return
var/turf/currentloc = get_turf(current)
if(currentloc && user.z != currentloc.z)
user << "<span class='caution'>Upload failed!</span> Unable to establish a connection to [current.name]. You're too far away!"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
current = null
return
M.install(current.laws, user)
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
else
return ..()
@@ -47,10 +43,8 @@
if (!src.current)
user << "<span class='caution'>No active AIs detected!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
user << "[src.current.name] selected for law changes."
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
/obj/machinery/computer/upload/ai/can_upload_to(mob/living/silicon/ai/A)
if(!A || !isAI(A))
@@ -73,14 +67,12 @@
if(!src.current)
user << "<span class='caution'>No active unslaved cyborgs detected!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
user << "[src.current.name] selected for law changes."
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
/obj/machinery/computer/upload/borg/can_upload_to(mob/living/silicon/robot/B)
if(!B || !isrobot(B))
if(!B || !iscyborg(B))
return 0
if(B.scrambledcodes || B.emagged)
return 0
return ..()
return ..()
+6 -13
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/med_data//TODO:SANITY
name = "medical records console"
@@ -19,7 +19,6 @@
//Sorting Variables
var/sortBy = "name"
var/order = 1 // -1 = Descending - 1 = Ascending
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/card/id) && !scan)
@@ -28,7 +27,6 @@
O.loc = src
scan = O
user << "<span class='notice'>You insert [O].</span>"
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
else
return ..()
@@ -191,8 +189,6 @@
else
else
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
//user << browse(text("<HEAD><TITLE>Medical Records</TITLE></HEAD><TT>[]</TT>", dat), "window=med_rec")
//onclose(user, "med_rec")
var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -208,19 +204,19 @@
if(!(active2 in data_core.medical))
src.active2 = null
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)) || IsAdminGhost(usr))
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
usr.set_machine(src)
if(href_list["temp"])
src.temp = null
if(href_list["scan"])
if(src.scan)
if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
if(ishuman(usr) && !usr.get_active_held_item())
usr.put_in_hands(scan)
else
scan.loc = get_turf(src)
src.scan = null
else
var/obj/item/I = usr.get_active_hand()
var/obj/item/I = usr.get_active_held_item()
if(istype(I, /obj/item/weapon/card/id))
if(!usr.drop_item())
return
@@ -231,7 +227,6 @@
src.screen = null
src.active1 = null
src.active2 = null
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
else if(href_list["choice"])
// SORTING!
if(href_list["choice"] == "Sorting")
@@ -246,13 +241,12 @@
sortBy = href_list["sort"]
order = initial(order)
else if(href_list["login"])
if(istype(usr, /mob/living/silicon))
if(issilicon(usr))
src.active1 = null
src.active2 = null
src.authenticated = 1
src.rank = "AI"
src.screen = 1
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
else if(IsAdminGhost(usr))
src.active1 = null
src.active2 = null
@@ -266,7 +260,6 @@
src.authenticated = src.scan.registered_name
src.rank = src.scan.assignment
src.screen = 1
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if(src.authenticated)
if(href_list["screen"])
@@ -507,7 +500,7 @@
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
counter++
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1)
else if(href_list["del_c"])
if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
+8 -55
View File
@@ -17,7 +17,7 @@
var/noserver = "<span class='alert'>ALERT: No server detected.</span>"
var/incorrectkey = "<span class='warning'>ALERT: Incorrect decryption key!</span>"
var/defaultmsg = "<span class='notice'>Welcome. Please select an option.</span>"
var/rebootmsg = "<span class='warning'>%$&(: Critical %$$@ Error // !RestArting! <lOadiNg backUp iNput ouTput> - ?pLeaSe wAit!</span>"
var/rebootmsg = "<span class='warning'>%$&(£: Critical %$$@ Error // !RestArting! <lOadiNg backUp iNput ouTput> - ?pLeaSe wAit!</span>"
//Computer properties
var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message
var/hacking = 0 // Is it being hacked into by the AI/Cyborg
@@ -29,7 +29,6 @@
var/obj/item/device/pda/customrecepient = null
var/customjob = "Admin"
var/custommessage = "This is a test, please ignore."
light_color = LIGHT_COLOR_GREEN
/obj/machinery/computer/message_monitor/attackby(obj/item/weapon/O, mob/living/user, params)
if(istype(O, /obj/item/weapon/screwdriver) && emagged)
@@ -41,7 +40,6 @@
/obj/machinery/computer/message_monitor/emag_act(mob/user)
if(!emagged)
if(!isnull(src.linkedServer))
playsound(src, 'sound/machines/terminal_emagged.ogg', 50, 0)
emagged = 1
screen = 2
spark_system.set_up(5, 0, src)
@@ -49,20 +47,19 @@
var/obj/item/weapon/paper/monitorkey/MK = new/obj/item/weapon/paper/monitorkey
MK.loc = src.loc
// Will help make emagging the console not so easy to get away with.
MK.info += "<br><br><font color='red'>%@%(*$%&(&?*(%&/{}</font>"
MK.info += "<br><br><font color='red'>£%@%(*$%&(£&?*(%&£/{}</font>"
var/time = 100 * length(src.linkedServer.decryptkey)
addtimer(src, "UnmagConsole", time)
addtimer(CALLBACK(src, .proc/UnmagConsole), time)
message = rebootmsg
else
user << "<span class='notice'>A 'no server' error appears on the screen.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
user << "<span class='notice'>A no server error appears on the screen.</span>"
/obj/machinery/computer/message_monitor/initialize()
/obj/machinery/computer/message_monitor/Initialize()
..()
//Is the server isn't linked to a server, and there's a server available, default it to the first one in the list.
if(!linkedServer)
if(message_servers && message_servers.len > 0)
linkedServer = message_servers[1]
return
/obj/machinery/computer/message_monitor/attack_hand(mob/living/user)
if(..())
@@ -134,7 +131,7 @@
dat += "</table>"
//Hacking screen.
if(2)
if(istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot))
if(isAI(user) || iscyborg(user))
dat += "Brute-forcing for server key.<br> It will take 20 seconds for every character that the password has."
dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time."
else
@@ -220,8 +217,6 @@
dat += "</table>"
message = defaultmsg
//user << browse(dat, "window=message;size=700x700")
//onclose(user, "message")
var/datum/browser/popup = new(user, "hologram_console", name, 700, 700)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -250,103 +245,80 @@
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) && isturf(loc)) || issilicon(usr))
//Authenticate
if (href_list["auth"])
if(!linkedServer || linkedServer.stat & (NOPOWER|BROKEN))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
auth = 0
screen = 0
else
var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(dkey && dkey != "")
if(src.linkedServer.decryptkey == dkey)
auth = 1
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
else
message = incorrectkey
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
//Turn the server on/off.
if (href_list["active"])
if(auth) linkedServer.active = !linkedServer.active
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
//Find a server
if (href_list["find"])
if(message_servers && message_servers.len > 1)
src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers
message = "<span class='alert'>NOTICE: Server selected.</span>"
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
else if(message_servers && message_servers.len > 0)
linkedServer = message_servers[1]
message = "<span class='notice'>NOTICE: Only Single Server Detected - Server selected.</span>"
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
else
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
//View the logs - KEY REQUIRED
if (href_list["view"])
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
src.screen = 1
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
//Clears the logs - KEY REQUIRED
if (href_list["clear"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
src.linkedServer.pda_msgs = list()
message = "<span class='notice'>NOTICE: Logs cleared.</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
//Clears the request console logs - KEY REQUIRED
if (href_list["clearr"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
src.linkedServer.rc_msgs = list()
message = "<span class='notice'>NOTICE: Logs cleared.</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
//Change the password - KEY REQUIRED
if (href_list["pass"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(dkey && dkey != "")
if(src.linkedServer.decryptkey == dkey)
var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):"))
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
if(length(newkey) <= 3)
message = "<span class='notice'>NOTICE: Decryption key too short!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(length(newkey) > 16)
message = "<span class='notice'>NOTICE: Decryption key too long!</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(newkey && newkey != "")
src.linkedServer.decryptkey = newkey
message = "<span class='notice'>NOTICE: Decryption key set.</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
else
message = incorrectkey
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
//Hack the Console to get the password
if (href_list["hack"])
@@ -357,56 +329,46 @@
spawn(100*length(src.linkedServer.decryptkey))
if(src && src.linkedServer && usr)
BruteForce(usr)
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 0)
//Delete the log.
if (href_list["delete"])
//Are they on the view logs screen?
if(screen == 1)
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else //if(istype(href_list["delete"], /datum/data_pda_msg))
src.linkedServer.pda_msgs -= locate(href_list["delete"])
message = "<span class='notice'>NOTICE: Log Deleted!</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
//Delete the request console log.
if (href_list["deleter"])
//Are they on the view logs screen?
if(screen == 4)
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else //if(istype(href_list["delete"], /datum/data_pda_msg))
src.linkedServer.rc_msgs -= locate(href_list["deleter"])
message = "<span class='notice'>NOTICE: Log Deleted!</span>"
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
//Create a custom message
if (href_list["msg"])
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
src.screen = 3
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
//Fake messaging selection - KEY REQUIRED
if (href_list["select"])
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
screen = 0
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
switch(href_list["select"])
//Reset
if("Reset")
ResetMessage()
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
//Select Your Name
if("Sender")
customsender = stripped_input(usr, "Please enter the sender's name.")
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
//Select Receiver
if("Recepient")
@@ -414,20 +376,16 @@
var/list/obj/item/device/pda/sendPDAs = get_viewable_pdas()
if(PDAs && PDAs.len > 0)
customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortNames(sendPDAs)
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
else
customrecepient = null
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
//Enter custom job
if("RecJob")
customjob = stripped_input(usr, "Please enter the sender's job.")
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
//Enter message
if("Message")
custommessage = stripped_input(usr, "Please enter your message.")
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
//Send message
if("Send")
@@ -438,12 +396,10 @@
if(isnull(customrecepient))
message = "<span class='notice'>NOTICE: No recepient selected!</span>"
return src.attack_hand(usr)
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
if(isnull(custommessage) || custommessage == "")
message = "<span class='notice'>NOTICE: No message entered!</span>"
return src.attack_hand(usr)
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
var/obj/item/device/pda/PDARec = null
for (var/obj/item/device/pda/P in get_viewable_pdas())
@@ -477,17 +433,14 @@
customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r"))
//Finally..
ResetMessage()
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
//Request Console Logs - KEY REQUIRED
if(href_list["viewr"])
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
if(auth)
src.screen = 4
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if (href_list["back"])
src.screen = 0
+3 -6
View File
@@ -7,16 +7,13 @@
var/timing = 0
var/time = 30
var/range = 4
light_color = LIGHT_COLOR_GREEN
light_power_on = 0.5
light_range_on = 1
/obj/machinery/computer/pod/initialize()
/obj/machinery/computer/pod/Initialize()
..()
for(var/obj/machinery/mass_driver/M in range(range, src))
if(M.id == id)
connected = M
..()
/obj/machinery/computer/pod/proc/alarm()
@@ -91,7 +88,7 @@
/obj/machinery/computer/pod/Topic(href, href_list)
if(..())
return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
usr.set_machine(src)
if(href_list["power"])
var/t = text2num(href_list["power"])
+18 -29
View File
@@ -12,7 +12,6 @@
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
var/obj/item/weapon/card/id/prisoner/inserted_id
circuit = /obj/item/weapon/circuitboard/computer/prisoner
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/prisoner/attack_hand(mob/user)
if(..())
@@ -33,11 +32,11 @@
dat += "<H3>Prisoner Implant Management</H3>"
dat += "<HR>Chemical Implants<BR>"
var/turf/Tr = null
for(var/obj/item/weapon/implant/chem/C in tracked_implants)
for(var/obj/item/weapon/implant/chem/C in tracked_chem_implants)
Tr = get_turf(C)
if((Tr) && (Tr.z != src.z))
continue//Out of range
if(!C.implanted)
if(!C.imp_in)
continue
dat += "ID: [C.imp_in.name] | Remaining Units: [C.reagents.total_volume] <BR>"
dat += "| Inject: "
@@ -47,17 +46,15 @@
dat += "********************************<BR>"
dat += "<HR>Tracking Implants<BR>"
for(var/obj/item/weapon/implant/tracking/T in tracked_implants)
if(!iscarbon(T.imp_in))
continue
if(!T.implanted)
if(!isliving(T.imp_in))
continue
Tr = get_turf(T)
if((Tr) && (Tr.z != src.z))
continue//Out of range
var/loc_display = "Unknown"
var/mob/living/carbon/M = T.imp_in
if(Tr.z == ZLEVEL_STATION && !istype(M.loc, /turf/open/space))
var/mob/living/M = T.imp_in
if(Tr.z == ZLEVEL_STATION && !isspaceturf(M.loc))
var/turf/mob_loc = get_turf(M)
loc_display = mob_loc.loc
@@ -65,9 +62,6 @@
dat += "<A href='?src=\ref[src];warn=\ref[T]'>(<font class='bad'><i>Message Holder</i></font>)</A> |<BR>"
dat += "********************************<BR>"
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
//user << browse(dat, "window=computer;size=400x500")
//onclose(user, "computer")
var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -89,48 +83,43 @@
/obj/machinery/computer/prisoner/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) && isturf(loc)) || issilicon(usr))
usr.set_machine(src)
if(href_list["id"])
if(href_list["id"] =="insert" && !inserted_id)
var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand()
var/obj/item/weapon/card/id/prisoner/I = usr.get_active_held_item()
if(istype(I))
if(!usr.drop_item())
return
I.loc = src
inserted_id = I
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
else usr << "<span class='danger'>No valid ID.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(inserted_id)
switch(href_list["id"])
if("eject")
inserted_id.loc = get_turf(src)
inserted_id.verb_pickup()
inserted_id = null
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
if("reset")
inserted_id.points = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("setgoal")
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
var/num = round(input(usr, "Choose prisoner's goal:", "Input an Integer", null) as num|null)
if(num >= 0)
num = min(num,1000) //Cap the quota to the equivilent of 10 minutes.
inserted_id.goal = num
else if(href_list["inject1"])
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
if(I)
var/obj/item/weapon/implant/I = locate(href_list["inject1"]) in tracked_chem_implants
if(I && istype(I))
I.activate(1)
else if(href_list["inject5"])
var/obj/item/weapon/implant/I = locate(href_list["inject5"])
if(I)
var/obj/item/weapon/implant/I = locate(href_list["inject5"]) in tracked_chem_implants
if(I && istype(I))
I.activate(5)
else if(href_list["inject10"])
var/obj/item/weapon/implant/I = locate(href_list["inject10"])
if(I)
var/obj/item/weapon/implant/I = locate(href_list["inject10"]) in tracked_chem_implants
if(I && istype(I))
I.activate(10)
else if(href_list["lock"])
@@ -138,18 +127,18 @@
screen = !screen
else
usr << "Unauthorized Access."
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if(href_list["warn"])
playsound(src, 'sound/machines/terminal_displaying.ogg', 50, 0)
var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN)
if(!warning) return
var/obj/item/weapon/implant/I = locate(href_list["warn"])
if((I)&&(I.imp_in))
var/mob/living/carbon/R = I.imp_in
var/obj/item/weapon/implant/I = locate(href_list["warn"]) in tracked_chem_implants
if(I && istype(I) && I.imp_in)
var/mob/living/R = I.imp_in
R << "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>"
log_say("[usr]/[usr.ckey] sent an implant message to [R]/[R.ckey]: '[warning]'")
src.add_fingerprint(usr)
src.updateUsrDialog()
return
+47 -15
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/robotics
@@ -9,15 +9,14 @@
req_access = list(access_robotics)
circuit = /obj/item/weapon/circuitboard/computer/robotics
var/temp = null
light_color = LIGHT_COLOR_PINK
/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R)
if(!istype(R))
return 0
if(istype(user, /mob/living/silicon/ai))
if(isAI(user))
if (R.connected_ai != user)
return 0
if(istype(user, /mob/living/silicon/robot))
if(iscyborg(user))
if (R != user)
return 0
if(R.scrambledcodes)
@@ -32,7 +31,6 @@
/obj/machinery/computer/robotics/interact(mob/user)
if (src.z > 6)
user << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
user.set_machine(src)
var/dat
@@ -61,8 +59,10 @@
dat += " Slaved to [R.connected_ai.name] |"
else
dat += " Independent from AI |"
if (istype(user, /mob/living/silicon) || IsAdminGhost(user))
if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate))
if(issilicon(user) || IsAdminGhost(user))
if(is_servant_of_ratvar(user) && user != R)
dat += "<A href='?src=\ref[src];convert=\ref[R]'>(<font color=#BE8700><i>Convert</i></font>)</A> "
else if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate))
dat += "<A href='?src=\ref[src];magbot=\ref[R]'>(<font color=blue><i>Hack</i></font>)</A> "
dat += "<A href='?src=\ref[src];stopbot=\ref[R]'>(<font color=green><i>[R.canmove ? "Lockdown" : "Release"]</i></font>)</A> "
dat += "<A href='?src=\ref[src];killbot=\ref[R]'>(<font color=red><i>Destroy</i></font>)</A>"
@@ -70,6 +70,21 @@
if(!robots)
dat += "No Cyborg Units detected within access parameters."
dat += "<BR>"
var/drones = 0
for(var/mob/living/simple_animal/drone/D in mob_list)
if(D.hacked)
continue
drones++
dat += "[D.name] |"
if(D.stat)
dat += " Not Responding |"
dat += "<A href='?src=\ref[src];killdrone=\ref[D]'>(<font color=red><i>Destroy</i></font>)</A>"
dat += "<BR>"
if(!drones)
dat += "No Drone Units detected within access parameters."
var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500)
popup.set_content(dat)
@@ -86,11 +101,10 @@
else if (href_list["killbot"])
if(src.allowed(usr))
var/mob/living/silicon/robot/R = locate(href_list["killbot"])
var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in silicon_mobs
if(can_control(usr, R))
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm" && can_control(usr, R) && !..())
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if(R.syndicate && R.emagged)
R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
if(R.connected_ai)
@@ -104,15 +118,13 @@
R.self_destruct()
else
usr << "<span class='danger'>Access Denied.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else if (href_list["stopbot"])
if(src.allowed(usr))
var/mob/living/silicon/robot/R = locate(href_list["stopbot"])
var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in silicon_mobs
if(can_control(usr, R))
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm" && can_control(usr, R) && !..())
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
message_admins("<span class='notice'>[key_name_admin(usr)] (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) [R.canmove ? "locked down" : "released"] [key_name(R, R.client)](<A HREF='?_src_=holder;adminplayerobservefollow=\ref[R]'>FLW</A>)!</span>")
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!")
R.SetLockdown(!R.lockcharge)
@@ -125,13 +137,33 @@
else if (href_list["magbot"])
if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr))
var/mob/living/silicon/robot/R = locate(href_list["magbot"])
if(istype(R) && !R.emagged && ((R.syndicate && R == usr)|| R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R))
var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in silicon_mobs
if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R))
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)]. using robotic console!")
message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!")
R.SetEmagged(1)
if(is_special_character(R))
R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes
else if(href_list["convert"])
if(issilicon(usr) && is_special_character(usr))
var/mob/living/silicon/robot/R = locate(href_list["convert"]) in silicon_mobs
if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr)
log_game("[key_name(usr)] converted [R.name] using robotic console!")
message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!")
add_servant_of_ratvar(R)
else if (href_list["killdrone"])
if(src.allowed(usr))
var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"])
if(D.hacked)
usr << "<span class='danger'>ERROR: [D] is not responding to external commands.</span>"
else
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, D)
s.start()
D.visible_message("<span class='danger'>\the [D] self destructs!</span>")
D.gib()
src.updateUsrDialog()
return
+10 -25
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/secure_data//TODO:SANITY
name = "security records console"
@@ -22,7 +22,6 @@
//Sorting Variables
var/sortBy = "name"
var/order = 1 // -1 = Descending - 1 = Ascending
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params)
@@ -33,10 +32,8 @@
O.loc = src
scan = O
user << "<span class='notice'>You insert [O].</span>"
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
else
user << "<span class='warning'>There's already an ID card in the console.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
return ..()
@@ -46,7 +43,6 @@
return
if(src.z > 6)
user << "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
var/dat
@@ -64,7 +60,7 @@
dat += {"
<head>
<script src="libraries.min.js"></script>
<script src="jquery.min.js"></script>
<script type='text/javascript'>
function updateSearch(){
@@ -254,8 +250,6 @@
else
else
dat += text("<A href='?src=\ref[];choice=Log In'>{Log In}</A>", src)
//user << browse(text("<HEAD><TITLE>Security Records</TITLE></HEAD><TT>[]</TT>", dat), "window=secure_rec;size=600x400")
//onclose(user, "secure_rec")
var/datum/browser/popup = new(user, "secure_rec", "Security Records Console", 600, 400)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -273,7 +267,7 @@ What a mess.*/
active1 = null
if(!( data_core.security.Find(active2) ))
active2 = null
if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)) || IsAdminGhost(usr))
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
usr.set_machine(src)
switch(href_list["choice"])
// SORTING!
@@ -299,13 +293,13 @@ What a mess.*/
if("Confirm Identity")
if(scan)
if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
if(ishuman(usr) && !usr.get_active_held_item())
usr.put_in_hands(scan)
else
scan.loc = get_turf(src)
scan = null
else
var/obj/item/I = usr.get_active_hand()
var/obj/item/I = usr.get_active_held_item()
if(istype(I, /obj/item/weapon/card/id))
if(!usr.drop_item())
return
@@ -317,17 +311,15 @@ What a mess.*/
screen = null
active1 = null
active2 = null
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("Log In")
if(istype(usr, /mob/living/silicon))
if(issilicon(usr))
var/mob/living/silicon/borg = usr
active1 = null
active2 = null
authenticated = borg.name
rank = "AI"
screen = 1
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
else if(IsAdminGhost(usr))
active1 = null
active2 = null
@@ -341,20 +333,17 @@ What a mess.*/
authenticated = scan.registered_name
rank = scan.assignment
screen = 1
playsound(src, 'sound/machines/terminal_success.ogg', 50, 0)
//RECORD FUNCTIONS
if("Record Maintenance")
screen = 2
active1 = null
active2 = null
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("Browse Record")
var/datum/data/record/R = locate(href_list["d_rec"])
var/S = locate(href_list["d_rec"])
if(!( data_core.general.Find(R) ))
temp = "Record Not Found!"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
else
for(var/datum/data/record/E in data_core.security)
if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
@@ -362,7 +351,6 @@ What a mess.*/
active1 = R
active2 = S
screen = 3
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("Print Record")
@@ -470,12 +458,10 @@ What a mess.*/
qdel(R)
data_core.security.Cut()
temp = "All Security records deleted."
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if("Add Entry")
if(!( istype(active2, /datum/data/record) ))
return
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
var/a2 = active2
var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
if(!canUseSecurityRecordsConsole(usr, t1, null, a2))
@@ -483,7 +469,7 @@ What a mess.*/
var/counter = 1
while(active2.fields[text("com_[]", counter)])
counter++
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []<BR>[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1)
if("Delete Record (ALL)")
if(active1)
@@ -724,7 +710,6 @@ What a mess.*/
if("Delete Record (ALL) Execute")
if(active1)
investigate_log("[usr.name] ([usr.key]) has deleted all records for [active1.fields["name"]].", "records")
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
for(var/datum/data/record/R in data_core.medical)
if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
data_core.medical -= R
@@ -747,14 +732,14 @@ What a mess.*/
/obj/machinery/computer/secure_data/proc/get_photo(mob/user)
var/obj/item/weapon/photo/P = null
if(istype(user, /mob/living/silicon))
if(issilicon(user))
var/mob/living/silicon/tempAI = user
var/datum/picture/selection = tempAI.GetPhoto()
if(selection)
P = new()
P.photocreate(selection.fields["icon"], selection.fields["img"], selection.fields["desc"])
else if(istype(user.get_active_hand(), /obj/item/weapon/photo))
P = user.get_active_hand()
else if(istype(user.get_active_held_item(), /obj/item/weapon/photo))
P = user.get_active_held_item()
return P
/obj/machinery/computer/secure_data/emp_act(severity)
@@ -5,7 +5,6 @@
icon_keyboard = "atmos_key"
circuit = /obj/item/weapon/circuitboard/computer/stationalert
var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list())
light_color = LIGHT_COLOR_CYAN
/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
@@ -81,4 +80,4 @@
if(L.len)
active_alarms = TRUE
if(active_alarms)
add_overlay("alert:2")
add_overlay("alert:2")
@@ -9,7 +9,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
icon_keyboard = "tcstation_key"
icon_screen = "syndie"
clockwork = TRUE //it'd look weird, at least if ratvar ever got there
light_color = LIGHT_COLOR_RED
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/////////////////////////////////////////////
/obj/machinery/computer/telecrystals/uplinker
@@ -33,10 +33,9 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params)
if(uplinkholder)
user << "<span class='notice'>The [src] already has an uplink in it.</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
return
if(O.hidden_uplink)
var/obj/item/I = user.get_active_hand()
var/obj/item/I = user.get_active_held_item()
if(!user.drop_item())
return
uplinkholder = I
@@ -44,10 +43,8 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
I.add_fingerprint(user)
update_icon()
updateUsrDialog()
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
else
user << "<span class='notice'>The [O] doesn't appear to be an uplink...</span>"
playsound(src, 'sound/machines/terminal_error.ogg', 50, 0)
/obj/machinery/computer/telecrystals/uplinker/update_icon()
..()
@@ -58,7 +55,6 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
if(uplinkholder)
uplinkholder.loc = get_turf(src.loc)
uplinkholder = null
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
update_icon()
/obj/machinery/computer/telecrystals/uplinker/proc/donateTC(amt, addLog = 1)
@@ -66,7 +62,6 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
if(amt <= uplinkholder.hidden_uplink.telecrystals)
uplinkholder.hidden_uplink.telecrystals -= amt
linkedboss.storedcrystals += amt
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if(addLog)
linkedboss.logTransfer("[src] donated [amt] telecrystals to [linkedboss].")
@@ -75,7 +70,6 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
if(amt <= linkedboss.storedcrystals)
uplinkholder.hidden_uplink.telecrystals += amt
linkedboss.storedcrystals -= amt
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
if(addLog)
linkedboss.logTransfer("[src] received [amt] telecrystals from [linkedboss].")
@@ -86,7 +80,6 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
return
src.add_fingerprint(user)
user.set_machine(src)
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
var/dat = ""
if(linkedboss)
@@ -219,7 +212,6 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
A.giveTC(1,0)
sanity++
logTransfer("[src] evenly distributed telecrystals.")
playsound(src, 'sound/machines/terminal_select.ogg', 50, 0)
src.updateUsrDialog()
return