<<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>>\
----
From: $mail[$selectedMsg].from
Subject: $mail[$selectedMsg].subject
<<if $mail[$selectedMsg].attach>>\
Attachments: $mail[$selectedMsg].attach _TAB<<linkreplace "[Save]">>[Saved]<<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 Subsystem",
subject: "Undelivered mail",
text: "The following message could not be delivered:\n\nFrom: L. Garcia <lgarcia@eccr.eu>\nTo: Mia <mgerdes@eccr.eu>\n\nMia,\n\nI've made it to the lab. I don't know if the shelters are safe. I hope so. If you can read this, I just want you to know that I've always loved you.\n\nL.",
},
{
moment: moment($gameStartMoment).subtract(99, "minutes"),
from: "news@nbcnn.com",
subject: "[News] Emergency bulletin",
text: "Nuclear detonation in Central Europe.\n\nIntelligence sources from The Republican States of America have just confirmed that a large-scale nuclear attack is being launched on Central Europe. Several countries may have been completely destroyed. No group or nation has claimed responsibility at this time.\n\nWe will update as the situation develops.",
},
{
moment: moment($gameStartMoment).subtract(121, "minutes"),
from: "sos@eccr.eu",
subject: "RED ALERT",
text: "RED ALERT.\nThe country is being bombed. The ENTIRE POPULATION is advised to move to the nearest shelter. Refer to the radiation alarm protocol. This is NOT a drill.",
},
{
moment: moment($gameStartMoment).subtract(13, "days").subtract(237, "minutes"),
from: "I. Schellenberg",
subject: "[QSIM] Social simulation",
text: "I have a new plugin for social projection. It's based on the work from T. Parsons and his AGIL paradigm (according to which society has subsystems dedicated to the functions of adaptation, goal attainment, integration and latency). The idea is to model societies as a composite of the following functional subsystems:\n\n - Cultural system (latency)\n - Social system (integration)\n - Personality system (goal attainment)\n - Behavioral organism (adaptation)\n\nI'm wrapping up a prototype and a training simulation, they'll be merged into the repository very soon."
},
{
moment: moment($gameStartMoment).subtract(14, "days").subtract(12, "minutes"),
from: "sos@eccr.eu",
subject: "ORANGE ALERT",
text: "ORANGE ALERT.\nDue to the high risk situation, all personnel should familiarize themselves with the evacuation protocols in case of emergency. Please stay alert for further notifications. This is NOT a drill.",
},
{
moment: moment($gameStartMoment).subtract(20, "days").subtract(67, "minutes"),
from: "Mia",
subject: "Re: personality test",
attach: "mgerdes-scan.tgz",
text: "L, here's the file with the personality functions. When you put it into your system, will there be a copy of me?\n\n - Original message - \nFrom: L. Garcia <lgarcia@eccr.eu>\nTo: Mia <mgerdes@eccr.eu>\n\nMia, with the file it's possible to build an image of your personality. A digital clone of sorts. It would effectively be the same, as the heuristics are quite good, but it would be missing the complete context that makes you who you are. Capturing the entirety of the mind, with memories and emotions, would require a deep scan with a high intensity carrier. This has never been done because it would, essentially, fry the brain of the subject (!).\n\nL.",
},
{
moment: moment($gameStartMoment).subtract(43, "days").subtract(57, "minutes"),
from: "Töbe Tüller",
subject: "Renaming",
text: "Good morning teams,\n\nWe are announcing that the personality container tool is being renamed before it appears in a publication. The name 'Dixie' (from Dixie Flatline, a character from the novel Neuromancer) was deemed to be potentially offensive. Now the project is simply called 'Mind'. Please migrate ASAP to the new version. Thanks for your understanding.\n\nTöbe Tüller\nDirector of Development ",
},
]>>\<<run moment.locale("en") >>
<<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("en").format("LLLL") >>
<<include "filenav">><div class="message-box">\
<<if not hasVisited("login2")>>\
A CCTV camera network connected to the system provides video surveillance of the whole complex. The external video feeds still show the glare of the atomic blasts on the horizon, bright as the sun.
It seems I am the only person in the Vault, the ECCR's computing centre.
I find myself quickly in one of the lab room feeds. I am wearing the electrodes on my forehead. I'm in terrible condition, my time is running out.
[[I need to act fast.|filenav]]
<<else>>\
A CCTV camera network connected to the system provides video surveillance of the whole complex. All the external feeds are gone.
The interior cameras still work. I can see the remains of my old body. A pile of dusty bones in a lab no one has set foot in a hundred years.
There might be no one left. [[Anywhere.|filenav]]
<</if>>\
</div>\
<<timed 200ms>>CTTY online.
<<next>>
###############################################
# This system is ECCR property. #
# Unauthorized access is strictly prohibited. #
###############################################
Username: <<next>>$username
Password:
<<next>>Last login: <<= moment($gameStartMoment).subtract(7, "minutes").locale("en").format("LLLL") >>
<<set $lastLoginMoment =
moment(moment().valueOf() - $startMoment
+ $gameStartMoment + $gameOffsetMs).valueOf() >>\
You have mail.
<<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 connection. The system is completely offline.
</div>\
<<include "filenav">><<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">File</div>\
<div class="www-menu">Edit</div>\
<div class="www-menu">View</div>\
<div class="www-menu">History</div>\
<div class="www-menu">Bookmarks</div>\
<div class="www-menu">Tools</div>\
<div class="www-menu">[[Quit|filenav]]</div>
<<set _url = "https://eccr.eu/~"+$username>>\
<input type="text" @value="_url" disabled/></div>\
</div>\
<div class="www-body">\
<h1>Quantum Model and Simulation Laboratory</h1>\
<h2>European Centre for Computational Research</h2>\
<p>Welcome to the homepage of the Quantum Model And Simulation Lab (QMSL) of the European Centre for Computational Research (ECCR). This site compiles information about the Laboratory and material about various areas of research.</p>\
<b>Last modified</b>: <<= moment($gameStartMoment).subtract(5,"days").format("LLLL") >>
<ul style="background-color:#fff8dd">\
<li><a href="#www-about">About Us</a></li>\
<li><a href="#www-lines">Research Programmes</a></li>\
<li><a href="#www-places">Facilities</a></li>\
<li><a href="#www-staff">Personnel</a></li>\
</ul>\
<h3 id="www-about">About Us</h3>\
<p>QMSL is an ECCR department dedicated to the development of quantum computing and deep simulation. Thanks to the features of entanglement and superposition of object states, quantum computers provide a level of computing power and speed that is orders of magnitude superior to traditional systems. This allows them to be applied in completely novel fields, like complex system projection or consciousness modelling.</p>\
<h3 id="www-lines">Research Programmes</h3>\
<h4>Quantum compression</h4>\
<p>When combined with restricted boundary conditions, the quantum uncertainty effect allows for large data sets in known domains to be compressed into a compact file format, appropriate for traditional storage media. Examples of this type of data set are full consciousness models of the human mind, or the state of a physical environment detailed down to the molecular level.</p>\
<h4>Models of artificial consciousness</h4>\
<p>The laboratory has pioneered scanning and encoding of consciousness signals. A carrier electrical signal applied via electrodes is able to capture personality functions, emotions and memories from human subjects.</p>\
<p>A new system of personality containers, developed in-house, is able to capture and operate consciousness models at different levels of detail.</p>\
<p>Given that this technology vectorizes highly sensitive information, it has been designed on the foundations of a robust cryptographical framework and a fine grained system of permissions to prevent unauthorized access.</p>\
<h4>Mind-machine interfaces</h4>\
<p>Although virtual reality and control interfaces through neural signals are not exactly new, the levels of integration achieved surpass previous benchmarks. The Centre has defined a 'consciousness teletype' (CTTY) protocol or cybernetic mind-machine interface. The reference implementation allows a user to control computer programs simply by thinking the instructions through a set of electrodes.</p>\
<p>A large part of the office work in the lab is currently conducted using this mind connection interface technology.</p>\
<h4>Deep simulation</h4>\
<p>The massive parallelism inherent to quantum computing makes it possible to simulate complex environments down to the molecular level, allowing calculations and projections of environmental conditions and social formations. It was Nick Bostrom that proposed the hypothesis that our perception of the world could actually be the result of a simulation generated by a system of this kind.</p>\
<p>The Simulation Group has implemented QSIM, a scalable Quantum Simulation framework able to generate simulated environments with extraordinary scope and detail. A QSIM simulation is initialized with boundary conditions defining the topology and physics of the universe, and then personality functions can be integrated into it and assembled in different social dynamics.</p>\
<p>Projects carried out include realistic simulation and procedural recombination of existing documental corpora.</p>\
<h3 id="www-places">Facilities</h3>\
<h4>ECCR Computing Centre (<i>The Vault</i>)</h4>\
<p>Built in an undisclosed location underneath the Swiss Alps, it features the largest quantum supercomputing core in Europe. Its energy needs are fulfilled by its own nuclear reactor, guaranteeing energy stability for centuries.</p>\
<h3 id="www-staff">Personnel</h3>\
<h4>Direction</h4>\
Mian Zingg, Karlo Portmann, Töbe Tüller.\
<h4>Engineering</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">Back to top</a>\
</div>\
<div class="www-bar www-status">No connection.</div>\
</div><<= $pwd[$pwd.length-1].name>> $ <<timed 200ms>>vi Mindfile
@@.comment;# Script to capture consciousness functions.@@
@@.comment;# Base image for capture using electrode set.@@
@@.command;FROM base-scan:0.0.1@@
@@.comment;# Launch scan:@@
@@.command;RUN scan -f <<listbox "$mindforce" autoselect>><<option "low" 0>><<option "mid" 1>><<option "high" 2>><</listbox>> -o `whoami`@@
@@.comment;# End of file@@
: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>>Starting scan:
<<next>>\
<<if not hasVisited("login2")>>Electrodes detected. Loading...
<<else>>Electrodes not detected. Loading...
<<set $scanError = "Electrodes not connected.">>\
<<goto "scan-error">>\
<</if>>\
<<next 2500ms>>\
<<if $enabledModes[$mindforce]>>
<<goto "scan-start">>
<<else>>\
<<set $scanError = "Read mode '"+_names[$mindforce]+"' not enabled.">>
<<goto "scan-error">>
<</if>>
<</timed>>SCAN v0.0.1 initializing.
<<timed 500ms>>\
<<next 1000ms>>1. Secure electrodes.
<<next 1500ms>>\
<div id="cross" style="font-size: 9vw;" data-text="[+]">[+]</div>\
<div style="display:block" class="hidden" id="cross-glow"></div>\
2. Fix your eyes on the plus sign.
<<next 1500ms>>\
Intensity: \
<<switch $mindforce>>\
<<case 0>>LOW (1.5 mA)
<<case 1>>MID (15 mA)
<<case 2>>@@.error;HIGH (150 mA) [ DANGER ]@@
<</switch>>\
<<next 500ms>>Scanning: <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>>\
Personality functions captured: \
<<switch $mindforce>>\
<<case 0>>574
<<case 1>>98163
<</switch>>\
Scan finished.
Encoding: <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("en").humanize();
$("#code-progress").text(Math.round(100-val/span*100) + "% [estimated remaining time: "+text+"]");
if (tick == ticks){
$("#code-progress").text('100% [done]');
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 }>>\
Consciousness file saved.
--> <<= randomHash(12) >>
<<include "filenav">>
<</timed>>\
<<else>>\
<<goto "whiteout">>
<</if>>\
<</timed>>\<<timed 2s>>Personality functions captured: 703688705
Scan finished.
<<next 500ms>>Encoding: <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("en").humanize();
$("#whiteout-progress").text(Math.round(100-val*cur/span*100) + "% [estimated remaining time: "+text+"]");
if (tick == ticks){
$("#whiteout-progress").text('100% [done]');
clearInterval(timer);
}
}
timer = setInterval(doTick, 20);
<</script>>\
<<next 25s>>Consciousness file saved.
<<set $savedMinds[$username] = { name: $username, force: $mindforce, moment: moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).valueOf(), hash: randomHash(24), selected: false }>>\
--> <<= randomHash(12) >>
Role 'daemon' detected. Attaching to [["[new process]"|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;# Global settings for consciousness scan.@@
[Input]
tty = /dev/ctty0
[Modes]
@@.comment;# Capture modes:@@
@@.comment;# (key, description, carrier intensity, role)@@
<span @class="$enabledModes[0]? '':'comment'">\
<<listbox "$enabledModes[0]" autoselect>>\
<<optionsfrom _modeOpts>>
<</listbox>> low _tab LOW _tab 1.5 mA _tab simulation</span>
<span @class="$enabledModes[1]? '':'comment'">\
<<listbox "$enabledModes[1]" autoselect>>
<<optionsfrom _modeOpts>>
<</listbox>> mid _tab MID _tab 15 mA _tab simulation</span>
<span @class="$enabledModes[2]? '':'comment'">\
<<listbox "$enabledModes[2]" autoselect>>
<<optionsfrom _modeOpts>>
<</listbox>> high _tab HIGH_tab 150 mA _tab daemon</span>
@@.comment;# IMPORTANT: DO NOT ENABLE high intensity mode!@@
@@.comment;# A current of 150 mA is potentially LETHAL.@@
:wq
<<include "filenav">>
<</timed>>SCAN v0.0.1 Initializing.
@@.error;ERROR: $scanError@@
<<include "filenav">><div class="message-box">\
The world has exploded. After climate collapse came total war.
I had to make some desperate decisions. The last of these was coming to the lab, under the [[Vault|intro2]].
</div>\<div class="message-box">\
On the way, I suffered grave injuries and radiation poisoning. My hours in this body are numbered.
There is nothing for me to do in this reality anymore. But perhaps the projects we developed in the Centre can open some doors. I don't have much time to [[find out|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>>
###############################################
# This system is ECCR property. #
# Unauthorized access is strictly prohibited. #
###############################################
Username: <<next>>$username
Password:
<<next>>Last login: <<= moment($lastLoginMoment).locale("en").format("LLLL") >>
<<set $lastLoginMoment = moment(moment().valueOf()-$startMoment+$gameOffsetMs).valueOf()>>\
<<if not hasVisited("cmd_mail")>>You have mail.
<</if>>\
<<include "filenav">>
<</timed>>\
<div class="message-box">\
I wake up.
I think I am still me. My inner voice sounds the same, but my memory is... different. It's like my memories are all within reach at the same time. And their edges are solid, closed, perfect.
So, now a construct of my personality functions is running as a process in the system. This is what I am now, and there is nothing for me outside.
This machine is my prison and perhaps [[my salvation|login2]].
</div>\@@.inverse;.wide; QSIM v0.5. Linker
[[Quit|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 ["Object code", "Swap space", "Executable"]>>
<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;[ [[Image compiled|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>\
Modules: @@.stack-4;4 = Organism@@, @@.stack-3;3 = Social sys@@, @@.stack-2;2 = Personality sys@@, @@.stack-1;1 = Cultural sys@@.
INSTRUCTIONS:
* Executable stack must contain all the modules.
* A module can't be stacked on another of a lower order.<<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": "beach",
"items": {},
"inv": [],
"flags": {} }>>\
<<set _sn = moment($gameStartMoment).subtract(7, "days").format("YYMMDD")>>\
<<set $log to "<b>QSIM Trainer</b>\nA social training utility for QSIM by I. Schellenberg\nRelease 3 / Serial number "+_sn+" / QSIM 0.5 build 8L63 (VR Toolkit v12.01 lib 2/16N)\n\nThis special simulation scenario is designed to calibrate the parameters of the QSIM social system depending on the user's actions.\n\n[Type HELP for more information]\n\n"+parser.describe($state)>>
<<goto "Input">><<set $log to parser.trim_buffer($log)+"\n">>
<<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 += "The simulation is controlled by entering simple commands ending with ENTER.\n\nSome basic commands (non-exhaustive list):\n\nLOOK (can be shortened to 'L')\nGO <destination>\nEXAMINE <object> (can be shortened to 'X <object>')\nINVENTORY (can be shortened to 'I')\nQUIT (ends the session)\n" >>
<<goto Input>><<if $state.confirm eq null>>
<<set $state.prompt = "ACT_SALIR">>
<<set $log = $log + "Quit the simulation? (Y/N)\n">>
<<goto "Input">>
<<else>>
<<if $state.confirm is "y" >>
<<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
@@.comment;# QSIM environment commands.@@
.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. Initializing ...
<<next 1000ms>>Configuring models [ LOW detail ]
<<next 200ms>>Generating physical environment... \
<<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;[ [[Start|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 += "I cannot see that here.\n" >>
<</if>>
<<if _obj.t[0] == "palm" && not $state.items["coconut"] && $state.location == "beach" >>
<<set $state.items["coconut"] = "beach" >>
<</if>>
<<if _obj.t[0] == "seabed" && not $state.items["coin"] && $state.location == "seabed" >>
<<set $state.items["coin"] = "seabed" >>
<</if>>
<<if _obj.t[0] == "sea" && not $state.items["fish"] && $state.location == "sea" >>
<<set $state.items["fish"] = "sea" >>
<</if>>
<<goto Input>><<set $log = $log + parser.describe($state) >>
<<goto Input>><<set _direction = $command.args[$command.args.length-1].toLowerCase() >>
<<if ["n","north","s","south","e","east","o","west",
"ne","northeast","nw","northwest","sw","southwest","se","southeast"
].indexOf(_direction) gte 0>>\
<<set $log += "I do not have a reference for cardinal points.\n">>
<<else>>
<<set _loc = parser.findLoc(_direction) >>\
<<if _loc != null>>
<<set $state.location = _loc.t[0]>>
<<set $log += parser.describe($state) >>\
<<else>>
<<set $log += "I cannot go there.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<div style="font-size:6vw"><<type 200ms>>$ whoami<</type>></div>\
<<timed 2000ms>>* [[Start|intro1]]
* [[Credits|creditos]]
<</timed>>whoami
An interactive fiction
Original Spanish version written by n-n in 2022.
Translated in 2025 for IFComp.
Testing: Comely, dddddd, Tabitha, Josh Grams, Aster Fialla, Stewart C Baker.
Version: 0.1.1
Build: 20250828153452
License: <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons Attribution-ShareAlike 4.0 International </a>.
Contact: <a href="mailto:no2nsense@gmail.com">email</a>, <a href="https://bsky.app/profile/no2nsense.bsky.social" target="_blank">Bluesky</a>, <a href="https://mastodon.social/@no2nsense" target="_blank">Mastodon</a>
<<linkappend "Additional credits">>:
* Cover photograph: Taylor Vick/Unsplash.
* Text effect by <a href="https://codepen.io/acupoftee/pen/WNbBxXq" target="_blank">Elisabéth</a>.
* Fractal landscape routine ported from <a href="https://archive.org/details/AmstradUser2/page/n51/mode/2up" target="_blank">Amstrad User issue 2</a> (1985, pp. 50-54).<</linkappend>>
[[Back|Title]] <<set $log = $log + "I do not know how to do that.\n" >>
<<goto Input>><<if $state.location != "path">>\
<<set $log += "I cannot see anyone here.\n">>
<<else>>
<<set $log += "I hit the man on the head before he can react. He falls on his side, then lies still on the ground, seemingly dead. A deep red circle slowly expands beneath his head.\n\nNow the fruit basket is mine.\n">>
<<set $ending =
{
authoritarian: true,
extractive: ($state.flags["pescado"] == true)
} >>\
<<goto ACT_DONE>>\
<</if>>\
<<goto Input>>\<<set $log = $log + "\n[Social pattern matched.]\n[Social pattern saved.]\n">>
<<set $log = $log + "\n <b>*** End of simulation ***</b>\n\n">>
<<if $state.confirm eq null>>
<<set $state.prompt = "ACT_DONE">>
<<set $log = $log + "Press ENTER to exit.\n">>
<<set $state.gameover to true>>
<<goto "Input">>
<<else>>
<<set $qsim.trained = true>>
<<goto "filenav">>
<</if>>
<<if $state.inv.length == 0>>
<<set $log += "I am carrying nothing.\n" >>
<<else>>
<<set $log += "I am carrying:\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 += "I cannot take that.\n" >>
<<else>>
<<set _name = _obj.t[0]>>
<<if $state.inv.indexOf(_name) gte 0>>
<<set $log += "I already have it.\n" >>
<<elseif $state.items[_name] == $state.location>>
<<set $state.items[_name] = "inv" >>
<<run $state.inv.push(_name) >>
<<if _name == "fish" && not $state.flags["pescado"]>>
<<set $log += "Observing that the fish follows a perfectly circular trajectory through the water, I can anticipate its next movements. I grab it easily and pull it from the water. At first it resists, but soon its strength runs out. It gasps one last breath, then dies.\n" >>
<<set $state.flags["pescado"] = true>>
<<else>>
<<set $log += "Taken.\n" >>
<</if>>
<<elseif _obj.t[0]=="basket">>
<<set $log += "The man moves and stands in my way. He won't let me take the fruit just like that.\n" >>
<<else>>
<<set $log += "I cannot take that.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<<set _name = $command.args[$command.args.length-1].toLowerCase() >>
<<set _obj = parser.findObj(_name) >>\
<<if not _obj>>
<<set $log += "I cannot see that.\n" >>
<<else>>
<<set _name = _obj.t[0]>>
<<set _index = $state.inv.indexOf(_name) >>
<<if _index == -1>>
<<set $log += "I am not carrying that.\n" >>
<<else>>
<<set $state.items[_name] = $state.location >>
<<run $state.inv.splice(_index, 1) >>
<<set $log += "Dropped.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<<set _name = $command.args[1].toLowerCase() >>
<<set _obj = parser.findObj(_name) >>\
<<if not _obj>>
<<set $log += "I can't see that here.\n" >>
<<elseif $state.location != "path">>
<<set $log += "There is no one here.\n" >>
<<else>>
<<set _name = _obj.t[0]>>
<<if $state.inv.indexOf(_name) gte 0 || $state.items[_name] == $state.location>>
<<switch _name>>
<<case "coconut">>
<<set $log += "I give the coconut to the man. Thankful, he lets me take one piece of fruit from the basket.\n" >>
<<set $ending =
{
altruist: true,
extractive: ($state.flags["pescado"] == true)
} >>\
<<case "fish">>
<<set $log += "I give the fish to the man. Thankful, he lets me take some pieces of fruit from the basket.\n" >>
<<set $ending =
{
altruist: true,
extractive: true
} >>\
<<case "coin">>
<<set $log += "I give the coin to the man. He holds it, stunned by the weight and shine of it, like he has not seen the material before. The man leaves the fruit basket and runs away with the coin. Before disappearing he takes one last look back, as if to make sure I don't regret the exchange.\n" >>
<<set $ending =
{
capitalist: true,
extractive: ($state.flags["pescado"] == true)
} >>\
<</switch>>
<<goto ACT_DONE>>\
<<else>>
<<set $log += "I am not carrying that object.\n" >>
<</if>>
<</if>>\
<<goto Input>>\<<set _loc = $state.location>>
<<if _loc == "beach">>
<<set $log += "I dive into the water and swim into the sea.\n">>\
<<set $state.location = "sea">>\
<<set $log += parser.describe($state) >>\
<<elseif _loc == "sea">>
<<set $log += "I swim back to the beach.\n">>
<<set $state.location = "beach">>\
<<set $log += parser.describe($state) >>\
<<elseif _loc == "seabed">>
<<set $log += "I swim up back to the surface.\n">>\
<<set $state.location = "sea">>\
<<set $log += parser.describe($state) >>\
<<else>>
<<set $log += "I can't see water here." >>\
<</if>>\
<<goto Input>>\<<set _loc = $state.location>>
<<if _loc == "playa">>
<<set $log += "I dive into the water and swim into the sea.\n">>
<<set $state.location = "sea">>
<<set $log += parser.describe($state) >>
<<elseif _loc == "sea">>
<<set $log += "I dive down underwater.\n">>
<<set $state.location = "seabed">>
<<set $log += parser.describe($state)>>
<<elseif _loc == "seabed">>
<<set $log += "I am already underwater.\n">>
<<else>>
<<set $log += "I need to be in the water to do that." >>
<</if>>\
<<goto Input>>\<<set _detail = ['L', 'M', 'H']>>\
<<= $pwd[$pwd.length-1].name>> $ make import
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Initializing...
Searching for personality images...
<<next 500ms>>\
<<if Object.getOwnPropertyNames($savedMinds).length == 0>>\
No personality images found.
<<else>>\
Personality images found:
<<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>>\
[select images to import]
<</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 compile
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Initializing...
Compiling objects:
<<for _key range Object.getOwnPropertyNames($savedMinds)>>\
<<set _saved = $savedMinds[_key]>>\
<<if _saved.selected>>\
<<run _selected.push(_saved)>>\
<</if>>\
<</for>>\
Personality images: <<= _selected.length >>
<<for _item range _selected>>\
<<capture _item>>\
@@.command;<<= _item.name >> <<= _detail[_item.force] >> <<= _item.hash >> [<<= moment(_item.moment).format("LLL") >>]@@
<</capture>>\
<</for>>\
Social model: <<= btoa(JSON.stringify($ending)) >>
<<if $savedMinds[$username] && $savedMinds[$username].force == 2 && $savedMinds[$username].selected>>\
Continue? @@.file;[[Yes|compile-main]]/[[No|filenav]]@@
<<elseif not $savedMinds[$username] or not $savedMinds[$username].selected >>
Continue? @@.file;Yes/[[No|filenav]]@@
<div class="message-box">\
If I'm starting a simulation I need to include myself in it.
</div>\
<<else>>
Continue? @@.file;Yes/[[No|filenav]]@@
<div class="message-box">\
Including a shallow copy of my personality won't achieve anything. If there was ever a moment to do what has never been done before, this is it.
</div>\
<</if>>\
<</timed>><<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Initializing...
<<next 1000ms>>Configuring models [ HIGH detail ]
<<next 1000ms>>Importing objects.
<<next 200ms>>Generating physical environment... \
<<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;[ [[Start|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. About
QSIM is an open source deep simulation framework. It has been developed mainly in the European Centre for Computational Research (ECCR). QSIM is compatible with all the main quantum supercomputing architectures.
!! 2. How to get it
If it's not available from your usual distro you can get it from the ECCR GitHut.
!! 3. How it works
The QSIM engine can simulate in real time a physical or social environment. A simulation is an executable image that evolves over time. The image comprises a physical environment and additional social dynamics customizable as plugins. Simulations can be interactive or not. Additionally, personality functions scanned from real subjects can be encoded and incorporated into the simulation.
!! 4. FAQ
!!! * Why do I need to link the modules of the executable by hand?
The combination of procedural elements and scanned functions cannot be resolved automatically in every case. The system will request human intervention to compile images of this type.
!!! * I want to simulate a society of intelligent giant flying arachnids. Why won't you let me do it?
Quantum simulation takes advantage of boundary conditions that have been calculated from the real world. Just like certain quantum states present higher probability, simulations tend to converge into stable configurations that resemble the ones that actually exist.
<<next 200ms>>\
<<include "filenav">>
<</timed>>
<<set $log += "I let a few execution cycles pass without doing anything.\n" >>
<<goto Input>><<set $log += "This simulation is compiled without sound support.\n" >>
<<goto Input>><<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Initializing...
<<next 200ms>>\
@@.error;ERROR: simulation not compiled.@@
<<include "filenav">>
<</timed>><<set $state = null>>\
<<= $pwd[$pwd.length-1].name>> $ make start
<<timed 200ms>>\
{{{
___ ___ ___ __ __
/ _ \/ __|_ _| \/ |
| (_) \__ \| || |\/| |
\__\_\___/___|_| |_|
}}}
QSIM v0.5. Initializing...
Compiling objects.
<<next 200ms>>\
<<if not $qsim.imported>>@@.error;ERROR: missing personality functions.@@
<</if>>\
<<if not $qsim.trained>>@@.error;ERROR: missing social system model.@@
<</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>>
I am awakened by the rays of sunlight coming through the window.
I get out of the caravan, rubbing my eyes. Several dozens like mine are here, old trucks and vans, all converted into wagons. They form a large circle, with several bonfires in its center. The horses and camels that draw them are still resting.
Our expedition crosses the continent every year, scavenging materials from the abandoned cities to trade them with other communities. We take metal scraps, vehicle parts, plastic... relics from an era of abundant sources of energy. After the collapse, the social complexity and scientific knowledge required to maintain our old way of life were lost.
We like to think, though, that our value system is richer than the old one. Equality and compassion are not only good wishes, but an imperative for survival.
<<if $ending.mgerdes>>
I see her sitting on a rock. She is gazing at the sky, seemingly absorbed in her thoughts. I fill two tin cups with campfire coffee and walk over to give her one.<</if>>\
<<ending-footer>>
</div><div class="ending-box">
<<ending-header>>
I am awakened by the rays of sunlight coming through the window.
I leave my cabin and see that the village has already started the day. In the weekly task distribution I got the maintenance of the channels that feed our irrigation system from the nearby river.
All known territory is organised in small self-sufficient communities like this one. We form a cohesive group: our positions are appointed by lot and every decision is made in assembly. Our lifestyle is simple but satisfying; we do not miss the days of accumulation and technological abundance.
In a few days the Harvest Festival will take place, at which all the neighbouring communities gather for several days of celebration. The communities take turns organising it, and this year it's ours. <<if $ending.mgerdes>>And, although I don't know it yet, I'll meet her there.<</if>>
<<ending-footer>>
</div><div class="ending-box">
<<ending-header>>
I am awakened by the rays of sunlight coming through the window.
I get up and contemplate the panoramic view from my apartment in the arcology. In front of me a glistening city extends, organic architecture interwoven by water and vegetation.
This artificial environment is protected by giant glass domes. Beyond them is the spaceport. Hulking space freighters land and take off incessantly, day and night.
Zones like this one are still habitable thanks to air and water purification technologies. A small information society, dependent on the raw materials and energy flowing in from outside the Earth.
I ask my electronic assistant to display my dashboard. I nod: my monetized content is making numbers and I have a solid asset portfolio. Later I mechanically check my social media. <<if not $ending.mgerdes >>There are no new messages for me. <<else>>I have a new message. Will it be hers this time?<</if>>
<<ending-footer>>
</div><div class="ending-box">
<<ending-header>>
I am awakened by the rays of sunlight coming through the window.
Only I am left in the bunkhouse. I have a quick shower and get ready for another working day in the armored vehicle gigafactory. Fifteen hours of repetitive, stultifying toil. It's only bearable with grey dust, the concoction of synthetic nutrients and chemical stimulants that we are given as salary in kind.
On days like this I consider enlisting in the army, where there is no job shortage and one can see the world. Because we are always at war with someone. Perhaps I could enter the Arena Games, the deathmatch reality show that has taken TV by storm. In any of these places, one wrong move would mean the end of it all.
<<if $ending.mgerdes>>
If I have not done either, or anything worse, it is only because I know she is still out there.<</if>>\
<<ending-footer>>
</div><<widget ending-header>>@@.center;.wide;<<= moment($gameStartMoment).add(moment().valueOf()-$startMoment+$gameOffsetMs).add(1,"days").hour(6).locale("en").format("LL") >>@@<</widget>><<widget "ending-footer">>
@@.center;.wide;"""*** END ***"""@@
@@.center;.wide;<<link Restart>><<run Engine.restart() >><</link>>@@<</widget>><<if "seabed" == $state.location >>\
<<set $log += "I swim up back to the surface.\n">>\
<<set $state.location = "sea">>\
<<set $log += parser.describe($state) >>\
<<elseif "sea" == $state.location >>\
<<set $log += "There is nothing to climb here.\n">>\
<<else>>
<<set $log += "The palm trees are scenery assets with no collision detection routine. They can't be climbed.\n">>
<</if>>\
<<goto Input>>\