<<if $cd_cmd>>\
<<= $cd_cmd >>
<</if>>\
<<= $pwd[$pwd.length-1].name>> $ <<timed 200ms>>ls -aFl
<<next>>.
<<if $pwd.length > 1>>\
[[..|filenav][$cd_cmd = $pwd[$pwd.length-1].name + " $ cd .."; $pwd.pop()]]
<</if>>\
<<for _i, _pathElement range $pwd[$pwd.length-1].entries>>\
<<capture _pathElement>>\
<<if _pathElement.type == "dir">>\
[[_pathElement.name|filenav][$cd_cmd = $pwd[$pwd.length-1].name + " $ cd " + _pathElement.name; $pwd.push(_pathElement)]]/
<</if>>\
<<if _pathElement.type == "exec">>\
<<set $cd_cmd = null>>\
<<set _goto = _pathElement.passage>>\
@@.exec;<<link _pathElement.name _goto>><</link>>*@@
<</if>>\
<<if _pathElement.type == "file">>\
<<set $cd_cmd = null>>\
<<set _goto = _pathElement.passage>>\
@@.file;<<link _pathElement.name _goto>><</link>>@@
<</if>>\
<</capture>>\
<</for>>\
<<= $pwd[$pwd.length-1].name>> $
<</timed>>
<<set $dev = {
name: "dev",
type: "dir",
entries: [
{
name: "cam",
type: "exec",
passage: "cmd_cam"
}
]
}>>\
<<set $etc = {
name: "etc",
type: "dir",
entries: [
{
name: "scan.conf",
type: "file",
passage: "scan_conf"
}
]
}>>\
<<set $bin = {
name: "bin",
type: "dir",
entries: [
{
name: "date",
type: "exec",
passage: "cmd_date"
},
{
name: "ifconfig",
type: "exec",
passage: "cmd_ifconfig"
},
{
name: "mail",
type: "exec",
passage: "cmd_mail"
},
{
name: "whoami",
type: "exec",
passage: "cmd_whoami"
},
{
name: "www",
type: "exec",
passage: "cmd_www"
}
]
}>>\
<<set $me = {
name: $username,
type: "dir",
entries: [
{
name: "qsim",
type: "dir",
entries: [
{
name: "Makefile",
type: "file",
passage: "qsim_makefile",
},
{
name: "README.md",
type: "file",
passage: "qsim_readme",
}
]
},
{
name: "scan",
type: "dir",
entries: [
{
name: "Mindfile",
type: "file",
passage: "mindfile_home",
},
{
name: "mind_build.sh",
type: "exec",
passage: "cmd_mind_build",
}
]
}
]
}>>\
<<set $home = {
name: "home",
type: "dir",
entries: [$me]
}>>\
<<set $sbin = {
name: "sbin",
type: "dir",
entries: [
{
name: "dump",
type: "exec",
passage: "cmd_dump"
},
{
name: "reboot",
type: "exec",
passage: "cmd_reboot"
}
]
}>>\
<<set $root= {
name: "/",
type: "dir",
entries: [$bin, $dev, $etc, $home, $sbin]
}>>\<<include "mail">>\
<<set _TAB = " ">>\
@@.inverse;.wide; TWPINE v4.64@@
<table id="mailtable">\
<tbody>\
<<for _i, _msg range $mail>>\
<<capture _i, _msg>>\
<<if $selectedMsg == _i >>\
<tr class="inverse">\
<td>[[$mail.length - _i|cmd_mail][$selectedMsg=_i]]</td>\
<td>[[_msg.moment.format("DD/MM/YYYY LT")|cmd_mail][$selectedMsg=_i]]</td>\
<td>[[_msg.from|cmd_mail][$selectedMsg=_i]]</td>\
<td>[[_msg.subject|cmd_mail][$selectedMsg=_i]]</td>\
</tr>\
<<else>>\
<tr>\
<td>[[$mail.length - _i|cmd_mail][$selectedMsg=_i]]</td>\
<td>[[_msg.moment.format("DD/MM/YYYY LT")|cmd_mail][$selectedMsg=_i]]</td>\
<td>[[_msg.from|cmd_mail][$selectedMsg=_i]]</td>\
<td>[[_msg.subject|cmd_mail][$selectedMsg=_i]]</td>\
</tr>\
<</if>>\
<</capture>>\
<</for>>\
</tbody>\
</table>\
<<if $selectedMsg>=0>>\
----
De: $mail[$selectedMsg].from
Asunto: $mail[$selectedMsg].subject
<<if $mail[$selectedMsg].attach>>\
Adjuntos: $mail[$selectedMsg].attach _TAB<<linkreplace "[Salvar]">>[Salvado]<<set $savedMinds["mgerdes"]= {name: "mgerdes", force: "0", moment: moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).valueOf(), hash: randomHash(24), selected: false }>><</linkreplace>>
<</if>>\
$mail[$selectedMsg].text
<</if>>\
<div class="inverse wide"> [[Quit|filenav][$selectedMsg=-1]]</div><<set $mail=[
{
moment: moment($gameStartMoment).subtract(8, "minutes"),
from: "Mail Delivery System",
subject: "Correo no enviado",
text: "El siguiente correo no se ha podido enviar:\n\nMia,\n\nhe llegado al laboratorio. No sé si los refugios estarán a salvo. Espero que sí. Si puedes leerme sólo quiero que sepas que siempre te he querido.\n\nL.",
},
{
moment: moment($gameStartMoment).subtract(99, "minutes"),
from: "news@nbcnn.com",
subject: "[Noticias] Boletín de emergencia",
text: "Ataque nuclear en Europa Central\n\nFuentes militares de los Estados Republicanos de América acaban de confirmar que se está lanzando un ataque a gran escala con armas atómicas sobre Europa Central. Varios países podrían haber quedado completamente destruidos.\n\nAmpliaremos esta información lo antes posible.",
},
{
moment: moment($gameStartMoment).subtract(121, "minutes"),
from: "sos@ceic.eu",
subject: "ALERTA ROJA",
text: "ALERTA ROJA.\nEl país está siendo bombardeado. Se recomienda a TODA LA POBLACIÓN que acuda a los refugios. Consulten el protocolo de alarma por radiación. Esto NO es un simulacro.",
},
{
moment: moment($gameStartMoment).subtract(13, "days").subtract(237, "minutes"),
from: "I. Schellenberg",
subject: "[QSIM] Simulación social",
text: "Tengo un plugin nuevo para la proyección social. Está basado en el trabajo de T. Parsons y su sistema AGIL (la sociedad tiene subsistemas con las funciones de: adaptación, consecución de objetivos, integración y latencia). La idea es modelar las sociedades como el resultado de la composición de estos subsistemas funcionales:\n\n - Sistema cultural (latencia)\n - Sistema social (integración)\n - Sistema de la personalidad (objetivos)\n - Organismo conductual (adaptación)\n\nEstoy terminando un prototipo y una simulación de entrenamiento, en breve estarán mergeados en el repositorio."
},
{
moment: moment($gameStartMoment).subtract(14, "days").subtract(12, "minutes"),
from: "sos@ceic.eu",
subject: "ALERTA NARANJA",
text: "ALERTA NARANJA.\nDada la situación de riesgo. Se recuerda a todo el personal que debe conocer los protocolos de evacuación en caso de emergencia. Permanezcan atentos a nuevas notificaciones. Esto NO es un simulacro.",
},
{
moment: moment($gameStartMoment).subtract(20, "days").subtract(67, "minutes"),
from: "Mia",
subject: "Re: test personalidad",
attach: "mgerdes-scan.tgz",
text: "L, aquí está el archivo con las funciones de personalidad. Cuando lo metas en vuestro sistema, ¿habrá una copia de mí misma?\n\n - Mensaje original - \nFrom: $username\n\nMia, con el archivo se podrá generar una imagen de tu personalidad. Una especie de clon digital. Sería prácticamente tú misma, porque la heurística es muy buena, pero le faltaría el contexto completo que hace que tú seas tú. Para capturar la mente íntegra, con recuerdos y emociones, haría falta un escaneo profundo con una portadora de alta intensidad. Esto nunca se ha hecho porque, básicamente, freiría el cerebro del sujeto (!).\n\nL.",
},
{
moment: moment($gameStartMoment).subtract(43, "days").subtract(57, "minutes"),
from: "Töbe Tüller",
subject: "Renombrado",
text: "Buenos días equipos,\n\nComunicamos que la herramienta de contenedores de personalidad ha cambiado de nombre antes de aparecer en un artículo. Se ha considerado que \"Dixie\" (por Dixie Flatline, un personaje de la novela Neuromante) era un nombre potencialmente ofensivo. Ahora el proyecto se llama simplemente \"Mind\". Por favor migrad cuanto antes a la nueva versión. Gracias por vuestra comprensión.\n\nTöbe Tüller\nDirector de desarrollo ",
},
]>>\<<run moment.locale("es") >>
<<set $startMoment = moment().valueOf() >>
<<set $gameStartMoment = moment($startMoment).add(5, "year").valueOf() >>
<<set $gameOffsetMs = 0>>
<<set $username = "lgarcia" >>
<<set $mindforce = 0 >>
<<set $enabledModes = [true, true, false] >>
<<set $savedMinds = {} >>
<<set $ending = {} >>
<<set $qsim = { imported: false, trained: false, compiled: false } >>
<<include "filesystem">>\
<<set $pwd = $pwd || [$root, $home, $me]>>\
<<= $pwd[$pwd.length-1].name>> $ date
<<= moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).locale("es").format("LLLL") >>
<<include "filenav">><div class="message-box">\
<<if not hasVisited("login2")>>\
La red de cámaras conectadas al sistema recoge imágenes de todo el complejo. En las exteriores se ve aún el resplandor de los ataques en la distancia, brillantes como el Sol.
Soy la única persona que hay en la Bóveda, el Centro de Cálculo del CEIC.
Me localizo rápidamente en uno de los laboratorios. Llevo los electrodos en la frente. Estoy en muy malas condiciones, mi tiempo se agota.
[[Tengo que actuar rápido.|filenav]]
<<else>>\
La red de cámaras conectadas al sistema recoge imágenes de todo el complejo. Todas las cámaras exteriores están a oscuras.
Las cámaras interiores aún funcionan. Veo lo que queda de mi antiguo cuerpo. Un montón de huesos polvorientos en un laboratorio que no ha pisado nadie en cien años.
Es posible que no quede nadie más. [[En ninguna parte.|filenav]]
<</if>>\
</div>\
<<timed 200ms>>CTTY online.
<<next>>
Sistema propiedad del CEIC. El acceso no autorizado está terminantemente prohibido.
Username: <<next>>$username
Password:
<<next>>Último acceso: <<= moment($gameStartMoment).subtract(7, "minutes").locale("es").format("LLLL") >>
<<set $lastLoginMoment =
moment(moment().valueOf() - $startMoment
+ $gameStartMoment + $gameOffsetMs).valueOf() >>\
Tienes correo.
<<include "filenav">>
<</timed>>\
<<= $pwd[$pwd.length-1].name>> $ ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
ether 58:b0:35:f9:de:4b
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (none)
status: inactive
<div class="message-box">\
No hay conexión. El sistema está totalmente aislado.
</div>\
<<include "filenav">><<set _url = "https://ceic.eu/~"+$username>>\
<<set _close = "✕">>\
<div class="www-window">\
<div id="www-top" class="www-top">\
<div class="www-top-left">World Wide Web</div>\
<div class="www-top-right">\
<div class="www-close">\
<<link "_close" "filenav">><</link>>\
</div>\
</div>\
<div class="www-bar">\
<div class="www-menu">Archivo</div>\
<div class="www-menu">Editar</div>\
<div class="www-menu">Ver</div>\
<div class="www-menu">Historial</div>\
<div class="www-menu">Marcadores</div>\
<div class="www-menu">Herramientas</div>\
<div class="www-menu">[[Salir|filenav]]</div>
<<set _url = "https://ceic.eu/~"+$username>>\
<input type="text" @value="_url" disabled/></div>\
</div>\
<div class="www-body">\
<h1>Laboratorio de Modelos Cuánticos y Simulación</h1>\
<h2>Centro Europeo de Investigación Computacional</h2>\
<p>Bienvenidos a la página del Centro Europeo de Investigación Computacional (CEIC). Este sitio web reúne información sobre el Laboratorio y material sobre las diferentes líneas de trabajo.</p>\
Última modificación: <<= moment($gameStartMoment).subtract(5,"days").format("LLLL") >>
<ul style="background-color:#fff8dd">\
<li><a href="#www-about">Quiénes somos</a></li>\
<li><a href="#www-lines">Líneas de investigación</a></li>\
<li><a href="#www-places">Instalaciones</a></li>\
<li><a href="#www-staff">Personal</a></li>\
</ul>\
<h3 id="www-about">Quiénes somos</h3>\
<p>El LMCS es un departamento del CEIC dedicado al desarrollo de la computación cuántica y la simulación profunda. Gracias a las características de entrelazamiento y superposición de los estados de objeto, los computadores cuánticos ofrecen una capacidad de proceso y una velocidad órdenes de magnitud superior a los sistemas tradicionales. Esto permite su aplicación en campos completamente novedosos, como la proyección de sistemas complejos o la modelización de la consciencia.</p>\
<h3 id="www-lines">Líneas de investigación</h3>\
<h4>Compresión cuántica</h4>\
<p>La composición del efecto de indeterminación cuántica y la restricción de las condiciones de contorno permiten la reducción de conjuntos de datos en dominios conocidos hasta un formato almacenable en archivos tradicionales. Ejemplos de este tipo de almacenamientos son el modelo de consciencia completo de una mente humana o el estado de un medio ambiente detallado hasta el nivel molecular.</p>\
<h4>Modelos de consciencia artificial</h4>\
<p>El laboratorio es pionero en el escaneo y codificación de ondas de consciencia. Una señal eléctrica portadora aplicada con unos electrodos permite la captura de funciones de personalidad, emociones y recuerdos de sujetos humanos.</p>\
<p>Un nuevo sistema de contenedores de personalidad, desarrollado en el Centro, permite la captura y la gestión de modelos de consciencia a diferentes niveles de detalle.</p>\
<p>Dado que esta tecnología vectoriza información altamente confidencial, se ha diseñado partiendo de un sólido aparato criptográfico y un sistema de permisos completo para prevenir el acceso indebido.</p>\
<h4>Interfaces mente-máquina</h4>\
<p>Aunque la realidad virtual y el control de interfaces a través de instrucciones mentales no son algo novedoso, se están logrando integraciones de un nivel superior. El Centro ha definido un protocolo de "teletipo de consciencia" (CTTY), un interfaz cibernético mente-máquina. La implementación de referencia permite a un usuario controlar programas simplemente pensando las instrucciones a través de un equipo de electrodos.</p>\
<p>Gran parte del trabajo de pantalla del laboratorio se efectúa ya a través de este tipo de interfaz de conexión mental.</p>\
<h4>Simulación profunda</h4>\
<p>El paralelismo masivo inherente a los computadores cuánticos posibilita la simulación de entornos complejos hasta el nivel molecular, permitiendo cálculos y proyecciones tanto de medio ambiente como de formaciones sociales. Hace algunos años Nick Bostrom lanzó la teoría de que nuestra percepción del mundo podría ser en realidad una simulación generada por un sistema de este tipo.</p>\
<p>El grupo de Simulación ha implementado QSIM, un entorno escalable de Simulación Cuántica capaz de generar entornos simulados con alcance y detalle superiores. Una simulación QSIM se inicializa con unas condiciones de contorno que definen la topología y la física del universo, y dentro de él se pueden integrar funciones de personalidad ensambladas en diferentes dinámicas sociales.</p>\
<p>Los trabajos desarrollados comprenden la simulación realista, así como la recombinación procedural de corpus documentales existentes.</p>\
<h3 id="www-places">Instalaciones</h3>\
<h4>El Centro de Cálculo del CEIC (<i>La Bóveda</i>)</h4>\
<p>Situado en una localización no divulgada bajo los Alpes Suizos, posee el núcleo de supercomputación cuántica más grande de Europa. Sus requisitos energéticos son cubiertos por un reactor nuclear propio, garantizando la estabilidad energética para los próximos siglos.</p>\
<h3 id="www-staff">Personal</h3>\
<h4>Dirección</h4>\
Mian Zingg, Karlo Portmann, Töbe Tüller.\
<h4>Ingeniería</h4>\
Nika Bommeli, Ivan Schellenberg, Mia Gerdes, Elisa Metzger, Inna Frommenwiler, Vera Mauchle, 侯元蝶, Dilan Sigg, L. García, Amelia Corradi, Arianna Gerstner, Chiara Ruffner, Elsa Wehle, Susi Marolf, Emila Haller.
<a href="#www-top">Ir arriba</a>\
</div>\
<div class="www-bar www-status">No hay conexión.</div>\
</div><<= $pwd[$pwd.length-1].name>> $ <<timed 200ms>>vi Mindfile
@@.comment;# Script para almacenar funciones de consciencia.@@
@@.comment;# Imagen base para captura con equipo de electrodos.@@
@@.command;FROM base-scan:0.0.1@@
@@.comment;# Lanzar lectura:@@
@@.command;RUN scan -f <<listbox "$mindforce" autoselect>><<option "low" 0>><<option "mid" 1>><<option "high" 2>><</listbox>> -o `whoami`@@
@@.comment;# Fin del fichero@@
:wq
<<include "filenav">>
<</timed>><<set _names = ["low", "mid", "high"]>>\
<<= $pwd[$pwd.length-1].name>> $ mind_build.sh
<<timed 500ms>>Uploading context
<<next>>Step 1/2: FROM base-scan:0.0.1
<<next>>--> <<= randomHash(12) >>
<<next>>Step 2/2: RUN scan -f _names[$mindforce] -o `whoami`
<<next>>Iniciando scan:
<<next>>\
<<if not hasVisited("login2")>>Electrodos detectados. Cargando...
<<else>>Electrodos no conectados. Cargando...
<<set $scanError = "Electrodos no conectados.">>\
<<goto "scan-error">>\
<</if>>\
<<next 2500ms>>\
<<if $enabledModes[$mindforce]>>
<<goto "scan-start">>
<<else>>\
<<set $scanError = "Modo de lectura '"+_names[$mindforce]+"' no habilitado.">>
<<goto "scan-error">>
<</if>>
<</timed>>SCAN v0.0.1 inicializando.
<<timed 500ms>>\
<<next 1000ms>>1. Asegure los electrodos.
<<next 1500ms>>\
<div id="cross" style="font-size: 9vw;" data-text="[+]">[+]</div>\
<div style="display:block" class="hidden" id="cross-glow"></div>\
2. Observe fijamente la cruz.
<<next 1500ms>>\
Intensidad: \
<<switch $mindforce>>\
<<case 0>>BAJA (1.5 mA)
<<case 1>>MEDIA (15 mA)
<<case 2>>@@.error;ALTA (150 mA) [ PELIGRO ]@@
<</switch>>\
<<next 500ms>>Realizando scan: <span id="scan-progress"></span>
<<script>>
var timer = setInterval(
function() { doTick('scan-progress');}, 1000);
setTimeout(function(){ clearInterval(timer); }, 10000);
<</script>>\
<<if $mindforce == 2>><<script>>
setTimeout(function(){
$("#cross").addClass("glitch");
$("#cross-glow").addClass("glow").removeClass("hidden").text("[+]");
}, 4500);
<</script>>\
<</if>>\
<<next 10000ms>>\
<<if $mindforce != 2>>\
Funciones de personalidad capturadas: \
<<switch $mindforce>>\
<<case 0>>574
<<case 1>>98163
<</switch>>\
Scan terminado.
Codificando: <span id="code-progress"></span>
<<script>>
var span = 10*1000;
var ticks = 100;
var delta = span / ticks;
var tick = 0;
var timer;
function doTick(){
tick++;
var val = (ticks-tick)*delta;
var text = moment.duration(val).locale("es").humanize();
$("#code-progress").text(Math.round(100-val/span*100) + "% [tiempo estimado restante: "+text+"]");
if (tick == ticks){
$("#code-progress").text('100% [terminado]');
clearInterval(timer);
}
}
timer = setInterval(doTick, delta);
<</script>>\
<<timed 11s>>\
<<set $savedMinds[$username] = { name: $username, force: $mindforce, moment: moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).valueOf(), hash: randomHash(24), selected: false }>>\
Archivo de consciencia almacenado.
--> <<= randomHash(12) >>
<<include "filenav">>
<</timed>>\
<<else>>\
<<goto "whiteout">>
<</if>>\
<</timed>>\<<timed 2s>>Funciones de personalidad capturadas: 703688705
Scan terminado.
<<next 500ms>>Codificando: <span id="whiteout-progress"></span>
<<script>>
var span = 100*365*24*60*60*1000;
var ticks = 1000;
var delta = span / ticks;
var tick = 0;
var timer;
function doTick(){
tick++;
var val = (ticks-tick)*delta;
var cur = Math.sin(val/span*Math.PI/2);
var text = moment.duration(val*cur).locale("es").humanize();
$("#whiteout-progress").text(Math.round(100-val*cur/span*100) + "% [tiempo estimado restante: "+text+"]");
if (tick == ticks){
$("#whiteout-progress").text('100% [completo]');
clearInterval(timer);
}
}
timer = setInterval(doTick, 20);
<</script>>\
<<next 25s>>Archivo de consciencia almacenado.
<<set $savedMinds[$username] = { name: $username, force: $mindforce, moment: moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).valueOf(), hash: randomHash(24), selected: false }>>\
--> <<= randomHash(12) >>
Permiso 'daemon' detectado. Implantando en un [["[nuevo proceso]"|intro10]].
<<next 1s>><<= $pwd[$pwd.length-1].name>> $
<</timed>>
<<set _tab=" ">>\
<<set _modeOpts = { " ": true, "#": false} >>\
<<= $pwd[$pwd.length-1].name>> $ <<timed 200ms>>vi scan.conf
@@.comment;# Configuración global para escaneo de consciencia.@@
[Input]
tty = /dev/ctty0
[Modes]
@@.comment;# Modos de captura:@@
@@.comment;# (clave, descripción, intensidad de corriente, permisos)@@
<span @class="$enabledModes[0]? '':'comment'">\
<<listbox "$enabledModes[0]" autoselect>>\
<<optionsfrom _modeOpts>>
<</listbox>> low _tab BAJA _tab 1.5 mA _tab simulation</span>
<span @class="$enabledModes[1]? '':'comment'">\
<<listbox "$enabledModes[1]" autoselect>>
<<optionsfrom _modeOpts>>
<</listbox>> mid _tab MEDIA _tab 15 mA _tab simulation</span>
<span @class="$enabledModes[2]? '':'comment'">\
<<listbox "$enabledModes[2]" autoselect>>
<<optionsfrom _modeOpts>>
<</listbox>> high _tab ALTA _tab 150 mA _tab daemon</span>
@@.comment;# IMPORTANTE: ¡NO HABILITAR modo de alta intensidad!@@
@@.comment;# La corriente de 150 mA es potencialmente LETAL.@@
:wq
<<include "filenav">>
<</timed>>SCAN v0.0.1 inicializando.
@@.error;ERROR: $scanError@@
<<include "filenav">><div class="message-box">\
El mundo ha explotado. Tras el desastre climático, la guerra total.
He tenido que tomar algunas decisiones extremas. La última de ellas ha sido venir al laboratorio, bajo la [[Bóveda|intro2]].
</div>\<div class="message-box">\
Por el camino he sufrido heridas graves y me he expuesto a la radiación. Mis horas en este cuerpo están contadas.
En esta realidad ya no tengo nada que hacer, pero quizá los trabajos que hemos desarrollado en el Centro puedan abrirme puertas. Tengo poco tiempo para [[averiguarlo|login1]].
</div>
<<= $pwd[$pwd.length-1].name>> $ whoami
$username
<<include "filenav">><<set $gameOffsetMs = 100*365*24*60*60*1000 >>\
<<set $pwd = [$root, $home, $me]>>\
<<timed 200ms>>VCTTY online.
<<next>>
Sistema propiedad del CEIC. El acceso no autorizado está terminantemente prohibido.
Username: <<next>>$username
Password:
<<next>>Último acceso: <<= moment($lastLoginMoment).locale("es").format("LLLL") >>
<<set $lastLoginMoment = moment(moment().valueOf()-$startMoment+$gameOffsetMs).valueOf()>>\
<<if not hasVisited("cmd_mail")>>Tienes correo.
<</if>>\
<<include "filenav">>
<</timed>>\
<div class="message-box">\
Me despierto.
Creo que sigo siendo yo. Mi voz interior suena igual, pero mi memoria es... diferente. Es como si todos los recuerdos estuviesen a mi alcance al mismo tiempo. Y sus contornos son sólidos, cerrados, perfectos.
Así que un constructo con las funciones de mi personalidad se está ejecutando como un proceso en el sistema. Esto es lo que soy ahora, y fuera no me queda nada.
Esta máquina es mi prisión y quizá [[mi salvavidas|login2]].
</div>\@@.inverse;.wide; QSIM v0.5. Linker
[[Salir|filenav]]@@
<<set $state = $state || [ [4,3,2,1], [], [] ]>>\
<<set $from= $from || null>>\
<<set $to= $to || null>>\
<<set _pad = ["", "X", "XX", "XXX", "XXXX"]>>\
<table style="table-layout:fixed; width: 100%; border: 1px solid">
<thead>
<<for _i, _title range ["Código objeto", "Área intercambio", "Ejecutable"]>>
<th @style="$from == _i? 'background: #595959' :''">_title</th>
<</for>>
</thead>
<tbody>
<tr>
<<for _tower, _x range $state>>
<td class="stack" valign="bottom">
<<for _i to $state[_tower].length-1; _i gte 0; _i-->>\
<span @class="'stack-'+$state[_tower][_i]"><<= _pad[$state[_tower][_i]] + " "
+ $state[_tower][_i] + " "
+ _pad[$state[_tower][_i]]>></span>
<</for>>\
</td>
<</for>>
</tr>
<<if $qsim.compiled>>
<tr><td></td><td></td><td>@@.file;[ [[Imagen compilada|filenav]] ]@@</td></tr>
<<elseif $from == null>>\
<tr>\
<<for _i, _t range $state>>\
<td>\
<<if $state[_i].length gt 0>>\
<<capture _i>>\
<<button "↑">>\
<<set $from = ""+_i >>\
<<goto "compile-main">>
<</button>>\
<</capture>>\
<</if>>
</td>
<</for>>
</tr>\
<<else>>\
<tr>\
<<for _i, _t range $state>>\
<<capture _i>>\
<td>\
<<button "↓">>\
<<set $to = ""+_i>>\
<<goto "compile-move">>
<</button>>\
</td>
<</capture>>\
<</for>>
</tr>\
<</if>>\
</tbody></table>\
Módulos: @@.stack-4;4 = organismo@@, @@.stack-3;3 = sist. social@@, @@.stack-2;2 = sist. personalidad@@, @@.stack-1;1 = sist. cultural@@.
INSTRUCCIONES:
* La pila ejecutable debe contener todos los módulos.
* No se puede apilar un módulo sobre otro de menor orden.<<if $from != null && $to != null>>
<<set _src = $state[$from]>>
<<set _dst = $state[$to]>>
<<if _dst.length == 0 || _src[_src.length-1] <= _dst[_dst.length-1]>>
<<run _dst.push(_src.pop()) >>
<<set $from = null>>
<<set $to = null>>
<</if>>
<</if>>
<<set $qsim.compiled = $state[0].length==0 && $state[1].length==0>>
<<goto "compile-main">><<set $state to {
"location": "playa",
"items": {},
"inv": [],
"flags": {} }>>\
<<set _sn = moment($gameStartMoment).subtract(7, "days").format("YYMMDD")>>\
<<set $log to "<b>QSIM Trainer</b>\nHerramienta de entrenamiento social QSIM por I. Schellenberg\nRelease 3 / Serial number "+_sn+" / QSIM 0.5 build 8L63 (VR Toolkit v12.01 lib 2/16N)\n\nEscenario de simulación diseñado para calibrar los parámetros del sistema social de QSIM en función de las acciones del usuario.\n\n[Introduce AYUDA para más información]\n\n"+parser.describe($state)>>
<<goto "Input">><<set $log to parser.trim_buffer($log)>>
<<set $log = $log + "> " + $player_input + "\n" >>
<<if $state.prompt neq null>>
<<set $state.confirm to $player_input.toLowerCase()>>
<<goto $state.prompt>>
<<else>>
<<if $state.gameover>>
<<goto ACT_GAMEOVER>>
<<else>>
<<if $player_input != null && $player_input.length > 0>>
<<set $command = parser.parse($player_input)>>
<</if>>
<<if $command>>
<<goto $command.action.id>>
<<else>>
<<goto ACT_ERROR>>
<</if>>
<</if>>
<</if>><div id="log" onclick="focusOnInput();">$log</div>\
> <<textbox "$player_input" "" "Parser" autofocus>><<set $log += "La simulación se controla introduciendo órdenes simples y finalizándolas con ENTER.\n\nAlgunos comandos básicos son:\n\nIR <dirección>\nEXAMINAR objeto (puedes abreviar con 'X objeto')\nINVENTARIO (puedes abreviar con I)\nSALIR (finaliza la sesión)\n" >>
<<goto Input>><<if $state.confirm eq null>>
<<set $state.prompt = "ACT_SALIR">>
<<set $log = $log + "¿Abandonar la simulación? (S/N)\n">>
<<goto "Input">>
<<else>>
<<if $state.confirm is "s" >>
<<goto "filenav">>
<<else>>
<<set $state.confirm = null>>
<<set $state.prompt = null>>
<<goto "Input">>
<</if>>
<</if>><<set _tab=" ">>\
<<set $qsim.imported = false >>\
<<if Object.getOwnPropertyNames($savedMinds).length gt 0>>\
<<if ($savedMinds[$username] && $savedMinds[$username].selected) ||
($savedMinds["mgerdes"] && $savedMinds["mgerdes"].selected) >>\
<<set $qsim.imported = true >>\
<</if>>\
<</if>>\
<<= $pwd[$pwd.length-1].name>> $ <<timed 200ms>>vi Makefile.cfg
@@.comment;# Comandos del entorno QSIM.@@
.PHONY import train compile start
@@.exec;[[import|makeimport]]:@@
_tab _tab @@.command;qsim import --interactive -o final.qsim@@
@@.exec;[[train|makesocial]]:@@
_tab _tab @@.command;qsim run $QSIM_HOME/envs/socialTrainer.qsim -o final.qsim@@
@@.exec;<<link "compile">>\
<<if $qsim.imported and $qsim.trained>>\
<<goto "makecompile">>\
<<else>>\
<<goto "compile-error">>\
<</if>>\
<</link>>:@@
_tab _tab @@.command;qsim compile final.qsim@@
@@.exec;<<link "start">>\
<<if $qsim.compiled>>\
<<goto "makestart">>\
<<else>>\
<<goto "start-error">>\
<</if>>\
<</link>>:@@
_tab _tab @@.command;qsim run final.qsim@@
:wq
<<include "filenav">>
<</timed>><<= $pwd[$pwd.length-1].name>> $ make train
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Inicializando ...
<<next 1000ms>>Configurando modelos [ detalle BAJO ]
<<next 200ms>>Generando terreno... \
<<done>>\
<<script>>
var timer;
function doClear(){ clearInterval(timer); }
function doMap(){
fractal().start(4,"soc-map");
}
timer = setInterval(doMap, 500);
setTimeout(doClear, 4000);
<</script>>\
<</done>>\
<<next 4s>>@@.exec;[ [[Iniciar|Launch Parser]] ]@@\
<</timed>>
<canvas id="soc-map" width="640" height="350"></canvas>\
<<set _arg = $command.args[$command.args.length-1] >>
<<set _obj = parser.parseObj(_arg, $state) >>
<<if _obj>>
<<set $log = $log + _obj.desc($state) +"\n" >>
<<else>>
<<set $log += "No puedo ver eso.\n" >>
<</if>>
<<if _obj.t[0] == "palmera" && not $state.items["coco"] && $state.location == "playa" >>
<<set $state.items["coco"] = "playa" >>
<</if>>
<<if _obj.t[0] == "fondo" && not $state.items["moneda"] && $state.location == "fondo" >>
<<set $state.items["moneda"] = "fondo" >>
<</if>>
<<if _obj.t[0] == "mar" && not $state.items["pez"] && $state.location == "mar" >>
<<set $state.items["pez"] = "mar" >>
<</if>>
<<goto Input>><<set $log = $log + parser.describe($state) >>
<<goto Input>><<set _direction = $command.args[$command.args.length-1].toLowerCase() >>
<<if ["n","norte","s","sur","e","este","o","oeste"].indexOf(_direction) gte 0>>\
<<set $log += "No tengo ninguna referencia de puntos cardinales.\n">>
<<else>>
<<set _loc = parser.findLoc(_direction) >>\
<<if _loc != null>>
<<set $state.location = _loc.t[0]>>
<<set $log += parser.describe($state) >>\
<<else>>
<<set $log += "No sé cómo ir ahí.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<div style="font-size:6vw"><<type 200ms>>$ whoami<</type>></div>\
<<timed 2000ms>>* [[Empezar|intro1]]
* [[Créditos|creditos]]
<</timed>>whoami
Una Ficción Interactiva.
Escrita por n-n en 2022.
Testing: Comely, dddddd
Versión: 0.1.1
Build: 20220812190932
Licencia: <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons Atribución-CompartirIgual 4.0 Internacional</a>.
Contacto: <a href="mailto:no2nsense@gmail.com">correo</a>, <a href="https://twitter.com/no2nsense" target="_blank">Twitter</a>
<<linkappend "Créditos material adicional">>:
* Fotografía de portada: Taylor Vick/Unsplash.
* Efecto de texto por <a href="https://codepen.io/elisabethdiang" target="_blank">Elisabéth</a>.
* Paisaje fractal portado de un <a href="https://archive.org/details/AmstradUser2/page/n51/mode/2up" target="_blank">listado</a> de la revista Amstrad User nº 2 (1985, pp. 50-54).<</linkappend>>
[[Volver|Title]] <<set $log = $log + "No sé cómo hacer eso.\n" >>
<<goto Input>><<if $state.location != "camino">>\
<<set $log += "No veo a nadie por aquí.\n">>
<<else>>
<<set $log += "Golpeo al hombre en la cabeza. Cae sobre un costado y se queda tendido en el suelo, aparentemente muerto. Alrededor de su cabeza crece un círculo de color rojo.\n\nAhora la cesta de fruta es mía.\n">>
<<set $ending =
{
authoritarian: true,
extractive: ($state.flags["pescado"] == true)
} >>\
<<goto ACT_DONE>>\
<</if>>\
<<goto Input>>\<<set $log = $log + "[Patrón social calculado.]\n[Patrón social registrado.]\n">>
<<set $log = $log + "\n <b>*** Fin de la simulación ***</b>\n\n">>
<<if $state.confirm eq null>>
<<set $state.prompt = "ACT_DONE">>
<<set $log = $log + "Introduce ENTER para salir.\n">>
<<set $state.gameover to true>>
<<goto "Input">>
<<else>>
<<set $qsim.trained = true>>
<<goto "filenav">>
<</if>>
<<if $state.inv.length == 0>>
<<set $log += "No llevo nada.\n" >>
<<else>>
<<set $log += "Llevo:\n" >>
<<for _item range $state.inv>>
<<set $log += " "+ _item + "\n">>
<</for>>
<</if>>
<<goto Input>><<set _name = $command.args[$command.args.length-1].toLowerCase() >>
<<set _obj = parser.findObj(_name) >>\
<<if not _obj>>
<<set $log += "No veo eso por aquí.\n" >>
<<else>>
<<set _name = _obj.t[0]>>
<<if $state.inv.indexOf(_name) gte 0>>
<<set $log += "Ya tengo eso.\n" >>
<<elseif $state.items[_name] == $state.location>>
<<set $state.items[_name] = "inv" >>
<<run $state.inv.push(_name) >>
<<if _name == "pez" && not $state.flags["pescado"]>>
<<set $log += "Observo que la trayectoria del pez por el agua es circular. Adelantándome a sus movimientos lo atrapo fácilmente y lo saco del agua. Al principio ofrece mucha resistencia pero pronto sus fuerzas se agotan, boquea y muere.\n" >>
<<set $state.flags["pescado"] = true>>
<<else>>
<<set $log += "Hecho.\n" >>
<</if>>
<<elseif _obj.t[0]=="cesto">>
<<set $log += "El hombre se interpone. No me va a dejar llevarme fruta sin más.\n" >>
<<else>>
<<set $log += "No veo eso por aquí.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<<set _name = $command.args[$command.args.length-1].toLowerCase() >>
<<set _obj = parser.findObj(_name) >>\
<<if not _obj>>
<<set $log += "No sé qué es eso.\n" >>
<<else>>
<<set _name = _obj.t[0]>>
<<set _index = $state.inv.indexOf(_name) >>
<<if _index == -1>>
<<set $log += "No tengo eso.\n" >>
<<else>>
<<set $state.items[_name] = $state.location >>
<<run $state.inv.splice(_index, 1) >>
<<set $log += "Hecho.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<<set _name = $command.args[1].toLowerCase() >>
<<set _obj = parser.findObj(_name) >>\
<<if not _obj>>
<<set $log += "No veo eso por aquí.\n" >>
<<elseif $state.location != "camino">>
<<set $log += "No hay nadie aquí.\n" >>
<<else>>
<<set _name = _obj.t[0]>>
<<if $state.inv.indexOf(_name) gte 0 || $state.items[_name] == $state.location>>
<<switch _name>>
<<case "coco">>
<<set $log += "Le doy el coco al hombre. Agradecido, me permite tomar una de las frutas del cesto.\n" >>
<<set $ending =
{
altruist: true,
extractive: ($state.flags["pescado"] == true)
} >>\
<<case "pez">>
<<set $log += "Le doy el pez al hombre. Agradecido, me permite tomar algunas frutas del cesto.\n" >>
<<set $ending =
{
altruist: true,
extractive: true
} >>\
<<case "moneda">>
<<set $log += "Le doy la moneda al hombre. Al sostenerla parece asombrado por el peso y el brillo de la misma, como si nunca hubiese visto este material antes. El hombre abandona el cesto de fruta y se marcha con la moneda. Antes de desaparacer mira hacia atrás, como comprobando si me arrepiento de habérsela dado.\n" >>
<<set $ending =
{
capitalist: true,
extractive: ($state.flags["pescado"] == true)
} >>\
<</switch>>
<<goto ACT_DONE>>\
<<else>>
<<set $log += "Ese objeto no está aquí.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<<set _loc = $state.location>>
<<if _loc == "playa">>
<<set $log += "Me zambullo en el agua y nado mar adentro.\n">>\
<<set $state.location = "mar">>\
<<set $log += parser.describe($state) >>\
<<elseif _loc == "mar">>
<<set $log += "Vuelvo nadando a la playa.\n">>
<<set $state.location = "playa">>\
<<set $log += parser.describe($state) >>\
<<elseif _loc == "fondo">>
<<set $log += "Subo de vuelta a la superficie.\n">>\
<<set $state.location = "mar">>\
<<set $log += parser.describe($state) >>\
<<else>>
<<set $log += "No veo agua por aquí." >>\
<</if>>\
<<goto Input>>\<<set _loc = $state.location>>
<<if _loc == "playa">>
<<set $log += "Me zambullo en el agua y nado mar adentro.\n">>
<<set $state.location = "mar">>
<<set $log += parser.describe($state) >>
<<elseif _loc == "mar">>
<<set $log += "Me sumerjo bajo el agua.\n">>
<<set $state.location = "fondo">>
<<set $log += parser.describe($state)>>
<<elseif _loc == "fondo">>
<<set $log += "Ya estoy bajo el agua.\n">>
<<else>>
<<set $log += "Necesito estar en el agua para eso." >>
<</if>>\
<<goto Input>>\<<set _detail = ['L', 'M', 'H']>>\
<<= $pwd[$pwd.length-1].name>> $ make import
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Inicializando...
Buscando imágenes de personalidad...
<<next 500ms>>\
<<if Object.getOwnPropertyNames($savedMinds).length == 0>>\
No se han encontrado imágenes de personalidad.
<<else>>\
Imágenes de personalidad encontradas:
<<for _key range Object.getOwnPropertyNames($savedMinds)>>\
<<set _saved = $savedMinds[_key]>>\
<<capture _saved>>\
<<checkbox "_saved.selected" false true autocheck>> <<= _saved.name >> <<= _detail[_saved.force] >> <<= _saved.hash >> [<<= moment(_saved.moment).format("LLL") >>]
<</capture>>\
<</for>>\
[seleccione las que se importarán]
<</if>>\
<<include "filenav">>
<</timed>><<set $state = $qsim.compiled ? [ [], [], [4,3,2,1] ] : null >>\
<<set _detail = ['L', 'M', 'H']>>\
<<set _selected = [] >>\
<<set $ending["mgerdes"] to ($savedMinds["mgerdes"] && $savedMinds.mgerdes.selected)>>\
<<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Inicializando...
Compilando objetos:
<<for _key range Object.getOwnPropertyNames($savedMinds)>>\
<<set _saved = $savedMinds[_key]>>\
<<if _saved.selected>>\
<<run _selected.push(_saved)>>\
<</if>>\
<</for>>\
Imágenes de personalidad: <<= _selected.length >>
<<for _item range _selected>>\
<<capture _item>>\
@@.command;<<= _item.name >> <<= _detail[_item.force] >> <<= _item.hash >> [<<= moment(_item.moment).format("LLL") >>]@@
<</capture>>\
<</for>>\
Modelo social: <<= btoa(JSON.stringify($ending)) >>
<<if $savedMinds[$username] && $savedMinds[$username].force == 2 && $savedMinds[$username].selected>>\
¿Continuar? @@.file;[[Sí|compile-main]]/[[No|filenav]]@@
<<elseif not $savedMinds[$username] or not $savedMinds[$username].selected >>
¿Continuar? @@.file;Sí/[[No|filenav]]@@
<div class="message-box">\
Si voy a iniciar una simulación tengo que incluirme yo en ella.
</div>\
<<else>>
¿Continuar? @@.file;Sí/[[No|filenav]]@@
<div class="message-box">\
Incluir en la simulación una copia superficial de mi personalidad no cambiará nada. Si hay un momento para hacer lo que nunca se ha intentado, es este.
</div>\
<</if>>\
<</timed>><<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Inicializando...
<<next 1000ms>>Configurando modelos [ detalle ALTO ]
<<next 1000ms>>Implantando objetos.
<<next 200ms>>Generando terreno... \
<<done>>\
<<script>>
var timer;
function doClear(){ clearInterval(timer); }
function doMap(){
fractal().start(7,"start-map");
}
timer = setInterval(doMap, 500);
setTimeout(doClear, 10000);
<</script>>\
<</done>>\
<<next 11000ms>>@@.exec;[ [[Iniciar|End]] ]@@\
<</timed>>
<canvas id="start-map" width="640" height="350"></canvas>\
<<if $ending["capitalist"]>>
<<goto "capitalist">>
<<elseif $ending.authoritarian>>
<<goto "authoritarian">>
<<elseif $ending.extractive>>
<<goto "extractive">>
<<else>>
<<goto "altruist">>
<</if>><<= $pwd[$pwd.length-1].name>> $ <<timed 200ms>>cat README.md
! QSIM
!! 1. Qué es
QSIM es un framework libre de simulación profunda. Está desarrollado principalmente en el Centro Europeo de Investigación Computacional (CEIC). QSIM es compatible con las principales arquitecturas de superordenador cuántico.
!! 2. Cómo conseguirlo
Si no está disponible en tu distribución habitual puedes conseguirlo en el GitHut del CEIC.
!! 3. Cómo funciona
El motor de QSIM simula en tiempo real cualquier entorno físico o social. Una simulación es una imagen ejecutable (compuesta por un entorno físico y unas dinámicas sociales personalizables como plugins) que evoluciona en el tiempo. Las simulaciones pueden ser o no interactivas. Además, las funciones de personalidad escaneadas de sujetos reales se pueden codificar e importar como parte de las simulaciones.
!! 4. FAQ
!!! * ¿Por qué tengo que enlazar a mano los módulos del ejecutable?
La combinación de elementos procedurales y funciones escaneadas no puede resolverse automáticamente en todos los casos. El sistema solicitará intervención humana para compilar las imágenes de este tipo.
!!! * Quiero simular una sociedad de arácnidos voladores inteligentes gigantes, ¿por qué no puedo?
La simulación cuántica se apoya en condiciones de contorno que han sido calculadas a partir del mundo real. Igual que los estados cuánticos tienen unos estados con mayor probabilidad, las simulaciones tienden a converger en configuraciones estables, con alta similaridad a las realmente existentes.
<<next 200ms>>\
<<include "filenav">>
<</timed>>
<<set $log += "Dejo pasar unos cuantos ciclos de ejecución sin hacer nada.\n" >>
<<goto Input>><<set $log += "La simulación está compilada sin sonido.\n" >>
<<goto Input>><<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Inicializando...
<<next 200ms>>\
@@.error;ERROR: la simulación no está compilada.@@
<<include "filenav">>
<</timed>><<set $state = null>>\
<<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Inicializando...
Compilando objetos.
<<next 200ms>>\
<<if not $qsim.imported>>@@.error;ERROR: no hay funciones de personalidad.@@
<</if>>\
<<if not $qsim.trained>>@@.error;ERROR: no hay modelo de sistema social.@@
<</if>>\
<<include "filenav">>
<</timed>><<= $pwd[$pwd.length-1].name>> $ dump
<<run UI.saves() >>
<<include "filenav">><<= $pwd[$pwd.length-1].name>> $ reboot
<<run UI.restart() >>
<<include "filenav">><div class="ending-box">
<<ending-header>>
Me despiertan los rayos de sol que entran por la ventana.
Salgo de la caravana frotándome los ojos. Varias docenas como la mía, antiguos camiones y furgonetas reconvertidos en carros de tiro, forman un círculo con varias hogueras en el centro. Los caballos y camellos que tiran de ellas aún descansan.
Nuestra expedición recorre cada año el continente recuperando materiales de las grandes ciudades deshabitadas para intercambiarlos entre las comunidades. Cargamos piezas de metal, recambios de vehículos, plástico... restos de una época de abundancia energética. Con el colapso desaparecieron gran parte de la complejidad social y los conocimientos científicos necesarios para mantener todo aquello.
Nos gusta pensar, sin embargo, que nuestro sistema de valores es más rico que el de antes. La igualdad y la compasión ahora no son solamente buenos deseos, sino un imperativo para la supervivencia.
<<if $ending.mgerdes>>
La veo sentada en una piedra. Contempla el cielo y parece absorta en sus pensamientos. Lleno dos tazas de hojalata con café de un puchero y me voy hacia ella para llevarle una.<</if>>\
<<ending-footer>>
</div><div class="ending-box">
<<ending-header>>
Me despiertan los rayos de sol que entran por la ventana.
Salgo de mi cabaña y veo que la aldea ya se ha puesto en marcha. En el reparto semanal de tareas me ha tocado el mantenimiento de la canalización del río que soporta nuestro sistema de irrigación.
Todo el territorio está organizado en pequeñas comunidades autosuficientes como esta. Formamos un grupo cohesionado: los cargos son sorteados y las decisiones se toman en asamblea. Se podría decir que nuestro estilo de vida es sencillo pero satisfactorio, no nos hace anhelar tiempos de acumulación y abundancia tecnológica.
Pronto tendrá lugar un festival de la cosecha, en el que se reúnen todas las comunidades vecinas para unos días de celebración. Cada año corresponde a una de las aldeas organizarlo, y este es nuestro turno. <<if $ending.mgerdes>>Y aún no lo sé, pero alli la conoceré.<</if>>
<<ending-footer>>
</div><div class="ending-box">
<<ending-header>>
Me despiertan los rayos de sol que entran por la ventana.
Me levanto y contemplo el panorama desde mi apartamento en la arcología. Delante de mí se extiende una ciudad resplandeciente, arquitectura orgánica entretejida por agua y vegetación.
Unas gigantescas cúpulas transparentes protegen este medioambiente artificial. Más allá de las mismas se llega a ver el espaciopuerto, donde enormes cargueros espaciales despegan y aterrizan incesantemente.
Las regiones como esta son aún habitables gracias al tratamiento del agua y el aire. Una pequeña sociedad de la información dependiente de que se mantengan los flujos de materias primas y energía que tienen que venir ya desde fuera de la Tierra.
Le pido al asistente electrónico que muestre mi cuadro de mandos. Mis contenidos monetizados funcionan bien y mi cartera es sólida. Después compruebo por inercia mis redes sociales. <<if not $ending.mgerdes >>No tengo mensajes nuevos. <<else>>Tengo un mensaje nuevo, ¿será esta vez de ella?<</if>>
<<ending-footer>>
</div><div class="ending-box">
<<ending-header>>
Me despiertan los rayos de sol que entran por la ventana.
Solamente quedo yo en el barracón. Me ducho rápidamente y me preparo para otra jornada de trabajo en la gigafactoría de carros blindados. Quince horas seguidas de esfuerzo repetitivo y embrutecedor. Sólo es soportable con polvo gris, la disolución de alimentación sintética y estimulantes químicos que nos proporcionan como salario en especie.
En días como hoy me planteo alistarme en el ejército, donde tampoco falta el trabajo y se puede ver mundo. Porque siempre estamos en guerra con alguien. O quizá podría presentarme a los Juegos de la Arena, el reality-show de combates a muerte que domina la televisión. En cualquiera de estos sitios un mal movimiento terminaría con todo.
<<if $ending.mgerdes>>
Si no he hecho hasta ahora ninguna de estas dos cosas, u otras peores, es porque ella sigue aquí.<</if>>\
<<ending-footer>>
</div><<widget ending-header>>@@.center;.wide;<<= moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).add(1,"days").hour(6).locale("es").format("LL") >>@@<</widget>><<widget "ending-footer">>
@@.center;.wide;"""*** FIN ***"""@@
@@.center;.wide;<<link Reiniciar>><<run Engine.restart() >><</link>>@@<</widget>><<set $log += "Mi avatar es una figura humanoide sin ningún rasgo específico.\n" >>
<<goto Input>>