{{if data.isBeakerLoaded}}
-
Volume: {{:helper.smoothRound(data.beakerCurrentVolume)}} / {{:data.beakerMaxVolume}}
+
Volume: {{:data.beakerCurrentVolume}} / {{:data.beakerMaxVolume}}
{{for data.beakerContents}}
{{:value.volume}} units of {{:value.name}}
{{empty}}
diff --git a/nano/templates/chem_master.tmpl b/nano/templates/chem_master.tmpl
new file mode 100644
index 0000000000..1b8315154a
--- /dev/null
+++ b/nano/templates/chem_master.tmpl
@@ -0,0 +1,116 @@
+
+{{if data.tab == 'home'}}
+
+
{{:helper.link(data.pillBottle ? 'Eject Pill Bottle' : 'No pill bottle inserted', 'eject', {'ejectp' : 1}, data.pillBottle ? null : 'linkOff')}}
+
+ {{if data.pillBottle}}
+
{{:data.pillBottle.total}} / {{:data.pillBottle.max}}
+ {{/if}}
+
+
{{:helper.link(data.beaker ? 'Eject Beaker and Clear Buffer' : 'Please insert beaker', 'eject', {'eject' : 1}, data.beaker ? null : 'linkOff')}}
+
+ {{if data.beaker}}
+ {{if data.beaker.total_volume}}
+ Add to buffer:
+ {{for data.beaker.reagent_list}}
+
+
{{:value.name}}
+
{{:value.volume}} Units
+
+
+ {{:helper.link('Analyze', 'signal-diag', {'tab_select' : 'analyze', 'desc' : value.description, 'name' : value.name})}}
+ {{:helper.link('1', 'plus', {'add' : value.id, 'amount' : 1})}}
+ {{:helper.link('5', 'plus', {'add' : value.id, 'amount' : 5})}}
+ {{:helper.link('10', 'plus', {'add' : value.id, 'amount' : 10})}}
+ {{:helper.link('30', 'plus', {'add' : value.id, 'amount' : 30})}}
+ {{:helper.link('60', 'plus', {'add' : value.id, 'amount' : 60})}}
+ {{:helper.link('All', 'plus', {'add' : value.id, 'amount' : value.volume})}}
+ {{:helper.link('Custom', 'plus', {'addcustom' : value.id})}}
+
+ {{/for}}
+ {{else}}
+ Beaker is empty.
+ {{/if}}
+
+
+
Transfer to
+ {{:helper.link(!data.mode ? 'disposal' : 'beaker', null, {'toggle' : 1})}}
+
+ {{if data.reagents}}
+ {{if data.reagents.total_volume}}
+ {{for data.reagents.reagent_list}}
+
+
{{:value.name}}
+
{{:value.volume}} Units
+
+
+ {{:helper.link('Analyze', 'signal-diag', {'tab_select' : 'analyze', 'desc' : value.description, 'name' : value.name})}}
+ {{:helper.link('1', 'minus', {'remove' : value.id, 'amount' : 1})}}
+ {{:helper.link('5', 'minus', {'remove' : value.id, 'amount' : 5})}}
+ {{:helper.link('10', 'minus', {'remove' : value.id, 'amount' : 10})}}
+ {{:helper.link('30', 'minus', {'remove' : value.id, 'amount' : 30})}}
+ {{:helper.link('60', 'minus', {'remove' : value.id, 'amount' : 60})}}
+ {{:helper.link('All', 'minus', {'remove' : value.id, 'amount' : value.volume})}}
+ {{:helper.link('Custom', 'minus', {'removecustom' : value.id})}}
+
+ {{/for}}
+ {{/if}}
+ {{else}}
+ Empty
+ {{/if}}
+ {{if !data.condi}}
+
+
+ {{:helper.link('Create pill (60 units max)', null, {'createpill' : 1})}}
+ {{:helper.link('Create multiple pills', null, {'createpill_multiple' : 1})}}
+ {{:helper.link('Create bottle (60 units max)', null, {'createbottle' : 1})}}
+
+
+ {{:helper.link('', 'pill pill' + data.pillSprite, {'tab_select' : 'pill'}, null, 'link32')}}
+ {{:helper.link('', 'pill bottle' + data.bottleSprite, {'tab_select' : 'bottle'}, null, 'link32')}}
+
+ {{/if}}
+ {{/if}}
+
+{{else data.tab == 'analyze'}}
+ {{if !data.condi}}
+
Chemical Info:
+ {{else}}
+
Condiment Info:
+ {{/if}}
+
+
Name:
+
{{:data.analyzeData.name}}
+
+ {{if data.analyzeData.name == 'Blood'}}
+
+
Blood Type:
+
{{:data.analyzeData.blood_type}}
+
+
+
DNA:
+
{{:data.analyzeData.blood_DNA}}
+
+ {{else}}
+
+
Description:
+
{{:data.analyzeData.desc}}
+
+ {{/if}}
+ {{:helper.link('Back', 'arrowreturn-1-w', {'tab_select' : 'home'})}}
+
+{{else data.tab == 'pill'}}
+ {{for data.pillSpritesAmount}}
+ {{:helper.link('', 'pill pill' + value, {'pill_sprite' : value}, null, data.pillSprite == value ? 'linkOn link32' : 'link32')}}
+ {{/for}}
+
{{:helper.link('Return', 'arrowreturn-1-w', {'tab_select' : 'home'})}}
+
+{{else data.tab == 'bottle'}}
+ {{for data.bottleSpritesAmount}}
+ {{:helper.link('', 'pill bottle' + value, {'bottle_sprite' : value}, null, data.bottleSprite == value ? 'linkOn link32' : 'link32')}}
+ {{/for}}
+
{{:helper.link('Return', 'arrowreturn-1-w', {'tab_select' : 'home'})}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/cloning.tmpl b/nano/templates/cloning.tmpl
new file mode 100644
index 0000000000..a927fcc4d9
--- /dev/null
+++ b/nano/templates/cloning.tmpl
@@ -0,0 +1,104 @@
+
+
+
{{:data.temp}}
+
+{{if data.menu == 1}}
+
+
Modules
+
+ {{if data.connected}}
+ DNA scanner found.
+ {{else}}
+ DNA scanner not found.
+ {{/if}}
+
+
+ {{if data.podsLen > 0}}
+ {{:data.podsLen}} cloning vat\s found.
+ {{else}}
+ No cloning vats found.
+ {{/if}}
+
+
+
+
Scanner Functions
+
+ {{if data.loading}}
+ Scanning...
+ {{else}}
+ {{:data.scantemp}}
+ {{/if}}
+
+
+ {{if data.connected}}
+
+ {{:helper.link(data.occupant ? 'Scan - ' + data.occupant : 'Scanner unoccupied', 'play', {'scan' : 1}, data.occupant ? null : 'linkOff')}}
+
+
+ {{:helper.link(data.locked ? 'Unlock' : 'Lock', data.locked ? 'locked' : 'unlocked', {'lock' : 1}, null, data.locked ? 'redButton' : null)}}
+
+
+ {{:helper.link('Eject', 'eject', {'eject' : 1}, data.occupant ? null : 'linkOff')}}
+
+ {{else}}
+ No scanner connected!
+ {{/if}}
+
+
+ {{if data.podsLen}}
+ {{for data.pods}}
+
{{:value.pod}}, biomass: {{:value.biomass}}
+ {{/for}}
+ {{/if}}
+
+
+
Database Functions
+
+ {{:helper.link('View Records', 'list', {'menu' : 2})}}
+ {{:helper.link('Eject Disk', 'eject', {'disk' : 'eject'}, data.diskette ? null : 'linkOff')}}
+
+
+{{else data.menu == 2}}
+
Current records
+ {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}}
+
+ {{for data.records}}
+ {{:helper.link(value.name, 'document', {'view_rec' : value.ckey})}}
+ {{/for}}
+
+
+{{else data.menu == 3}}
+
Selected Record
+
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 2})}}
+
+ {{if data.activeRecord}}
+ {{:helper.link('Delete Record', 'trash', {'del_rec' : 1}, null, 'redButton')}}
+
+
Name:
+
{{:data.activeRecord.real_name}}
+
+
+ {{:helper.link('Load from disk', 'transfer-e-w', {'disk' : 'load'}, data.disk ? null : 'linkOff')}}
+
+
+
Save:
+ {{:helper.link('UI + UE', 'disk', {'save_disk' : 'ue'}, data.disk ? null : 'linkOff')}}
+ {{:helper.link('UI', 'disk', {'save_disk' : 'ui'}, data.disk ? null : 'linkOff')}}
+ {{:helper.link('SE', 'disk', {'save_disk' : 'se'}, data.disk ? null : 'linkOff')}}
+
+
+ {{:helper.link('Clone', 'play', {'clone' : data.activeRecord.ckey}, data.podsLen ? null : 'linkOff')}}
+
+ {{else}}
+
ERROR: Record not found.
+ {{/if}}
+
+{{else data.menu == 4}}
+ {{:data.temp}}
+
Confirm Record Deletion
+
Scan card to confirm.
+ {{:helper.link('Cancel', 'cancel', {'menu' : 3})}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/fax.tmpl b/nano/templates/fax.tmpl
new file mode 100644
index 0000000000..4745a7aeb3
--- /dev/null
+++ b/nano/templates/fax.tmpl
@@ -0,0 +1,55 @@
+
+
+
+
+ Confirm Identity:
+
+ {{:helper.link(data.scanName ? data.scanName : 'Insert Card', 'check', {'scan' : 1})}}
+ {{if data.authenticated}}
+ {{:helper.link('Log Out', 'eject', {'logout' : 1}, null, 'redButton')}}
+ {{else}}
+ {{:helper.link('Log In', 'person', {'auth' : 1}, data.scanName ? null : 'linkOff')}}
+ {{/if}}
+
+{{if data.authenticated}}
+
+
+
+
+
+ Logged in to:
+
+
+ {{:data.bossName}} Quantum Entanglement Network
+
+
+ {{if data.copyItem}}
+ {{if data.cooldown}}
+
Transmitter arrays realigning. Please stand by.
+ {{else}}
+
+
Currently sending:
+
{{:data.copyItemName}}
+
+
+
Sending to:
+ {{:helper.link(data.destination, 'tag', {'dept' : 1})}}
+
+
{{:helper.link('Send', 'signal-diag', {'send' : 1})}}
+ {{/if}}
+ {{else}}
+
Please insert paper to send via secure connection.
+ {{if data.cooldown}}
+
Transmitter arrays realigning. Please stand by.
+ {{/if}}
+ {{/if}}
+{{else}}
+
Proper authentication is required to use this device.
+{{/if}}
+{{if data.copyItem}}
+
{{:helper.link('Remove Item', 'eject', {'remove' : 1})}}
+{{/if}}
+
diff --git a/nano/templates/guest_pass.tmpl b/nano/templates/guest_pass.tmpl
new file mode 100644
index 0000000000..80525f5331
--- /dev/null
+++ b/nano/templates/guest_pass.tmpl
@@ -0,0 +1,59 @@
+
+
+{{if data.mode == 1}}
+
+
+ Activity Log
+
+ {{:helper.link('Print', 'print', {'print' : 1})}} {{:helper.link('Back', 'arrowreturn-1-w', {'mode' : 0})}}
+
+
+ {{for data.log}}
+
+ {{:value}}
+
+ {{/for}}
+{{else}}
+
Guest pass terminal #{{:data.uid}}
+
+ {{:helper.link('View activity log', 'list', {'mode' : 1})}} {{:helper.link('Issure Pass', 'eject', {'action' : 'issue'})}}
+
+
+
+
+ Issuing ID:
+
+ {{:helper.link(data.giver ? data.giver : 'Insert ID', 'person', {'action' : 'id'})}}
+
+
+
+ Issued to:
+
+ {{:helper.link(data.giveName, 'pencil', {'choice' : 'giv_name'})}}
+
+
+
+ Reason:
+
+ {{:helper.link(data.reason, 'pencil', {'choice' : 'reason'})}}
+
+
+
+ Duration (minutes):
+
+ {{:helper.link(data.duration, 'clock', {'choice' : 'duration'})}}
+
+
+ {{for data.area}}
+
+ {{:helper.link(value.area_name, value.on ? 'check' : 'close', {'choice' : 'access', 'access' : value.area}, null, value.on ? 'linkOn' : null)}}
+
+ {{/for}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/holodeck.tmpl b/nano/templates/holodeck.tmpl
new file mode 100644
index 0000000000..71d4ad5605
--- /dev/null
+++ b/nano/templates/holodeck.tmpl
@@ -0,0 +1,36 @@
+
+
+
Current Loaded Programs:
+{{for data.supportedPrograms}}
+
{{:helper.link(value.name, data.currentProgram == value.program ? 'check' : 'close', {'program' : value.program}, null, data.currentProgram == value.program ? 'linkOn' : null)}}
+{{/for}}
+
Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
+{{if data.isSilicon}}
+ {{if data.safetyDisabled}}
+ {{if data.emagged}}
+
ERROR: Cannot re-enable Safety Protocols.
+ {{else}}
+
{{:helper.link('Re-Enable Safety Protocols?', 'help', {'AIoverride' : 1}, null, 'linkOn')}}
+ {{/if}}
+ {{else}}
+
{{:helper.link('Re-Enable Safety Protocols?', 'help', {'AIoverride' : 1}, null, 'redButton')}}
+ {{/if}}
+{{/if}}
+
+{{if data.safetyDisabled}}
+ {{for data.restrictedPrograms}}
+
{{:helper.link('Begin ' + value.name, data.currentProgram == value.program ? 'check' : 'close', {'program' : value.program}, null, data.currentProgram == value.program ? 'linkOn' : null)}}
+ {{/for}}
+
Ensure the holodeck is empty before testing.
+
Safety Protocols are DISABLED
+{{else}}
+
Safety Protocols are ENABLED
+{{/if}}
+
+
+
Gravity:
+ {{:helper.link(data.gravity ? 'On ' : 'Off', data.gravity ? 'check' : 'close', {'gravity' : 1}, null, data.gravity ? 'linkOn' : 'redButton')}}
+
\ No newline at end of file
diff --git a/nano/templates/laptop_vendor.tmpl b/nano/templates/laptop_vendor.tmpl
new file mode 100644
index 0000000000..e0de4f7272
--- /dev/null
+++ b/nano/templates/laptop_vendor.tmpl
@@ -0,0 +1,173 @@
+
+
+{{if data.mode == 0}}
+
+ Please choose your laptop customization options.
+ Your comptuer will automatically be loaded with any programs you can use after the transaction is complete.
+ Some programs will require additional components to be installed!
+
+
+
+
+
+
HDD (Required):
+
Added
+
+
+
+
+ Card Reader:
+
+ {{:helper.link('Single (50)', data.cardreader == 1 ? 'check' : 'plus', {'choice' : 'single_add'}, data.cardreader == 1 ? 'selected' : null)}}
+ {{:helper.link('Dual (125)', data.cardreader == 2 ? 'check' : 'plus', {'choice' : 'dual_add'}, data.cardreader == 2 ? 'selected' : null)}}
+ {{:helper.link('None', 'close', {'choice' : 'cardreader_rem'}, data.cardreader == 0 ? 'redButton' : null)}}
+
+
+
+
+ Floppy Drive:
+
+ {{:helper.link('Add (50)', data.floppy == 1 ? 'check' : 'plus', {'choice' : 'floppy_add'}, data.floppy == 1 ? 'selected' : null)}}
+ {{:helper.link('None', 'close', {'choice' : 'floppy_rem'}, data.floppy == 0 ? 'redButton' : null)}}
+
+
+
+
+ Radio card:
+
+ {{:helper.link('Add (50)', data.radionet == 1 ? 'check' : 'plus', {'choice' : 'radio_add'}, data.radionet == 1 ? 'selected' : null)}}
+ {{:helper.link('None', 'close', {'choice' : 'radio_rem'}, data.radionet == 0 ? 'redButton' : null)}}
+
+
+
+
+ Camera Card:
+
+ {{:helper.link('Add (100)', data.camera == 1 ? 'check' : 'plus', {'choice' : 'camnet_add'}, data.camera == 1 ? 'selected' : null)}}
+ {{:helper.link('None', 'close', {'choice' : 'camnet_rem'}, data.camera == 0 ? 'redButton' : null)}}
+
+
+
+
+ Network card:
+
+
+ {{:helper.link('Area (75)', data.network == 1 ? 'check' : 'plus', {'choice' : 'area_add'}, data.network == 1 ? 'selected' : null)}}
+ {{:helper.link('Adjacent (50)', data.network == 2 ? 'check' : 'plus', {'choice' : 'prox_add'}, data.network == 2 ? 'selected' : null)}}
+ {{:helper.link('Powernet (25)', data.network == 3 ? 'check' : 'plus', {'choice' : 'cable_add'}, data.network == 3 ? 'selected' : null)}}
+ {{:helper.link('None', 'close', {'choice' : 'network_rem'}, data.network == 0 ? 'redButton' : null)}}
+
+
+
+
+
+
+
+ Power Source:
+
+ {{:helper.link('Extended (175)', data.power == 1 ? 'check' : 'plus', {'choice' : 'high_add'}, data.power == 1 ? 'selected' : null)}}
+ {{:helper.link('Unreal (250)', data.power == 2 ? 'check' : 'plus', {'choice' : 'super_add'}, data.power == 2 ? 'selected' : null)}}
+ {{:helper.link('Default', data.power == 0 ? 'check' : 'plus', {'choice' : 'power_rem'}, data.power == 0 ? 'selected' : null)}}
+
+
+
+
+
Total:
+
{{:data.total}}
+ {{:helper.link('Vend Laptop', 'cart', {'choice' : 'vend'})}}
+
+
+{{else data.mode == 1}}
+
Cart
+
+
+
+
+
Total:
+
{{:data.total}}
+
+
+
+
Card Reader:
+ {{if data.cardreader == 1}}
+ {{:helper.link('(single) (50)', 'close', {'choice' : 'cardreader_rem'})}}
+ {{else data.cardreader == 2}}
+ {{:helper.link('(double) (125)', 'close', {'choice' : 'cardreader_rem'})}}
+ {{else}}
+
None
+ {{/if}}
+
+
+
+
Floppy Drive:
+ {{if data.floppy == 1}}
+ {{:helper.link('Added (50)', 'close', {'choice' : 'floppy_rem'})}}
+ {{else}}
+
None
+ {{/if}}
+
+
+
+
Radio Card:
+ {{if data.radionet == 1}}
+ {{:helper.link('Added (50)', 'close', {'choice' : 'radio_rem'})}}
+ {{else}}
+
None
+ {{/if}}
+
+
+
+
Camera Card:
+ {{if data.camera == 1}}
+ {{:helper.link('Added (100)', 'close', {'choice' : 'camnet_rem'})}}
+ {{else}}
+
None
+ {{/if}}
+
+
+
+
Network Card:
+ {{if data.network == 1}}
+ {{:helper.link('Area (75)', 'close', {'choice' : 'network_rem'})}}
+ {{else data.network == 2}}
+ {{:helper.link('Adjacent (50)', 'close', {'choice' : 'network_rem'})}}
+ {{else data.network == 3}}
+ {{:helper.link('Powernet (25)', 'close', {'choice' : 'network_rem'})}}
+ {{else}}
+
None
+ {{/if}}
+
+
+
+
Power Source:
+ {{if data.power == 1}}
+ {{:helper.link('Unreal (250)', 'close', {'choice' : 'power_rem'})}}
+ {{else data.power == 2}}
+ {{:helper.link('Extended (175)', 'close', {'choice' : 'power_rem'})}}
+ {{else}}
+
Regular
+ {{/if}}
+
+
+
+
+
+
Please swipe your card and enter your PIN to complete the transaction
+
+
+
+
+ {{:helper.link('Cancel', 'close', {'choice' : 'cancel'}, null, 'redButton')}}
+
+{{else data.mode == 2}}
+
+ Please swipe your card and enter your PIN to finish returning your computer.
+
+
+
+ {{:helper.link('Cancel', 'close', {'choice' : 'cancel'}, null, 'redButton')}}
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/operating.tmpl b/nano/templates/operating.tmpl
new file mode 100644
index 0000000000..c53bd94c65
--- /dev/null
+++ b/nano/templates/operating.tmpl
@@ -0,0 +1,47 @@
+
+
+{{if data.table}}
+
Patient Information:
+ {{if data.victim}}
+
+
Name:
+
{{:data.victim.real_name}}
+
+
Age:
+
{{:data.victim.age}}
+
+
Blood Type:
+
{{:data.victim.b_type}}
+
+
+
+
Health:
+
{{:data.victim.health}}
+
+
Brute Damage:
+
{{:data.victim.brute}}
+
+
Toxins Damage:
+
{{:data.victim.tox}}
+
+
Fire Damage:
+
{{:data.victim.burn}}
+
+
Suffocation Damage:
+
{{:data.victim.oxy}}
+
+
Patient Status:
+
{{:data.victim.stat}}
+
+
Heartbeat Rate:
+
{{:data.victim.pulse}}
+
+ {{else}}
+ No Patient Detected
+ {{/if}}
+{{else}}
+ No Table Detected
+{{/if}}
diff --git a/nano/templates/photocopier.tmpl b/nano/templates/photocopier.tmpl
new file mode 100644
index 0000000000..9c9910e969
--- /dev/null
+++ b/nano/templates/photocopier.tmpl
@@ -0,0 +1,47 @@
+
+
+{{if data.copyItem}}
+
+ {{:helper.link('Remove Item', 'eject', {'remove' : 1})}}
+ {{if data.toner}}
+ {{:helper.link('Copy', 'copy', {'copy' : 1})}}
+
+
+
+ Printing:
+
+
+
+ {{:helper.link('-', null, {'min' : 1}, data.copies == 1 ? 'linkOff' : null)}}
+
{{:data.copies}}
+ {{:helper.link('+', null, {'add' : 1}, data.copies == data.maxCopies ? 'linkOff' : null)}}
+
+
+
+
+
+
Current toner level:
+
{{:data.toner}}u
+
+ {{else}}
+
+ Please insert a new toner cartridge!
+
+ {{/if}}
+{{else data.toner}}
+
Please insert something to copy.
+ {{if data.isSilicon}}
+ {{:helper.link('Print photo from database', 'image', {'aipic' : 1})}}
+ {{/if}}
+
+
Current toner level:
+
{{:data.toner}}u
+
+{{else}}
+
+ Please insert a new toner cartridge!
+
+{{/if}}
\ No newline at end of file
diff --git a/polaris.dme b/polaris.dme
index 27a1f3a715..f8b2503635 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -900,6 +900,7 @@
#include "code\game\turfs\simulated\wall_icon.dm"
#include "code\game\turfs\simulated\wall_types.dm"
#include "code\game\turfs\simulated\walls.dm"
+#include "code\game\turfs\snow\snow.dm"
#include "code\game\turfs\space\space.dm"
#include "code\game\turfs\space\transit.dm"
#include "code\game\turfs\unsimulated\beach.dm"