-
- Station Time :
-
-
- {{:data.stationTime}}
-
+
+ {{if data.app}}
+
{{:data.app.name}}
+
+
+ {{/if}}
+
+
-
-
-
- {{if data.mode == 0}}
-
-
- Owner:
-
-
- {{:data.owner}}, {{:data.ownjob}}
-
-
-
-
-
- ID:
-
-
- {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'floatright' : 'fixedLeft')}}
-
-
-
-
-
- Cartridge :
-
-
- {{if data.cart_loaded==1}}
- {{:helper.link(data.cartridge.name, 'eject', {'choice' : "Eject"},null,null)}}
- {{else}}
- {{:helper.link('None', 'eject', {'choice' : "Eject"},'disabled',null)}}
- {{/if}}
-
-
-
-
Functions
-
-
-
- General :
-
-
- {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'fixedLeftWide')}}
- {{:helper.link('Messenger', data.new_Message ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'fixedLeftWide')}}
- {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'fixedLeftWide')}}
- {{:helper.link('News', data.new_News ? 'mail-closed' : 'mail-open', {'choice' : "6"}, null, 'fixedLeftWide')}}
-
-
-
- {{if data.cartridge}}
- {{if data.cartridge.access.access_clown == 1}}
-
-
- Clown :
-
-
- {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'fixedLeftWide')}}
-
-
-
- {{/if}}
- {{if data.cartridge.access.access_engine == 1}}
-
-
- Engineering :
-
-
- {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'fixedLeftWide')}}
-
-
-
- {{/if}}
- {{if data.cartridge.access.access_medical == 1}}
-
-
- Medical :
-
-
- {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'fixedLeftWide')}}
- {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'fixedLeftWide')}}
-
-
-
- {{/if}}
- {{if data.cartridge.access.access_security == 1}}
-
-
- Security :
-
-
- {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'fixedLeftWide')}}
- {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'fixedLeftWide')}} {{/if}}
-
-
-
-
- {{/if}}
- {{if data.cartridge.access.access_quartermaster == 1}}
-
-
- Quartermaster :
-
-
- {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'fixedLeftWide')}}
- {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'fixedLeftWide')}}
-
-
-
-
- {{/if}}
- {{/if}}
-
-
-
- Utilities :
-
-
- {{if data.cartridge}}
- {{if data.cartridge.access.access_status_display == 1}}
- {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'fixedLeftWide')}}
- {{/if}}
- {{if data.cartridge.access.access_janitor==1}}
- {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'fixedLeftWide')}}
- {{/if}}
- {{if data.cartridge.radio == 2}}
- {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'fixedLeftWide')}}
- {{/if}}
- {{if data.cartridge.access.access_reagent_scanner==1}}
- {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'fixedLeftWider')}}
- {{/if}}
- {{if data.cartridge.access.access_engine==1}}
- {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'fixedLeftWider')}}
- {{/if}}
- {{if data.cartridge.access.access_atmos==1}}
- {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'fixedLeftWide')}}
- {{/if}}
- {{if data.cartridge.access.access_remote_door==1}}
- {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'fixedLeftWide')}}
- {{/if}}
- {{/if}}
- {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'fixedLeftWide')}}
- {{:helper.link(data.touch_silent==1 ? 'Enable Beeping' : 'Disable Beeping', 'gear', {'choice' : "Toggle Beeping"}, null,'fixedLeftWide')}}
- {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'fixedLeftWide')}}
-
-
- {{if data.pai}}
-
-
- PAI Utilities :
-
-
- {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'fixedLeft')}}
- {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'fixedLeft')}}
-
-
- {{/if}}
-
-
- {{else data.mode == 1}}
-
-
-
-
- {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'fixedLeft')}}
-
-
-
-
- {{else data.mode == 2}}
-
SpaceMessenger V4.0.1
-
-
- Messenger Functions :
-
-
- {{:helper.link(data.message_silent==1 ? 'Ringer: Off' : 'Ringer: On', data.message_silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'fixedLeftWide')}}
- {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'fixedLeftWide')}}
- {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}}
- {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'fixedLeftWider')}}
-
-
- {{if data.toff == 0}}
-
- {{if data.cartridge}}
- {{if data.cartridge.charges}}
-
- {{:data.cartridge.charges}}
- {{if data.cartridge.access.access_detonate_pda}} detonation charges left. {{/if}}
- {{if data.cartridge.access.access_clown || data.cartridge.access.access_mime}} viral files left. {{/if}}
-
-
-
- {{/if}}
- {{/if}}
-
- {{if data.pda_count == 0}}
-
No other PDAS located
- {{else}}
-
Current Conversations
- {{for data.convopdas}}
-
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, value.fixedLeftWider)}}
- {{if data.cartridge}}
- {{if data.cartridge.access.access_detonate_pda && value.Detonate}}
- {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}}
- {{/if}}
- {{if data.cartridge.access.access_clown}}
- {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}}
- {{/if}}
- {{if data.cartridge.access.access_mime}}
- {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}}
- {{/if}}
- {{/if}}
-
- {{/for}}
-
Other PDAs
- {{for data.pdas}}
-
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, value.fixedLeftWider)}}
- {{if data.cartridge}}
- {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
- {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
- {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}}
- {{/if}}
-
- {{/for}}
- {{/if}}
- {{/if}}
-
-
- {{else data.mode == 21}}
-
SpaceMessenger V4.0.1
-
-
- Messenger Functions :
-
-
- {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'fixedLeftWide')}}
-
-
-
-
-
Conversation with: {{:data.convo_name}} ({{:data.convo_job}})
-
-
-
- {{for data.messages}}
- {{if data.active_conversation == value.target}}
- {{if value.sent==0}}
- Them : {{:value.message}}
- {{else}}
- You : {{:value.message}}
- {{/if}}
- {{/if}}
- {{/for}}
-
-
-
- {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'fixedLeft')}}
-
-
- {{else data.mode== 41}}
- {{#def.crewManifest}}
-
-
- {{else data.mode == 3}}
-
Atmospheric Scan
- {{#def.atmosphericScan}}
-
- {{else data.mode == 40}}
-
Remote Signaling System
-
-
- Frequency :
-
-
- {{:data.records.signal_freq}}
-
-
- {{:helper.link('-1', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "-10"}, null, null)}}
- {{:helper.link('-.2', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "-2"}, null, null)}}
-
- {{:helper.link('+.2', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "2"}, null, null)}}
- {{:helper.link('+1', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "10"}, null, null)}}
-
-
-
-
-
-
- Code :
-
-
-
- {{:data.records.signal_code}}
-
- {{:helper.link('-5', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "-5"}, null, null)}}
- {{:helper.link('-1', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "-1"}, null, null)}}
- {{:helper.link('+1', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "1"}, null, null)}}
- {{:helper.link('+5', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "5"}, null, null)}}
-
-
-
- {{:helper.link('Send Signal', 'radiation', {'cartmenu' : "1", 'choice' : "Send Signal"}, null, null)}}
-
-
-
- {{else data.mode == 42}}
-
Station Status Displays Interlink
-
-
- Code :
-
-
- {{:helper.link('Clear', 'trash', {'cartmenu' : "1", 'choice' : "Status", 'statdisp' : "blank"}, null, null)}}
-
- {{:helper.link('Tram ETA', 'gear', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "shuttle"}, null, null)}}
- {{:helper.link('Message', 'gear', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "message"}, null, null)}}
-
-
-
-
-
- Message line 1
-
-
- {{:helper.link(data.records.message1 + ' (set)', 'pencil', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "setmsg1"}, null, null)}}
-
-
-
-
- Message line 2
-
-
- {{:helper.link(data.records.message2 + ' (set)', 'pencil', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "setmsg2"}, null, null)}}
-
-
-
-
-
-
- ALERT! :
-
-
- {{:helper.link('None', 'alert', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "default"}, null, null)}}
- {{:helper.link('Red Alert', 'alert', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "redalert"}, null, null)}}
- {{:helper.link('Lockdown', 'caution', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "lockdown"}, null, null)}}
- {{:helper.link('Biohazard', 'radiation', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "biohazard"}, null, null)}}
-
-
-
- {{else data.mode == 43}}
-
Sensor Selection
-
- Available Sensors:
-
- {{for data.records.power_sensors}}
-
- {{:helper.link(value.name_tag, 'plus', {'cartmenu' : "1", 'choice' : "Power Select",'target' : value.name_tag})}}
-
- {{/for}}
-
-
- {{else data.mode == 433}}
-
Sensor Reading(Simplified View)
- {{if data.records.sensor_reading}}
-
Area Cell % Load
- {{for data.records.sensor_reading.apc_data}}
- {{:value.name}}
- {{:value.cell_charge}}%
- {{:value.total_load}}
- {{empty}}
- No APCs found!
- {{/for}}
-
-
Available: {{:data.records.sensor_reading.total_avail}}
-
Load: {{:data.records.sensor_reading.total_used_all}}
- {{else}}
- Unable to contact sensor controller! Please retry and contact tech support if problem persists.
- {{/if}}
-
- {{else data.mode == 44}}
-
Medical Record List
-
- Select A record
-
-
- {{for data.records.medical_records}}
-
- {{:helper.link(value.Name, 'gear', {'cartmenu' : "1", 'choice' : "Medical Records",'target' : value.ref}, null, null)}}
-
- {{/for}}
-
-
- {{else data.mode == 441}}
-
Medical Record
-
-
-
- {{if data.records.general_exists == 1}}
- Name: {{:data.records.general.name}}
- Entity Class: {{:data.records.general.brain_type}}
- Sex: {{:data.records.general.sex}}
- Species: {{:data.records.general.species}}
- Age: {{:data.records.general.age}}
- Rank: {{:data.records.general.rank}}
- Fingerprint: {{:data.records.general.fingerprint}}
- Physical Status: {{:data.records.general.p_stat}}
- Mental Status: {{:data.records.general.m_stat}}
- {{else}}
-
- General Record Lost!
-
- {{/if}}
- {{if data.records.medical_exists == 1}}
- Medical Data:
- Blood Type: {{:data.records.medical.b_type}}
- Minor Disabilities: {{:data.records.medical.mi_dis}}
- Details: {{:data.records.medical.mi_dis_d}}
- Major Disabilities: {{:data.records.medical.ma_dis}}
- Details: {{:data.records.medical.ma_dis_d}}
- Allergies: {{:data.records.medical.alg}}
- Details: {{:data.records.medical.alg_d}}
- Current Disease: {{:data.records.medical.cdi}}
- Details: {{:data.records.medical.alg_d}}
- Important Notes: {{:data.records.medical.notes}}
- {{else}}
-
- Medical Record Lost!
-
-
-
- {{/if}}
-
-
-
-
-
- {{else data.mode == 45}}
-
Security Record List
-
- Select A record
-
-
- {{for data.records.security_records}}
-
- {{:helper.link(value.Name, 'gear', {'cartmenu' : "1", 'choice' : "Security Records",'target' : value.ref}, null, null)}}
-
- {{/for}}
-
-
- {{else data.mode == 451}}
-
Security Record
-
-
-
- {{if data.records.general_exists == 1}}
- Name: {{:data.records.general.name}}
- Sex: {{:data.records.general.sex}}
- Species: {{:data.records.general.species}}
- Age: {{:data.records.general.age}}
- Rank: {{:data.records.general.rank}}
- Fingerprint: {{:data.records.general.fingerprint}}
- Physical Status: {{:data.records.general.p_stat}}
- Mental Status: {{:data.records.general.m_stat}}
- {{else}}
-
- General Record Lost!
-
- {{/if}}
- {{if data.records.security_exists == 1}}
- Security Data:
- Criminal Status: {{:data.records.security.criminal}}
- Minor Crimes: {{:data.records.security.mi_crim}}
- Details: {{:data.records.security.mi_crim_d}}
- Major Crimes: {{:data.records.security.ma_crim}}
- Details: {{:data.records.security.ma_crim_d}}
- Important Notes: {{:data.records.security.notes}}
- {{else}}
-
- Security Record Lost!
-
- {{/if}}
-
-
-
-
-
- {{else data.mode == 46}}
-
Security Bot Control
- {{if data.records.beepsky.active == null || data.records.beepsky.active == 0}}
- {{if data.records.beepsky.count == 0}}
-
No bots found.
- {{else}}
-
- Select A Bot.
-
-
- {{for data.records.beepsky.bots}}
-
- {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, null)}} (Location: {{:value.Location}})
-
- {{/for}}
- {{/if}}
-
- {{:helper.link('Scan for Bots','gear', {'radiomenu' : "1", 'op' : "scanbots"}, null, null)}}
- {{else}}
-
{{:data.records.beepsky.active}}
-
- {{if data.records.beepsky.botstatus.mode == -1}}
-
Waiting for response...
- {{else}}
-
Status:
-
-
-
- Location:
-
-
- {{:data.records.beepsky.botstatus.loca}}
-
-
-
-
- Mode:
-
-
-
- {{if data.records.beepsky.botstatus.mode ==0}}
- Ready
- {{else data.records.beepsky.botstatus.mode == 1}}
- Apprehending target
- {{else data.records.beepsky.botstatus.mode ==2 || data.records.beepsky.botstatus.mode == 3}}
- Arresting target
- {{else data.records.beepsky.botstatus.mode ==4}}
- Starting patrol
- {{else data.records.beepsky.botstatus.mode ==5}}
- On Patrol
- {{else data.records.beepsky.botstatus.mode ==6}}
- Responding to summons
- {{/if}}
-
-
-
-
- {{:helper.link('Stop Patrol', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, null)}}
- {{:helper.link('Start Patrol', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, null)}}
- {{:helper.link('Summon Bot', 'gear', {'radiomenu' : "1", 'op' : "summon"}, null, null)}}
-
- {{/if}}
- {{:helper.link('Return to Bot list', 'gear', {'radiomenu' : "1", 'op' : "botlist"}, null, null)}}
- {{/if}}
-
-
- {{else data.mode == 47}}
-
Supply Record Interlink
-
-
- Location:
-
-
-
- {{if data.records.supply.shuttle_moving}}
- Moving to station ({{:data.records.supply.shuttle_eta}})
- {{else}}
- Shuttle at {{:data.records.supply.shuttle_loc}}
- {{/if}}
-
-
-
-
-
-
- Current Approved Orders
- {{if data.records.supply.approved_count == 0}}
- No current approved orders
- {{else}}
- {{for data.records.supply.approved}}
- #{{:value.Number}} - {{:value.Name}} approved by {{:value.OrderedBy}} {{if value.Comment != ""}} {{:value.Comment}} {{/if}}
- {{/for}}
- {{/if}}
-
- Current Requested Orders
- {{if data.records.supply.requests_count == 0}}
- No current requested orders
- {{else}}
- {{for data.records.supply.requests}}
- #{{:value.Number}} - {{:value.Name}} requested by {{:value.OrderedBy}} {{if value.Comment != ""}} {{:value.Comment}} {{/if}}
- {{/for}}
- {{/if}}
-
-
-
-
-
- {{else data.mode == 48}}
-
Mule Control
- {{if data.records.mulebotcount == 0}}
-
No bots found.
- {{else}}
-
Mule List
- {{for data.records.mulebots}}
-
-
Mulebot #{{:value.name}}
-
Location: {{:value.location}} Home: {{:value.home}} Target: {{:value.target}} Load: {{:value.load}}
-
-
-
Status:
-
- {{if value.paused == 0}}
- Nominal
- {{else value.paused == 1}}
- Paused
- {{/if}}
-
-
-
- {{:helper.link('Go home', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "Home"})}}
- {{:helper.link('Set destination', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "SetD"})}}
- {{:helper.link('Go', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "GoTD"})}}
- {{:helper.link('Stop', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "Stop"})}}
-
- {{/for}}
- {{/if}}
-
-
- {{else data.mode == 49}}
-
Janatorial Supplies Locator
-
- Current Location:
- {{if data.records.janitor.user_loc.x == 0}}
- Unknown
- {{else}}
- {{:data.records.janitor.user_loc.x}} / {{:data.records.janitor.user_loc.y}}
- {{/if}}
-
-
- {{for data.records.janitor.mops}}
- {{if value.x==0}}
- Unable to locate Mop
- {{else}}
- Mop Location:
- ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
- {{/if}}
- {{/for}}
-
-
- {{for data.records.janitor.buckets}}
- {{if value.x==0}}
- Unable to locate Water Buckets
- {{else}}
- Water Buckets Location:
- ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Water Level: {{:value.status}}
- {{/if}}
- {{/for}}
-
-
- {{for data.records.janitor.cleanbots}}
- {{if value.x==0}}
- Unable to locate Clean Bots
- {{else}}
- Clean Bots Location:
- ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
- {{/if}}
- {{/for}}
-
-
- {{for data.records.janitor.carts}}
- {{if value.x==0}}
-
Unable to locate Janitorial Cart
- {{else}}
-
Janitorial cart Location:
-
({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
- {{/if}}
- {{/for}}
-
- {{else data.mode == 6}}
-
InstaNews ED 2.0.9
-
-
-
- Functions :
-
-
- {{:helper.link(data.news_silent==1 ? 'Ringer: Off' : 'Ringer: On', data.news_silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle News"}, null, 'fixedLeftWide')}}
- {{:helper.link('Set news tone', 'comment', {'choice' : "Newstone"}, null, 'fixedLeftWide')}}
-
-
-
- {{if data.reception != 1}}
-
No reception with newscaster network.
- {{/if}}
-
-
-
- {{for data.feedChannels}}
- {{if value.censored}}
- {{:helper.link(value.name, 'circle-arrow-s', {'choice' : "Select Feed", 'feed' : value.feed, 'name' : value.name } , null, 'fixedLeftWiderRed')}}
- {{else}}
- {{:helper.link(value.name, 'circle-arrow-s', {'choice' : "Select Feed", 'feed' : value.feed, 'name' : value.name } , null, 'fixedLeftWider')}}
- {{/if}}
- {{empty}}
- No active channels found...
- {{/for}}
-
-
-
- {{else data.mode == 61}}
-
{{:data.feed.channel}}
-
Created by: {{:data.feed.author}}
-
- {{if data.reception != 1}}
-
No reception with newscaster network.
- {{/if}}
-
-
-
-
- {{if data.feed.censored}}
-
Attention
- This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
- No further feed story additions are allowed while the D-Notice is in effect.
- {{else}}
- {{for data.feed.messages}}
- -{{:value.body}}
- {{if value.has_image}}
-
- {{if value.caption}}
-
{{:value.caption}}
- {{/if}}
- {{/if}}
-
-
- {{empty}}
-
No feed messages found in channel...
- {{/for}}
- {{/if}}
-
-
-
-
- {{/if}}
{{else}}
No Owner information found, please swipe ID
-{{/if}}
-
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_atmos_scan.tmpl b/nano/templates/pda_atmos_scan.tmpl
new file mode 100644
index 0000000000..57f0a356a1
--- /dev/null
+++ b/nano/templates/pda_atmos_scan.tmpl
@@ -0,0 +1,60 @@
+
+
+
+ {{if data.aircontents.reading == 1}}
+
+ Pressure:
+
+
+ {{:helper.string('{1} kPa ', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good', helper.smoothRound(data.aircontents.pressure, 1))}}
+
+
+ Temperature:
+
+
+ {{:helper.string('{1} °C ', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , helper.smoothRound(data.aircontents.temp, 1))}}
+
+
+
+ Oxygen:
+
+
+ {{:helper.string('{1}% ', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good', helper.smoothRound(data.aircontents.oxygen, 1))}}
+
+
+ Nitrogen:
+
+
+ {{:helper.string('{1}% ', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good', helper.smoothRound(data.aircontents.nitrogen, 1))}}
+
+
+ Carbon Dioxide:
+
+
+ {{:helper.string('{1}% ', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good', helper.smoothRound(data.aircontents.carbon_dioxide, 1))}}
+
+
+ Plasma:
+
+
+ {{:helper.string('{1}% ', data.aircontents.plasma > 0 ? 'bad' : 'good', helper.smoothRound(data.aircontents.plasma, 1))}}
+
+
+ {{if data.aircontents.other > 0}}
+
+ Unknown:
+
+
+ {{:helper.smoothRound(data.aircontents.other, 1)}}%
+
+ {{/if}}
+ {{else}}
+
+ Unable to get air reading
+
+ {{/if}}
+
+
\ No newline at end of file
diff --git a/nano/templates/pda_janitor.tmpl b/nano/templates/pda_janitor.tmpl
new file mode 100644
index 0000000000..864692d8a0
--- /dev/null
+++ b/nano/templates/pda_janitor.tmpl
@@ -0,0 +1,66 @@
+
+
+ Current Location:
+ {{if data.janitor.user_loc.x == 0}}
+ Unknown
+ {{else}}
+ {{:data.janitor.user_loc.x}} / {{:data.janitor.user_loc.y}}
+ {{/if}}
+
+
+ {{if data.janitor.mops}}
+
Mop Locations:
+
+ {{for data.janitor.mops}}
+
+ ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
+
+ {{/for}}
+
+ {{else}}
+
Unable to locate Mops
+ {{/if}}
+
+
+ {{if data.janitor.buckets}}
+
Mop Bucket Locations:
+
+ {{for data.janitor.buckets}}
+
+ ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Capacity: {{:value.volume}}/{{:value.max_volume}}
+
+ {{/for}}
+
+ {{else}}
+
Unable to locate Mop Buckets
+ {{/if}}
+
+
+ {{if data.janitor.cleanbots}}
+
Cleanbot Locations:
+
+ {{for data.janitor.cleanbots}}
+
+ ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Status: {{:value.status}}
+
+ {{/for}}
+
+ {{else}}
+
Unable to locate Cleanbots
+ {{/if}}
+
+
+ {{if data.janitor.carts}}
+
Janitorial Cart Locations:
+
+ {{for data.janitor.carts}}
+
+ ({{:value.x}} / {{:value.y}}) - {{:value.dir}} - Water Level: {{:value.volume}}/{{:value.max_volume}}
+
+ {{/for}}
+
+ {{else}}
+
Unable to locate Janitorial Carts
+ {{/if}}
+
+
diff --git a/nano/templates/pda_main_menu.tmpl b/nano/templates/pda_main_menu.tmpl
new file mode 100644
index 0000000000..692cdb7039
--- /dev/null
+++ b/nano/templates/pda_main_menu.tmpl
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+ Owner:
+
+
+ {{:data.owner}}, {{:data.ownjob}}
+
+
+
+
+ ID:
+
+
+ {{:helper.link('Update PDA Info', 'refresh', {'choice' : "UpdateInfo"}, data.idInserted ? null : 'disabled', 'pdalink fixedLeftWide')}}
+
+
+
+
+
Functions
+
+{{for data.categories : cat : i}}
+
+
+ {{:cat}} :
+
+
+ {{for data.apps[cat]}}
+ {{if value.ref in data.notifying}}
+
+ {{:helper.link(value.name, value.notify_icon, {'choice' : "StartProgram", 'program' : value.ref}, null, 'pdalink fixedLeftWide')}}
+
+
+ {{else}}
+ {{:helper.link(value.name, value.icon, {'choice' : "StartProgram", 'program' : value.ref}, null, 'pdalink fixedLeftWide')}}
+ {{/if}}
+ {{/for}}
+
+
+{{/for}}
+
+{{if data.pai}}
+
+
+ PAI Utilities :
+
+
+ {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'pdalink fixedLeft')}}
+ {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'pdalink fixedLeft')}}
+
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_manifest.tmpl b/nano/templates/pda_manifest.tmpl
new file mode 100644
index 0000000000..ef9e91a088
--- /dev/null
+++ b/nano/templates/pda_manifest.tmpl
@@ -0,0 +1,96 @@
+
+
+
+ {{if data.manifest.heads}}
+ Command
+ {{for data.manifest["heads"]}}
+ {{if value.rank == "Captain"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.sec}}
+ Security
+ {{for data.manifest["sec"]}}
+ {{if value.rank == "Head of Security"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.eng}}
+ Engineering
+ {{for data.manifest["eng"]}}
+ {{if value.rank == "Chief Engineer"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.med}}
+ Medical
+ {{for data.manifest["med"]}}
+ {{if value.rank == "Chief Medical Officer"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.sci}}
+ Science
+ {{for data.manifest["sci"]}}
+ {{if value.rank == "Research Director"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.ser}}
+ Service
+ {{for data.manifest["ser"]}}
+ {{if value.rank == "Head of Personnel"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.sup}}
+ Supply
+ {{for data.manifest["sup"]}}
+ {{if value.rank == "Head of Personnel"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else value.rank == "Quartermaster"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.civ}}
+ Civilian
+ {{for data.manifest["civ"]}}
+ {{if value.rank == "Head of Personnel"}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{else}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/if}}
+ {{/for}}
+ {{/if}}
+ {{if data.manifest.misc}}
+ Misc
+ {{for data.manifest["misc"]}}
+ {{:value.name}} {{:value.rank}} {{:value.active}}
+ {{/for}}
+ {{/if}}
+
+
\ No newline at end of file
diff --git a/nano/templates/pda_medical.tmpl b/nano/templates/pda_medical.tmpl
new file mode 100644
index 0000000000..777fb91f4b
--- /dev/null
+++ b/nano/templates/pda_medical.tmpl
@@ -0,0 +1,54 @@
+{{if !data.records}}
+
+ {{for data.recordsList}}
+
+ {{:helper.link(value.Name, 'user', {'choice' : "Records", 'target' : value.ref}, null, 'pdalink fixedLeftWidest')}}
+
+ {{empty}}
+
+ No records found.
+
+ {{/for}}
+{{else}}
+
+
+
+ {{if data.records.general}}
+
Name: {{:data.records.general.name}}
+
Sex: {{:data.records.general.sex}}
+
Species: {{:data.records.general.species}}
+
Age: {{:data.records.general.age}}
+
Rank: {{:data.records.general.rank}}
+
Fingerprint: {{:data.records.general.fingerprint}}
+
Physical Status: {{:data.records.general.p_stat}}
+
Mental Status: {{:data.records.general.m_stat}}
+ {{else}}
+
+ General Record Lost!
+
+ {{/if}}
+ {{if data.records.medical}}
+
+
Blood Type: {{:data.records.medical.b_type}}
+
Minor Disabilities: {{:data.records.medical.mi_dis}}
+
Details: {{:data.records.medical.mi_dis_d}}
+
Major Disabilities: {{:data.records.medical.ma_dis}}
+
Details: {{:data.records.medical.ma_dis_d}}
+
Allergies: {{:data.records.medical.alg}}
+
Details: {{:data.records.medical.alg_d}}
+
Current Disease: {{:data.records.medical.cdi}}
+
Details: {{:data.records.medical.alg_d}}
+
Important Notes: {{:data.records.medical.notes}}
+ {{else}}
+
+ Medical Record Lost!
+
+ {{/if}}
+
+
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_messenger.tmpl b/nano/templates/pda_messenger.tmpl
new file mode 100644
index 0000000000..4871934e4e
--- /dev/null
+++ b/nano/templates/pda_messenger.tmpl
@@ -0,0 +1,90 @@
+
+{{if data.active_conversation}}
+
+
+ Messenger Functions :
+
+
+ {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link(data.auto_scroll ? 'Autoscroll: On' : 'Autoscroll: Off', 'level-down', {'choice' : "Autoscroll"}, null, 'pdalink fixedLeftWide')}}
+
+
+
+
+
Conversation with: {{:data.convo_name}} ({{:data.convo_job}})
+
+
+
+ {{for data.messages}}
+ {{if data.active_conversation == value.target}}
+ {{if value.sent==0}}
+ Them : {{:value.message}}
+ {{else}}
+ You : {{:value.message}}
+ {{/if}}
+ {{/if}}
+ {{/for}}
+
+
+
+ {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'pdalink fixedLeftWidest')}}
+
+{{else}}
+
+
+ Messenger Functions :
+
+
+ {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-up', {'choice' : "Toggle Ringer"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Set Ringtone', 'bell-o', {'choice' : "Ringtone"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'pdalink fixedLeftWider')}}
+
+
+ {{if data.toff == 0}}
+
+ {{if data.charges}}
+
+ {{:data.charges}} charges left.
+
+
+ {{/if}}
+
+ {{if !data.convopdas.length && !data.pdas.length}}
+
No other PDAS located
+ {{else}}
+
Current Conversations
+ {{for data.convopdas}}
+
+ {{:helper.link(value.Name, 'arrow-circle-down', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, 'pdalink')}}
+ {{if data.charges}}
+ {{for data.plugins : plugin : i}}
+ {{:helper.link(plugin.name, plugin.icon, {'choice' : "Messenger Plugin", 'plugin' : plugin.ref, 'target' : value.Reference}, null, 'pdalink fixedLeft')}}
+ {{/for}}
+ {{/if}}
+
+ {{/for}}
+
Other PDAs
+ {{for data.pdas}}
+
+ {{:helper.link(value.Name, 'arrow-circle-down', {'choice' : "Message", 'target' : value.Reference}, null, 'pdalink')}}
+ {{if data.charges}}
+ {{for data.plugins : plugin : i}}
+ {{:helper.link(plugin.name, plugin.icon, {'choice' : "Messenger Plugin", 'plugin' : plugin.ref, 'target' : value.Reference}, null, 'pdalink fixedLeft')}}
+ {{/for}}
+ {{/if}}
+
+ {{/for}}
+ {{/if}}
+ {{/if}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_mob_hunt.tmpl b/nano/templates/pda_mob_hunt.tmpl
new file mode 100644
index 0000000000..dde4ab82a5
--- /dev/null
+++ b/nano/templates/pda_mob_hunt.tmpl
@@ -0,0 +1,91 @@
+
+
+
+
+
+ Connection Status:
+
+ {{if data.connected}}
+
+ Connected
+
+
+ {{:helper.link('Disconnect', 'sign-out', {'choice': 'Disconnect'})}}
+
+ {{else}}
+
+ No Connection
+
+
+ {{:helper.link('Connect', 'sign-in', {'choice': 'Reconnect'})}}
+
+ {{/if}}
+
+
+
+
+
+
My Collection:
+{{if data.no_collection}}
+
+
+ Your collection is empty! Go capture some Nano-Mobs!
+
+
+
+ Wild mobs captured: {{:data.wild_captures}}
+{{else}}
+
+
+
+ {{if data.entry}}
+ {{if data.entry.nickname}}
+
Name: {{:data.entry.nickname}}
+ {{/if}}
+
Species: {{:data.entry.real_name}}
+
Level: {{:data.entry.level}}
+
Primary Type: {{:data.entry.type1}}
+ {{if data.entry.type2}}
+
Secondary Type: {{:data.entry.type2}}
+ {{/if}}
+ {{if data.entry.sprite}}
+
+ {{else}}
+
Mob Image Missing!
+ {{/if}}
+ {{else}}
+
+ Mob Data Missing!
+
+ {{/if}}
+
+
+
+
+ Wild mobs captured: {{:data.wild_captures}}
+
+
+
+
+ {{:helper.link('Previous Mob', 'arrow-left', {'choice': 'Prev'})}}
+
+
+ {{:helper.link('Transfer Mob', 'exchange', {'choice': 'Transfer'})}}
+
+
+ {{:helper.link('Rename Mob', 'pencil', {'choice': 'Rename'})}}
+
+
+ {{:helper.link('Release Mob', 'tree', {'choice': 'Release'})}}
+
+
+ {{:helper.link('Next Mob', 'arrow-right', {'choice': 'Next'})}}
+
+
+
+ {{if data.entry.is_hacked}}
+
+ {{:helper.link('Set Trap', 'bolt', {'choice': 'Set_Trap'})}}
+ {{/if}}
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_mule.tmpl b/nano/templates/pda_mule.tmpl
new file mode 100644
index 0000000000..369d0830aa
--- /dev/null
+++ b/nano/templates/pda_mule.tmpl
@@ -0,0 +1,118 @@
+{{if !data.mulebot.active}}
+ {{if data.mulebot.count == 0}}
+
No bots found.
+ {{else}}
+
+ Select a MULE:
+
+
+ {{for data.mulebot.bots}}
+
+ {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, 'pdalink fixedLeftWidest')}} (Location: {{:value.Location}})
+
+ {{/for}}
+ {{/if}}
+
+ {{:helper.link('Scan for Bots','rss', {'radiomenu' : "1", 'op' : "scanbots"}, null, 'pdalink fixedLeftWidest')}}
+{{else}}
+
{{:data.mulebot.active}}
+ {{if data.mulebot.botstatus.mode == -1}}
+
Waiting for response...
+ {{else}}
+
Status:
+
+
+ Location:
+
+
+ {{:data.mulebot.botstatus.loca}}
+
+
+
+
+ Mode:
+
+
+
+ {{if data.mulebot.botstatus.mode == 0}}
+ Ready
+ {{else data.mulebot.botstatus.mode == 1}}
+ Loading/Unloading
+ {{else data.mulebot.botstatus.mode == 2}}
+ Navigating to Delivery Location
+ {{else data.mulebot.botstatus.mode == 3}}
+ Navigating to Home
+ {{else data.mulebot.botstatus.mode == 4}}
+ Waiting for Clear Path
+ {{else data.mulebot.botstatus.mode == 5 || data.mulebot.botstatus.mode == 6}}
+ Calculating navigation Path
+ {{else data.mulebot.botstatus.mode == 7}}
+ Unable to locate destination
+ {{/if}}
+
+
+
+
+
+ Current Load:
+
+
+
+ {{:helper.link(data.mulebot.botstatus.load == null ? 'None (Unload)' : data.mulebot.botstatus.load + ' (Unload)', 'archive', {'radiomenu' : "1", 'op' : "unload"},data.mulebot.botstatus.load == null ? 'disabled' : null, 'pdalink fixedLeftWidest')}}
+
+
+
+
+
+ Power:
+
+
+
+ {{:data.mulebot.botstatus.powr}}%
+
+
+
+
+
+ Destination:
+
+
+ {{:helper.link(data.mulebot.botstatus.dest == null || data.mulebot.botstatus.dest == "" ? 'None (Set)' : data.mulebot.botstatus.dest + ' (Set)', 'gear', {'radiomenu' : "1", 'op' : "setdest"}, null, 'pdalink fixedLeftWidest')}}
+
+
+
+
+ Home:
+
+
+ {{if data.mulebot.botstatus.home == null}} None {{else}} {{:data.mulebot.botstatus.home}} {{/if}}
+
+
+
+
+ Auto Return:
+
+
+ {{:helper.link(data.mulebot.botstatus.retn == 1 ? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : (data.mulebot.botstatus.retn==1 ? "retoff" : "reton")}, null, 'pdalink fixedLeftWidest')}}
+
+
+
+
+ Auto Pickup:
+
+
+ {{:helper.link(data.mulebot.botstatus.pick==1? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : (data.mulebot.botstatus.pick==1 ? "pickoff" : "pickon")}, null, 'pdalink fixedLeftWidest')}}
+
+
+
+
+ Functions:
+
+
+ {{:helper.link('Stop', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, 'pdalink fixedLeft')}}
+ {{:helper.link('Proceed', 'gear', {'radiomenu' : "1", 'op' : "start"}, null, 'pdalink fixedLeft')}}
+ {{:helper.link('Return Home', 'gear', {'radiomenu' : "1", 'op' : "home"}, null, 'pdalink fixedLeft')}}
+
+
+ {{/if}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_notekeeper.tmpl b/nano/templates/pda_notekeeper.tmpl
new file mode 100644
index 0000000000..53db3be643
--- /dev/null
+++ b/nano/templates/pda_notekeeper.tmpl
@@ -0,0 +1,21 @@
+
+
+
+
+
+ {{:helper.link('Edit Notes', 'pencil-square-o', {'choice': "Edit"}, null, 'pdalink')}}
+
+
\ No newline at end of file
diff --git a/nano/templates/pda_power.tmpl b/nano/templates/pda_power.tmpl
new file mode 100644
index 0000000000..7ba04188b7
--- /dev/null
+++ b/nano/templates/pda_power.tmpl
@@ -0,0 +1,49 @@
+{{if !data.records.powerconnected}}
+
+
Select a power monitor:
+
+ {{for data.records.powermonitors}}
+
+ {{:helper.link(value.Name, 'exclamation-circle', {'choice' : "Power Select", 'target' : value.ref}, null, 'pdalink fixedLeftWidest')}}
+
+ {{/for}}
+{{else}}
+
+
+ Total Power:
+
+
+ {{:data.records.poweravail}} W
+
+
+
+
+ Total Load:
+
+
+ {{:data.records.powerload}} W
+
+
+
+
+ Total Demand:
+
+
+ {{:data.records.powerdemand}} W
+
+
+
+
+ Area Equip. Lighting Environ. Cell Load
+ {{for data.records.apcs}}
+ {{:value.Name}}
+ {{:helper.string('{1} ', value.Equipment == "On" || value.Equipment == "AOn" ? '#4f7529' : '#8f1414', value.Equipment)}}
+ {{:helper.string('{1} ', value.Lights == "On" || value.Lights == "AOn" ? '#4f7529' : '#8f1414', value.Lights)}}
+ {{:helper.string('{1} ', value.Environment == "On" || value.Environment == "AOn" ? '#4f7529' : '#8f1414', value.Environment)}}
+ {{:helper.string('{1}{2} ', value.CellStatus == "F" ? '#4f7529' : value.CellStatus == "C" ? '#cd6500' : '#8f1414', value.CellStatus == "M" ? 'No Cell' : value.CellPct + '%', value.CellStatus == "M" ? '' : ' (' + value.CellStatus + ')')}}
+ {{:value.Load}}W
+
+ {{/for}}
+
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_secbot.tmpl b/nano/templates/pda_secbot.tmpl
new file mode 100644
index 0000000000..6ff8c98e14
--- /dev/null
+++ b/nano/templates/pda_secbot.tmpl
@@ -0,0 +1,59 @@
+{{if !data.beepsky.active}}
+ {{if data.beepsky.count == 0}}
+
No bots found.
+ {{else}}
+
+ Select a bot:
+
+
+ {{for data.beepsky.bots}}
+
+ {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, 'pdalink fixedLeftWidest')}} (Location: {{:value.Location}})
+
+ {{/for}}
+ {{/if}}
+
+ {{:helper.link('Scan for Bots','rss', {'radiomenu' : "1", 'op' : "scanbots"}, null, 'pdalink fixedLeftWidest')}}
+{{else}}
+
{{:data.beepsky.active}}
+ {{if data.beepsky.botstatus.mode == -1}}
+
Waiting for response...
+ {{else}}
+
Status:
+
+
+ Location:
+
+
+ {{:data.beepsky.botstatus.loca}}
+
+
+
+
+ Mode:
+
+
+
+ {{if data.beepsky.botstatus.mode ==0}}
+ Ready
+ {{else data.beepsky.botstatus.mode == 1}}
+ Apprehending target
+ {{else data.beepsky.botstatus.mode ==2 || data.beepsky.botstatus.mode == 3}}
+ Arresting target
+ {{else data.beepsky.botstatus.mode ==4}}
+ Starting patrol
+ {{else data.beepsky.botstatus.mode ==5}}
+ On Patrol
+ {{else data.beepsky.botstatus.mode ==6}}
+ Responding to summons
+ {{/if}}
+
+
+
+
+ {{:helper.link('Stop Patrol', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Start Patrol', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Summon Bot', 'gear', {'radiomenu' : "1", 'op' : "summon"}, null, 'pdalink fixedLeftWide')}}
+
+ {{/if}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_security.tmpl b/nano/templates/pda_security.tmpl
new file mode 100644
index 0000000000..53d40185e0
--- /dev/null
+++ b/nano/templates/pda_security.tmpl
@@ -0,0 +1,50 @@
+{{if !data.records}}
+
+ {{for data.recordsList}}
+
+ {{:helper.link(value.Name, 'user', {'choice' : "Records", 'target' : value.ref}, null, 'pdalink fixedLeftWidest')}}
+
+ {{empty}}
+
+ No records found.
+
+ {{/for}}
+{{else}}
+
+
+
+ {{if data.records.general}}
+
Name: {{:data.records.general.name}}
+
Sex: {{:data.records.general.sex}}
+
Species: {{:data.records.general.species}}
+
Age: {{:data.records.general.age}}
+
Rank: {{:data.records.general.rank}}
+
Fingerprint: {{:data.records.general.fingerprint}}
+
Physical Status: {{:data.records.general.p_stat}}
+
Mental Status: {{:data.records.general.m_stat}}
+ {{else}}
+
+ General Record Lost!
+
+ {{/if}}
+ {{if data.records.security}}
+
+
Criminal Status: {{:data.records.security.criminal}}
+
Minor Crimes: {{:data.records.security.mi_crim}}
+
Details: {{:data.records.security.mi_crim_d}}
+
Major Crimes: {{:data.records.security.ma_crim}}
+
Details: {{:data.records.security.ma_crim_d}}
+
Important Notes: {{:data.records.security.notes}}
+ {{else}}
+
+ Security Record Lost!
+
+ {{/if}}
+
+
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/pda_signaller.tmpl b/nano/templates/pda_signaller.tmpl
new file mode 100644
index 0000000000..2b5f148b02
--- /dev/null
+++ b/nano/templates/pda_signaller.tmpl
@@ -0,0 +1,38 @@
+
+
+
+ Frequency :
+
+
+ {{:data.signal_freq}}
+
+
+ {{:helper.link('-1', null, {'choice' : "Signal Frequency", 'sfreq' : "-10"}, null, null)}}
+ {{:helper.link('-.2', null, {'choice' : "Signal Frequency", 'sfreq' : "-2"}, null, null)}}
+
+ {{:helper.link('+.2', null, {'choice' : "Signal Frequency", 'sfreq' : "2"}, null, null)}}
+ {{:helper.link('+1', null, {'choice' : "Signal Frequency", 'sfreq' : "10"}, null, null)}}
+
+
+
+
+
+
+ Code :
+
+
+
+ {{:data.signal_code}}
+
+ {{:helper.link('-5', null, {'choice' : "Signal Code", 'scode' : "-5"}, null, null)}}
+ {{:helper.link('-1', null, {'choice' : "Signal Code", 'scode' : "-1"}, null, null)}}
+ {{:helper.link('+1', null, {'choice' : "Signal Code", 'scode' : "1"}, null, null)}}
+ {{:helper.link('+5', null, {'choice' : "Signal Code", 'scode' : "5"}, null, null)}}
+
+
+
+ {{:helper.link('Send Signal', 'exclamation-circle', {'choice' : "Send Signal"}, null, null)}}
+
\ No newline at end of file
diff --git a/nano/templates/pda_status_display.tmpl b/nano/templates/pda_status_display.tmpl
new file mode 100644
index 0000000000..8b153ad0ff
--- /dev/null
+++ b/nano/templates/pda_status_display.tmpl
@@ -0,0 +1,44 @@
+
+
+
+ Code :
+
+
+ {{:helper.link('Clear', 'trash', {'choice' : "Status", 'statdisp' : "blank"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Shuttle ETA', 'gear', {'cartmenu' : "1", 'choice' : "Status", 'statdisp' : "shuttle"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Message', 'gear', {'choice' : "Status", 'statdisp' : "message"}, null, 'pdalink fixedLeftWide')}}
+
+
+
+
+
+ Message line 1
+
+
+ {{:helper.link(data.records.message1 + ' (set)', 'pencil', {'choice' : "Status", 'statdisp' : "setmsg1"}, null, 'pdalink fixedLeftWide')}}
+
+
+
+
+ Message line 2
+
+
+ {{:helper.link(data.records.message2 + ' (set)', 'pencil', {'choice' : "Status", 'statdisp' : "setmsg2"}, null, 'pdalink fixedLeftWide')}}
+
+
+
+
+
+
+ ALERT! :
+
+
+ {{:helper.link('None', 'bell', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "default"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Red Alert', 'bell', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "redalert"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Lockdown', 'exclamation-circle', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "lockdown"}, null, 'pdalink fixedLeftWide')}}
+ {{:helper.link('Biohazard', 'exclamation-circle', {'choice' : "Status", 'statdisp' : "alert", 'alert' : "biohazard"}, null, 'pdalink fixedLeftWide')}}
+
+
\ No newline at end of file
diff --git a/nano/templates/pda_supply.tmpl b/nano/templates/pda_supply.tmpl
new file mode 100644
index 0000000000..810fc19376
--- /dev/null
+++ b/nano/templates/pda_supply.tmpl
@@ -0,0 +1,39 @@
+
+
+ Location:
+
+
+
+ {{if data.supply.shuttle_moving}}
+ Moving to {{:data.supply.shuttle_loc}}
+ {{else}}
+ Shuttle at {{:data.supply.shuttle_loc}}
+ {{/if}}
+
+ {{:data.supply.shuttle_time}}
+
+
+
+
+
+
+ Current Approved Orders
+ {{if data.supply.approved_count == 0}}
+ No current approved orders
+ {{else}}
+ {{for data.supply.approved}}
+ #{{:value.Number}} - {{:value.Name}} approved by {{:value.OrderedBy}} {{if value.Comment != ""}} {{:value.Comment}} {{/if}}
+ {{/for}}
+ {{/if}}
+
+ Current Requested Orders
+ {{if data.supply.requests_count == 0}}
+ No current requested orders
+ {{else}}
+ {{for data.supply.requests}}
+ #{{:value.Number}} - {{:value.Name}} requested by {{:value.OrderedBy}} {{if value.Comment != ""}} {{:value.Comment}} {{/if}}
+ {{/for}}
+ {{/if}}
+
+
+
\ No newline at end of file
diff --git a/tgui/packages/tgui/interfaces/Pda.js b/tgui/packages/tgui/interfaces/Pda.js
new file mode 100644
index 0000000000..18018a1c73
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/Pda.js
@@ -0,0 +1,17 @@
+import { round } from 'common/math';
+import { Fragment } from 'inferno';
+import { useBackend } from "../backend";
+import { Box, Button, Flex, Icon, LabeledList, ProgressBar, Section } from "../components";
+import { Window } from "../layouts";
+
+export const Pda = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+
+
+ PDA!
+
+
+ );
+};
\ No newline at end of file
diff --git a/tgui/packages/tgui/interfaces/pda/pda_main_menu.js b/tgui/packages/tgui/interfaces/pda/pda_main_menu.js
new file mode 100644
index 0000000000..f580c273b6
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/pda/pda_main_menu.js
@@ -0,0 +1,14 @@
+import { round } from 'common/math';
+import { Fragment } from 'inferno';
+import { useBackend } from "../backend";
+import { Box, Button, Flex, Icon, LabeledList, ProgressBar, Section } from "../components";
+
+export const pda_main_menu = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+
+ );
+};
\ No newline at end of file
diff --git a/tools/nano-tester/index.html b/tools/nano-tester/index.html
index 70f5dfecd2..f3cf4ba855 100644
--- a/tools/nano-tester/index.html
+++ b/tools/nano-tester/index.html
@@ -25,6 +25,7 @@
+
diff --git a/vorestation.dme b/vorestation.dme
index 16816e2506..f87cd47756 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -65,6 +65,7 @@
#include "code\__defines\nifsoft.dm"
#include "code\__defines\objects.dm"
#include "code\__defines\overmap.dm"
+#include "code\__defines\pda.dm"
#include "code\__defines\planets.dm"
#include "code\__defines\plants.dm"
#include "code\__defines\preferences.dm"
@@ -3067,11 +3068,17 @@
#include "code\modules\paperwork\stamps.dm"
#include "code\modules\pda\app.dm"
#include "code\modules\pda\cart.dm"
+#include "code\modules\pda\cart_apps.dm"
#include "code\modules\pda\cart_vr.dm"
#include "code\modules\pda\chatroom.dm"
+#include "code\modules\pda\core_apps.dm"
+#include "code\modules\pda\messenger.dm"
+#include "code\modules\pda\messenger_plugins.dm"
#include "code\modules\pda\pda.dm"
+#include "code\modules\pda\pda_tgui.dm"
#include "code\modules\pda\pda_vr.dm"
#include "code\modules\pda\radio.dm"
+#include "code\modules\pda\utilities.dm"
#include "code\modules\persistence\filth.dm"
#include "code\modules\persistence\graffiti.dm"
#include "code\modules\persistence\noticeboard.dm"