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:
@@ -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
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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 ..()
|
||||
@@ -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"])]))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user