<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://yusupov.cloud/index.php?action=history&amp;feed=atom&amp;title=Thousand_Year_Old_Vampire</id>
	<title>Thousand Year Old Vampire - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://yusupov.cloud/index.php?action=history&amp;feed=atom&amp;title=Thousand_Year_Old_Vampire"/>
	<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;action=history"/>
	<updated>2026-05-16T11:51:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=393&amp;oldid=prev</id>
		<title>Mvuijlst at 11:45, 12 April 2026</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=393&amp;oldid=prev"/>
		<updated>2026-04-12T11:45:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:45, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Thousand Year Old Vampire - Web Helper&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;TYOV-Web&amp;#039;&amp;#039;&amp;#039;) is a browser-based adaptation of the solo role-playing game &amp;#039;&amp;#039;Thousand Year Old Vampire&amp;#039;&amp;#039; by Tim Hutchings. Rather than presenting the game as a digital board game or a rules spreadsheet, it treats a campaign as a long, accumulating chronicle: a vampire begins with a handful of memories, gains new experiences, loses old ones, and leaves behind a life story made of fragments, scars, names, and vanished centuries. The application is built as a &amp;#039;&amp;#039;&amp;#039;Django&amp;#039;&amp;#039;&amp;#039; backend serving a &amp;#039;&amp;#039;&amp;#039;Vue&amp;#039;&amp;#039;&amp;#039; single-page frontend, but its real achievement is literary rather than merely technical: it turns bookkeeping-heavy solo play into something that feels legible, mournful, and continuous.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Thousand Year Old Vampire - Web Helper&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;TYOV-Web&amp;#039;&amp;#039;&amp;#039;) is a browser-based adaptation of the solo role-playing game &amp;#039;&amp;#039;Thousand Year Old Vampire&amp;#039;&amp;#039; by Tim Hutchings. Rather than presenting the game as a digital board game or a rules spreadsheet, it treats a campaign as a long, accumulating chronicle: a vampire begins with a handful of memories, gains new experiences, loses old ones, and leaves behind a life story made of fragments, scars, names, and vanished centuries. The application is built as a &amp;#039;&amp;#039;&amp;#039;Django&amp;#039;&amp;#039;&amp;#039; backend serving a &amp;#039;&amp;#039;&amp;#039;Vue&amp;#039;&amp;#039;&amp;#039; single-page frontend, but its real achievement is literary rather than merely technical: it turns bookkeeping-heavy solo play into something that feels legible, mournful, and continuous.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:tyov-home.jpg|thumb|center|900px|The TYOV-Web home page, where players can browse existing chronicles, continue unfinished character creation, or begin a new vampire.]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Premise ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Premise ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l20&quot;&gt;Line 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The application follows the structure of the tabletop game closely, but presents it as a guided story engine. Character creation unfolds in six stages: mortal life, mortal relationships, skills, resources, a defining early experience, and finally the turning into vampirism. Once play begins, each turn revolves around a prompt. The player reads the current prompt, writes at least one experience in response, manages any consequences on the character sheet, then rolls a ten-sided die and a six-sided die to discover the next destination in the prompt list.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The application follows the structure of the tabletop game closely, but presents it as a guided story engine. Character creation unfolds in six stages: mortal life, mortal relationships, skills, resources, a defining early experience, and finally the turning into vampirism. Once play begins, each turn revolves around a prompt. The player reads the current prompt, writes at least one experience in response, manages any consequences on the character sheet, then rolls a ten-sided die and a six-sided die to discover the next destination in the prompt list.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:tyov-prompt.jpg|thumb|right|500px|A prompt page during play. The current prompt, experience form, memories, characters, and skills are visible at the same time, emphasizing both story writing and memory pressure.]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;That movement is what gives the game its broken historical rhythm. A positive result on D10 minus D6 pushes the vampire forward; a negative result drags the story backward into earlier themes or alternative branches. Prompts are also divided into variations, so revisiting a number does not necessarily mean revisiting the same moment in the same way.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;That movement is what gives the game its broken historical rhythm. A positive result on D10 minus D6 pushes the vampire forward; a negative result drags the story backward into earlier themes or alternative branches. Prompts are also divided into variations, so revisiting a number does not necessarily mean revisiting the same moment in the same way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l30&quot;&gt;Line 30:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The most compelling way to understand the application is through one of its stored characters. One campaign in the database follows &amp;#039;&amp;#039;&amp;#039;Karmis&amp;#039;&amp;#039;&amp;#039;, formerly &amp;#039;&amp;#039;&amp;#039;Ekurzu&amp;#039;&amp;#039;&amp;#039; and before that &amp;#039;&amp;#039;&amp;#039;Naram&amp;#039;&amp;#039;&amp;#039;, across roughly three and a half thousand years.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The most compelling way to understand the application is through one of its stored characters. One campaign in the database follows &amp;#039;&amp;#039;&amp;#039;Karmis&amp;#039;&amp;#039;&amp;#039;, formerly &amp;#039;&amp;#039;&amp;#039;Ekurzu&amp;#039;&amp;#039;&amp;#039; and before that &amp;#039;&amp;#039;&amp;#039;Naram&amp;#039;&amp;#039;&amp;#039;, across roughly three and a half thousand years.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:tyov-story.jpg|thumb|right|500px|The story overview view presents a character&#039;s life as a readable timeline, combining narrative entries with a compact summary of memories, experiences, characters, skills, resources, and marks.]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;He begins in Bronze Age Mari as a temple scribe: precise, observant, and deeply embedded in the religious and political machinery of the city. His mortal life is defined by clay tablets, whispered intelligence, and courtly danger. He falls in love with Hessa, is shaped by the mentorship of the high priest Ibbi-Zamri, and is eventually turned by the ancient vampire Ashurban the Veiled. In one of the campaign&amp;#039;s defining cruelties, Ibbi-Zamri becomes the first person Karmis kills after the turning.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;He begins in Bronze Age Mari as a temple scribe: precise, observant, and deeply embedded in the religious and political machinery of the city. His mortal life is defined by clay tablets, whispered intelligence, and courtly danger. He falls in love with Hessa, is shaped by the mentorship of the high priest Ibbi-Zamri, and is eventually turned by the ancient vampire Ashurban the Veiled. In one of the campaign&amp;#039;s defining cruelties, Ibbi-Zamri becomes the first person Karmis kills after the turning.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-392:rev-393:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=392&amp;oldid=prev</id>
		<title>Mvuijlst: /* How Play Works */</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=392&amp;oldid=prev"/>
		<updated>2026-04-12T11:34:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;How Play Works&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:34, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l25&quot;&gt;Line 25:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 25:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The memory system gives the application its emotional pressure. A character can normally hold only &amp;#039;&amp;#039;&amp;#039;five active memories&amp;#039;&amp;#039;&amp;#039;, and each memory can contain no more than &amp;#039;&amp;#039;&amp;#039;three experiences&amp;#039;&amp;#039;&amp;#039;. When that limit is reached, the player must decide what to lose. Some memories can be moved into a &amp;#039;&amp;#039;&amp;#039;diary&amp;#039;&amp;#039;&amp;#039;, which acts as an external repository, but diaries themselves are only resources, and resources can be lost. The result is a game about narrative curation: the player is constantly deciding which version of the vampire&amp;#039;s past deserves to remain visible.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The memory system gives the application its emotional pressure. A character can normally hold only &amp;#039;&amp;#039;&amp;#039;five active memories&amp;#039;&amp;#039;&amp;#039;, and each memory can contain no more than &amp;#039;&amp;#039;&amp;#039;three experiences&amp;#039;&amp;#039;&amp;#039;. When that limit is reached, the player must decide what to lose. Some memories can be moved into a &amp;#039;&amp;#039;&amp;#039;diary&amp;#039;&amp;#039;&amp;#039;, which acts as an external repository, but diaries themselves are only resources, and resources can be lost. The result is a game about narrative curation: the player is constantly deciding which version of the vampire&amp;#039;s past deserves to remain visible.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Special prompts can alter that rhythm. Some disable experience-writing for a turn. Others allow the vampire&#039;s name to change, permit the editing of old experiences, reduce or increase permanent memory capacity, or end the chronicle entirely with an epilogue&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. TYOV-Web exposes these rules clearly during play, but the rules never overwhelm the fiction. They exist to sharpen it&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Special prompts can alter that rhythm. Some disable experience-writing for a turn. Others allow the vampire&#039;s name to change, permit the editing of old experiences, reduce or increase permanent memory capacity, or end the chronicle entirely with an epilogue.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== An Example Unlife: Karmis ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== An Example Unlife: Karmis ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-391:rev-392:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=391&amp;oldid=prev</id>
		<title>Mvuijlst at 11:34, 12 April 2026</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=391&amp;oldid=prev"/>
		<updated>2026-04-12T11:34:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:34, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Infobox &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;software&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Infobox  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;name &lt;/del&gt;= Thousand Year Old Vampire - Web Helper&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;01_name &lt;/ins&gt;= Thousand Year Old Vampire - Web Helper&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;developer &lt;/del&gt;= Michel Vuijlsteke&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;02_developer &lt;/ins&gt;= Michel Vuijlsteke&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;programming &lt;/del&gt;language = Python, TypeScript&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;03_programming &lt;/ins&gt;language = Python, TypeScript&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;operating &lt;/del&gt;system = Cross-platform (Web)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;04_operating &lt;/ins&gt;system = Cross-platform (Web)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;genre &lt;/del&gt;= Solo RPG digital companion&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;05_genre &lt;/ins&gt;= Solo RPG digital companion&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;license &lt;/del&gt;= Custom&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;06_license &lt;/ins&gt;= Custom&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;website &lt;/del&gt;= &amp;lt;code&amp;gt;https://tyov.yusupov.cloud&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;07_website &lt;/ins&gt;= &amp;lt;code&amp;gt;https://tyov.yusupov.cloud&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-390:rev-391:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=390&amp;oldid=prev</id>
		<title>Mvuijlst at 11:33, 12 April 2026</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=390&amp;oldid=prev"/>
		<updated>2026-04-12T11:33:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;amp;diff=390&amp;amp;oldid=389&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=389&amp;oldid=prev</id>
		<title>Mvuijlst: /* A Life in Summary */</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=389&amp;oldid=prev"/>
		<updated>2026-04-12T11:26:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;A Life in Summary&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:26, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l547&quot;&gt;Line 547:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 547:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== A Life in Summary ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== A Life in Summary ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Karmiš&#039;s story spans roughly three and a half thousand years. It begins in Bronze Age Mesopotamia, where the mortal scribe Naram serves in the temple of Ishtar at &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Mari—writing &lt;/del&gt;omens, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;navigating &lt;/del&gt;palace intrigue, and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;falling &lt;/del&gt;in love with a woman named Hessa who moves through the court &quot;like smoke.&quot; His mentor, the High Priest Ibbi-Zamri, is the first person he kills after being turned by the ancient vampire Ashurban the Veiled.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Karmiš&#039;s story spans roughly three and a half thousand years. It begins in Bronze Age Mesopotamia, where the mortal scribe Naram serves in the temple of Ishtar at &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Mari. He writes &lt;/ins&gt;omens, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;navigatesg &lt;/ins&gt;palace intrigue, and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;fals &lt;/ins&gt;in love with a woman named Hessa who moves through the court &quot;like smoke.&quot; His mentor, the High Priest Ibbi-Zamri, is the first person he kills after being turned by the ancient vampire Ashurban the Veiled.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The early centuries are defined by guilt and exile. Fleeing with his mortal companion Ennatum, the newly-made &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vampire—now &lt;/del&gt;calling himself &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ekurzu—struggles &lt;/del&gt;to control his hunger. He builds walls and plays flutes in the wilderness, but it is &quot;never penance, only a cage with softer bars.&quot; Eventually the hunger wins: he devours Ennatum during a sandstorm and spends the following decades alone.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The early centuries are defined by guilt and exile. Fleeing with his mortal companion Ennatum, the newly-made &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vampire (now &lt;/ins&gt;calling himself &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ekurzu) struggles &lt;/ins&gt;to control his hunger. He builds walls and plays flutes in the wilderness, but it is &quot;never penance, only a cage with softer bars.&quot; Eventually the hunger wins: he devours Ennatum during a sandstorm and spends the following decades alone.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The middle game carries the character through the great civilisations of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;antiquity—Amarna &lt;/del&gt;under Akhenaten, the Achaemenid Royal Road, the libraries of Alexandria—always in the role of scribe, forger, or quiet observer. He accumulates skills like &#039;&#039;Silent Cartography&#039;&#039; (&quot;I trace the unseen paths between people, places, and power&quot;) and &#039;&#039;Ash-Tongue&#039;&#039; (&quot;I speak in soot and suggestion, in the cracks between laws&quot;), but loses others as the centuries erode his identity: the ability to &#039;&#039;Decipher Ancient Texts&#039;&#039; and even &#039;&#039;I Control the Beast&#039;&#039; both slip away.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The middle game carries the character through the great civilisations of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;antiquity: Amarna &lt;/ins&gt;under Akhenaten, the Achaemenid Royal Road, the libraries of Alexandria—always in the role of scribe, forger, or quiet observer. He accumulates skills like &#039;&#039;Silent Cartography&#039;&#039; (&quot;I trace the unseen paths between people, places, and power&quot;) and &#039;&#039;Ash-Tongue&#039;&#039; (&quot;I speak in soot and suggestion, in the cracks between laws&quot;), but loses others as the centuries erode his identity: the ability to &#039;&#039;Decipher Ancient Texts&#039;&#039; and even &#039;&#039;I Control the Beast&#039;&#039; both slip away.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A pivotal relationship develops with the scholar Thoöni, who recognises the name &#039;&#039;Ekurzu&#039;&#039; not as myth but as continuity. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Later—after &lt;/del&gt;Thoöni&#039;s mortal &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;death—her &lt;/del&gt;spectral echo begins appearing in the margins of his diary, scratching fragments in languages he can no longer read.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A pivotal relationship develops with the scholar Thoöni, who recognises the name &#039;&#039;Ekurzu&#039;&#039; not as myth but as continuity. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Later, after &lt;/ins&gt;Thoöni&#039;s mortal &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;death, her &lt;/ins&gt;spectral echo begins appearing in the margins of his diary, scratching fragments in languages he can no longer read.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;By the late Roman period Karmiš has lost so many memories that he can barely hold a conversation. The game&#039;s memory mechanics enforce this viscerally: eight of his sixteen memories were permanently forgotten, including &#039;&#039;The Turning&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;itself—the &lt;/del&gt;vampire no longer remembers how he was made. He compensates by keeping diaries, but even those are lost: &#039;&#039;The Walls of Forgetting&#039;&#039; (memory carvings in five scripts beneath a shrine near Carchemish) and &#039;&#039;The Monastery Diary&#039;&#039; both vanish, taking their stored memories with them.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;By the late Roman period Karmiš has lost so many memories that he can barely hold a conversation. The game&#039;s memory mechanics enforce this viscerally: eight of his sixteen memories were permanently forgotten, including &#039;&#039;The Turning&#039;&#039; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;itself; the &lt;/ins&gt;vampire no longer remembers how he was made. He compensates by keeping diaries, but even those are lost: &#039;&#039;The Walls of Forgetting&#039;&#039; (memory carvings in five scripts beneath a shrine near Carchemish) and &#039;&#039;The Monastery Diary&#039;&#039; both vanish, taking their stored memories with them.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The final act takes place in early modern Europe. Karmiš witnesses the Atlantic slave trade first-hand and begins compiling &#039;&#039;The Margins of Manifest&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;—a &lt;/del&gt;cipher-folio of names taken from shipping manifests and punishment ledgers. His response to prompt 66a captures the shift:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The final act takes place in early modern Europe. Karmiš witnesses the Atlantic slave trade first-hand and begins compiling &#039;&#039;The Margins of Manifest&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, a &lt;/ins&gt;cipher-folio of names taken from shipping manifests and punishment ledgers. His response to prompt 66a captures the shift:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;It is no longer a question of restraint. That was a younger version of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;me—one &lt;/del&gt;who believed self-control made me different from the others. Now I am different in purpose, not method. I feed from slavers and call it justice, but the blood tastes the same.&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;It is no longer a question of restraint. That was a younger version of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;me, one &lt;/ins&gt;who believed self-control made me different from the others. Now I am different in purpose, not method. I feed from slavers and call it justice, but the blood tastes the same.&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;His companion in the final centuries is Mirelde of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Bracha—an &lt;/del&gt;immortal who becomes his mirror, partner, and ultimately his historian. Together they rediscover a clay tablet bearing his original name in a Venetian bookseller&#039;s back room (prompt 68a, 1704 CE), and in a ruined estate outside Smyrna Mirelde finds the remains of a life Karmiš can no longer remember.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;His companion in the final centuries is Mirelde of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Bracha. She is an &lt;/ins&gt;immortal who becomes his mirror, partner, and ultimately his historian. Together they rediscover a clay tablet bearing his original name in a Venetian bookseller&#039;s back room (prompt 68a, 1704 CE), and in a ruined estate outside Smyrna Mirelde finds the remains of a life Karmiš can no longer remember.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;At the story&#039;s end Karmiš retains only five active memories, three diary memories, two marks (&#039;&#039;The Unblinking Eye&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;—a &lt;/del&gt;scar that burns in the presence of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lies—and &lt;/del&gt;&#039;&#039;The Gesture Forbidden&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;—an &lt;/del&gt;involuntary court gesture mistaken for mockery), and three possessions: his diary &#039;&#039;Kept Against Forgetting&#039;&#039;, the clay tablet bearing his name, and the slave-trade folio. Of the eleven characters he encountered, only four remain: Ashurban (his distant maker), Mirelde (his companion), Thoöni&#039;s ghost, and a nameless figure known only as &#039;&#039;The One Who Does Not Answer&#039;&#039;. Over 34 prompts he accumulated 37 experiences, gained and lost a memory slot each, and burned through three separate diaries.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;At the story&#039;s end Karmiš retains only five active memories, three diary memories, two marks (&#039;&#039;The Unblinking Eye&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, a &lt;/ins&gt;scar that burns in the presence of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lies and &lt;/ins&gt;&#039;&#039;The Gesture Forbidden&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, an &lt;/ins&gt;involuntary court gesture mistaken for mockery), and three possessions: his diary &#039;&#039;Kept Against Forgetting&#039;&#039;, the clay tablet bearing his name, and the slave-trade folio. Of the eleven characters he encountered, only four remain: Ashurban (his distant maker), Mirelde (his companion), Thoöni&#039;s ghost, and a nameless figure known only as &#039;&#039;The One Who Does Not Answer&#039;&#039;. Over 34 prompts he accumulated 37 experiences, gained and lost a memory slot each, and burned through three separate diaries.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The character&amp;#039;s story is narrated in the epilogue not by Karmiš himself but by Mirelde, who insists: &amp;quot;He has not died. [...] Just a man who remembered too much, for too long. And chose, in the end, &amp;#039;&amp;#039;peace&amp;#039;&amp;#039;.&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The character&amp;#039;s story is narrated in the epilogue not by Karmiš himself but by Mirelde, who insists: &amp;quot;He has not died. [...] Just a man who remembered too much, for too long. And chose, in the end, &amp;#039;&amp;#039;peace&amp;#039;&amp;#039;.&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-388:rev-389:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=388&amp;oldid=prev</id>
		<title>Mvuijlst: /* Epilogue */</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=388&amp;oldid=prev"/>
		<updated>2026-04-12T11:22:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Epilogue&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:22, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l534&quot;&gt;Line 534:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 534:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;He has not died. Let me say that plainly. There will be no grave&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, no crumbling tomb, no name worn smooth by time&lt;/del&gt;. He is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;alive—quietly&lt;/del&gt;, deliberately, and utterly outside your reach.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;He has not died. Let me say that plainly. There will be no grave. He is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;alive, but quietly&lt;/ins&gt;, deliberately, and utterly outside your reach.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;This book is not a memorial. It is a reckoning.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When I first met him, I did not understand what he was. He wore his years like dust on old vellum—thin, barely visible, but ever present. [...] Over time, I became his mirror, then his partner, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and finally his &lt;/ins&gt;historian.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When I first met him, I did not understand what he was. He wore his years like dust on old vellum—thin, barely visible, but ever present. [...] Over time, I became his mirror, then his partner, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and—finally—his &lt;/del&gt;historian.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;But someone has to begin the telling. Someone has to place the first stone. So this book begins in a house of quiet gardens and low ceilings, where he writes in the mornings and feeds only when he must. [...]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;But someone has to begin the telling. Someone has to place the first stone. So this book begins in a house of quiet gardens and low ceilings, where he writes in the mornings and feeds only when he must. [...]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Just a man who remembered too much, for too long. And chose, in the end, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/del&gt;peace&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Just a man who remembered too much, for too long. And chose, in the end, peace.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;— &amp;#039;&amp;#039;Mirelde&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;— &amp;#039;&amp;#039;Mirelde&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-387:rev-388:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=387&amp;oldid=prev</id>
		<title>Mvuijlst at 11:21, 12 April 2026</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=387&amp;oldid=prev"/>
		<updated>2026-04-12T11:21:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;amp;diff=387&amp;amp;oldid=386&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=386&amp;oldid=prev</id>
		<title>Mvuijlst: /* Example Experience: &quot;The Bellies of Ships and Men&quot; (Prompt 64a) */</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=386&amp;oldid=prev"/>
		<updated>2026-04-12T11:18:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Example Experience: &amp;quot;The Bellies of Ships and Men&amp;quot; (Prompt 64a)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:18, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l703&quot;&gt;Line 703:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 703:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;They arrived in numbers too vast to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;count—pressed &lt;/del&gt;between barrels, chained to holds slick with piss and seawater, branded, sick, broken. And the sailors were not much better.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;They arrived in numbers too vast to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;count: pressed &lt;/ins&gt;between barrels, chained to holds slick with piss and seawater, branded, sick, broken. And the sailors were not much better.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The ships would come in [...]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The ships would come in [...]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-385:rev-386:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=385&amp;oldid=prev</id>
		<title>Mvuijlst: /* Epilogue */</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=385&amp;oldid=prev"/>
		<updated>2026-04-12T11:17:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Epilogue&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:17, 12 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l534&quot;&gt;Line 534:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 534:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;He has not died. Let me say that plainly. There will be no grave&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, no crumbling tomb, no name worn smooth by time&lt;/del&gt;. He is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;alive—quietly&lt;/del&gt;, deliberately, and utterly outside your reach.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;He has not died. Let me say that plainly. There will be no grave. He is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;alive, but quietly&lt;/ins&gt;, deliberately, and utterly outside your reach.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;This book is not a memorial. It is a reckoning.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When I first met him, I did not understand what he was. He wore his years like dust on old vellum—thin, barely visible, but ever present. [...] Over time, I became his mirror, then his partner, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and finally his &lt;/ins&gt;historian.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When I first met him, I did not understand what he was. He wore his years like dust on old vellum—thin, barely visible, but ever present. [...] Over time, I became his mirror, then his partner, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and—finally—his &lt;/del&gt;historian.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;But someone has to begin the telling. Someone has to place the first stone. So this book begins in a house of quiet gardens and low ceilings, where he writes in the mornings and feeds only when he must. [...]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;But someone has to begin the telling. Someone has to place the first stone. So this book begins in a house of quiet gardens and low ceilings, where he writes in the mornings and feeds only when he must. [...]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key yusupov:diff:1.41:old-384:rev-385:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
	<entry>
		<id>https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=384&amp;oldid=prev</id>
		<title>Mvuijlst: Created page with &quot;{{Infobox  | 01_name = Thousand Year Old Vampire – Web Helper | 02_logo = | 03_developer = Michel Vuijlsteke | 04_programming language = Python (Django 5), TypeScript (Vue 3) | 05_operating system = Cross-platform (Web) | 06_genre = Solo RPG Digital Companion | 07_license = custom | 08_website = &lt;code&gt;https://tyov.yusupov.cloud&lt;/code&gt; }}  &#039;&#039;&#039;Thousand Year Old Vampire – Web Helper&#039;&#039;&#039; (&#039;&#039;&#039;TYOV-Web&#039;&#039;&#039;) is a modern web-based implementation of the solo tabletop role-playi...&quot;</title>
		<link rel="alternate" type="text/html" href="https://yusupov.cloud/index.php?title=Thousand_Year_Old_Vampire&amp;diff=384&amp;oldid=prev"/>
		<updated>2026-04-12T11:15:40Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Infobox  | 01_name = Thousand Year Old Vampire – Web Helper | 02_logo = | 03_developer = Michel Vuijlsteke | 04_programming language = Python (Django 5), TypeScript (Vue 3) | 05_operating system = Cross-platform (Web) | 06_genre = Solo RPG Digital Companion | 07_license = custom | 08_website = &amp;lt;code&amp;gt;https://tyov.yusupov.cloud&amp;lt;/code&amp;gt; }}  &amp;#039;&amp;#039;&amp;#039;Thousand Year Old Vampire – Web Helper&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;TYOV-Web&amp;#039;&amp;#039;&amp;#039;) is a modern web-based implementation of the solo tabletop role-playi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox &lt;br /&gt;
| 01_name = Thousand Year Old Vampire – Web Helper&lt;br /&gt;
| 02_logo =&lt;br /&gt;
| 03_developer = Michel Vuijlsteke&lt;br /&gt;
| 04_programming language = Python (Django 5), TypeScript (Vue 3)&lt;br /&gt;
| 05_operating system = Cross-platform (Web)&lt;br /&gt;
| 06_genre = Solo RPG Digital Companion&lt;br /&gt;
| 07_license = custom&lt;br /&gt;
| 08_website = &amp;lt;code&amp;gt;https://tyov.yusupov.cloud&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Thousand Year Old Vampire – Web Helper&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;TYOV-Web&amp;#039;&amp;#039;&amp;#039;) is a modern web-based implementation of the solo tabletop role-playing game &amp;#039;&amp;#039;Thousand Year Old Vampire&amp;#039;&amp;#039; by Tim Hutchings. The application digitises the game&amp;#039;s complex mechanics of memory, experience, and character development, allowing players to create and guide a vampire character across centuries of unlife through an interactive browser interface. The backend is built with &amp;#039;&amp;#039;&amp;#039;Django 5&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Django REST Framework&amp;#039;&amp;#039;&amp;#039;; the frontend is a &amp;#039;&amp;#039;&amp;#039;Vue 3&amp;#039;&amp;#039;&amp;#039; single-page application.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Thousand Year Old Vampire&amp;#039;&amp;#039; is a solo storytelling RPG in which a player creates a vampire character and guides it through an increasingly fragmented existence spanning hundreds or thousands of years. The central tension lies in the vampire&amp;#039;s deteriorating memory: as an immortal being it accumulates experiences, but its ancient mind can only retain a limited number of memories at any time. Players must constantly choose what to remember and what to forget.&lt;br /&gt;
&lt;br /&gt;
TYOV-Web fully implements the game&amp;#039;s rules—character creation, dice-driven prompt navigation, memory management, diary storage, skills, resources, marks, known characters, and game-ending conditions—in a reactive web interface with persistent server-side storage and a complete audit trail.&lt;br /&gt;
&lt;br /&gt;
== Game Rules ==&lt;br /&gt;
&lt;br /&gt;
=== Core Concept ===&lt;br /&gt;
&lt;br /&gt;
The player creates a vampire and progresses through numbered &amp;#039;&amp;#039;&amp;#039;prompts&amp;#039;&amp;#039;&amp;#039; (story scenarios). Each prompt asks the player to narrate what happens to the vampire during a particular era. The game is non-linear: dice rolls determine which prompt to visit next, and most prompts have multiple &amp;#039;&amp;#039;&amp;#039;variations&amp;#039;&amp;#039;&amp;#039; (A, B, C) to prevent repetition.&lt;br /&gt;
&lt;br /&gt;
=== Character Creation ===&lt;br /&gt;
&lt;br /&gt;
Character creation follows a guided six-step wizard:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1. Mortal Life || Establish the vampire&amp;#039;s name, background, and mortal existence&lt;br /&gt;
|-&lt;br /&gt;
| 2. Mortal Characters || Define 2–4 NPCs from the vampire&amp;#039;s human life (friends, mentors, rivals, lovers)&lt;br /&gt;
|-&lt;br /&gt;
| 3. Skills || Choose 2–3 starting skills representing mortal expertise&lt;br /&gt;
|-&lt;br /&gt;
| 4. Resources || Select initial possessions and locations&lt;br /&gt;
|-&lt;br /&gt;
| 5. Combination Experience || Write a pivotal mortal-life experience that ties characters, skills, and resources together&lt;br /&gt;
|-&lt;br /&gt;
| 6. The Turning || Narrate how and why the character was turned into a vampire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Memory System ===&lt;br /&gt;
&lt;br /&gt;
The memory system is the heart of the game:&lt;br /&gt;
&lt;br /&gt;
* A character may hold a maximum of &amp;#039;&amp;#039;&amp;#039;5 active memories&amp;#039;&amp;#039;&amp;#039; (adjustable by prompt rules and permanent effects).&lt;br /&gt;
* Each memory can contain up to &amp;#039;&amp;#039;&amp;#039;3 experiences&amp;#039;&amp;#039;&amp;#039; (individual narrative entries).&lt;br /&gt;
* When the limit is exceeded, the player must &amp;#039;&amp;#039;&amp;#039;forget&amp;#039;&amp;#039;&amp;#039; (permanently lose) a memory, or &amp;#039;&amp;#039;&amp;#039;move&amp;#039;&amp;#039;&amp;#039; one to a &amp;#039;&amp;#039;&amp;#039;diary&amp;#039;&amp;#039;&amp;#039; (if the character possesses one).&lt;br /&gt;
* A &amp;#039;&amp;#039;&amp;#039;diary&amp;#039;&amp;#039;&amp;#039; is a special resource that stores up to &amp;#039;&amp;#039;&amp;#039;4 additional memories&amp;#039;&amp;#039;&amp;#039; outside the active limit.&lt;br /&gt;
* If the diary resource is lost, all memories stored in it are also lost.&lt;br /&gt;
* Some prompts grant or remove permanent memory slots (&amp;lt;code&amp;gt;memory_slot_gain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;memory_slot_loss&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dice Rolling and Prompt Navigation ===&lt;br /&gt;
&lt;br /&gt;
Each turn the player rolls two dice:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;D10&amp;#039;&amp;#039;&amp;#039; (1–10) minus &amp;#039;&amp;#039;&amp;#039;D6&amp;#039;&amp;#039;&amp;#039; (1–6) = result (range: −5 to +9).&lt;br /&gt;
* A &amp;#039;&amp;#039;&amp;#039;positive&amp;#039;&amp;#039;&amp;#039; result moves forward that many prompts.&lt;br /&gt;
* A &amp;#039;&amp;#039;&amp;#039;negative&amp;#039;&amp;#039;&amp;#039; result moves backward.&lt;br /&gt;
* A result of &amp;#039;&amp;#039;&amp;#039;zero&amp;#039;&amp;#039;&amp;#039; stays at the current prompt number but selects the next unused variation.&lt;br /&gt;
&lt;br /&gt;
Variations are visited in order A → B → C. If all variations of a prompt have been used, the system finds the next available variation in prompt order.&lt;br /&gt;
&lt;br /&gt;
=== Turn Structure ===&lt;br /&gt;
&lt;br /&gt;
Each game turn follows this sequence:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Prompt Presentation&amp;#039;&amp;#039;&amp;#039; – The current prompt text and any special rules are displayed.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Dice Roll&amp;#039;&amp;#039;&amp;#039; – The player rolls D10 − D6 to determine the next prompt.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Experience Creation&amp;#039;&amp;#039;&amp;#039; – The player writes at least one narrative experience for the current prompt.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Character Updates&amp;#039;&amp;#039;&amp;#039; – Skills, resources, marks, and known characters may be added, edited, checked, or removed.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Memory Management&amp;#039;&amp;#039;&amp;#039; – The player resolves any memory overflow (forget or move to diary).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Validation&amp;#039;&amp;#039;&amp;#039; – The system verifies all rules are satisfied (at least one experience added, memory limits respected, etc.).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Continue&amp;#039;&amp;#039;&amp;#039; – All pending changes are atomically committed and the game advances to the next prompt.&lt;br /&gt;
&lt;br /&gt;
=== Character Attributes ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Skills&amp;#039;&amp;#039;&amp;#039; || Learned abilities; can be &amp;#039;&amp;#039;normal&amp;#039;&amp;#039; (latent), &amp;#039;&amp;#039;checked&amp;#039;&amp;#039; (used/active), or &amp;#039;&amp;#039;lost&amp;#039;&amp;#039; (permanently removed).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Resources&amp;#039;&amp;#039;&amp;#039; || Possessions or locations; typed as &amp;#039;&amp;#039;portable&amp;#039;&amp;#039; or &amp;#039;&amp;#039;stationary&amp;#039;&amp;#039;. One resource may be flagged as a &amp;#039;&amp;#039;diary&amp;#039;&amp;#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Marks&amp;#039;&amp;#039;&amp;#039; || Physical or psychological scars that accumulate over time.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Known Characters&amp;#039;&amp;#039;&amp;#039; || NPCs the vampire has encountered; typed as &amp;#039;&amp;#039;mortal&amp;#039;&amp;#039; or &amp;#039;&amp;#039;immortal&amp;#039;&amp;#039;; may be lost (dead, vanished, etc.).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Special Prompt Rules ===&lt;br /&gt;
&lt;br /&gt;
Certain prompts carry special mechanics encoded as rules:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Rule !! Effect&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no_experience&amp;lt;/code&amp;gt; || Experience creation is disabled for this turn&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow_name_change&amp;lt;/code&amp;gt; || The player may change the vampire&amp;#039;s name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memory_modification&amp;lt;/code&amp;gt; || The player may edit the text of existing experiences&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memory_slot_loss&amp;lt;/code&amp;gt; || Permanent reduction of memory capacity by 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memory_slot_gain&amp;lt;/code&amp;gt; || Permanent increase of memory capacity by 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;game_over&amp;lt;/code&amp;gt; || The game ends; the player writes an epilogue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game Ending ===&lt;br /&gt;
&lt;br /&gt;
The game ends when the player reaches a prompt with the &amp;lt;code&amp;gt;game_over&amp;lt;/code&amp;gt; rule (or under other conditions defined by the original game). The player writes an &amp;#039;&amp;#039;&amp;#039;epilogue&amp;#039;&amp;#039;&amp;#039;—a final reflection on the vampire&amp;#039;s story—and the character is archived. A statistics summary shows prompt count, memories, experiences, skills, resources, marks, and characters accumulated during the playthrough.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Technology Stack ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Layer !! Technology !! Version&lt;br /&gt;
|-&lt;br /&gt;
| Backend framework || Django || 5.0.6&lt;br /&gt;
|-&lt;br /&gt;
| REST API || Django REST Framework || 3.15.1&lt;br /&gt;
|-&lt;br /&gt;
| Authentication || Simple JWT (custom) || 5.3.0&lt;br /&gt;
|-&lt;br /&gt;
| CORS || django-cors-headers || 4.3.1&lt;br /&gt;
|-&lt;br /&gt;
| Image handling || Pillow || 11.3.0&lt;br /&gt;
|-&lt;br /&gt;
| Production server || Gunicorn || 21.2.0&lt;br /&gt;
|-&lt;br /&gt;
| Frontend framework || Vue.js || 3.5&lt;br /&gt;
|-&lt;br /&gt;
| State management || Pinia || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| Routing || Vue Router || 4.5&lt;br /&gt;
|-&lt;br /&gt;
| HTTP client || Axios || 1.10&lt;br /&gt;
|-&lt;br /&gt;
| CSS framework || Bootstrap || 5.3&lt;br /&gt;
|-&lt;br /&gt;
| Build tool || Vite || 7.0&lt;br /&gt;
|-&lt;br /&gt;
| Language || TypeScript || 5.8&lt;br /&gt;
|-&lt;br /&gt;
| Testing (backend) || pytest + pytest-django || 8.0 / 4.8&lt;br /&gt;
|-&lt;br /&gt;
| Testing (frontend) || Playwright || 1.53&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== High-Level Diagram ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
┌─────────────────────────────────────────────────┐&lt;br /&gt;
│               Vue 3 SPA (TypeScript)            │&lt;br /&gt;
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐│&lt;br /&gt;
│  │  Views   │ │Components│ │  Pinia Stores     ││&lt;br /&gt;
│  │ (7 pages)│ │ (14+)    │ │ auth/game/theme/  ││&lt;br /&gt;
│  │          │ │          │ │ characterCreation  ││&lt;br /&gt;
│  └────┬─────┘ └────┬─────┘ └────────┬─────────┘│&lt;br /&gt;
│       └─────────────┴────────────────┘          │&lt;br /&gt;
│                     │ Axios                     │&lt;br /&gt;
│                     ▼                           │&lt;br /&gt;
├─────────────────────────────────────────────────┤&lt;br /&gt;
│              Django REST API                    │&lt;br /&gt;
│  /api/auth/login    /api/auth/verify            │&lt;br /&gt;
│  /api/characters/   (CRUD + game_state,         │&lt;br /&gt;
│   roll_dice, continue_story, audit_trail)       │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/memories/                 │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/experiences/              │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/skills/                   │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/resources/                │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/marks/                    │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/characters/               │&lt;br /&gt;
│  /api/characters/&amp;lt;id&amp;gt;/pending-changes/          │&lt;br /&gt;
│  /api/prompts/                                  │&lt;br /&gt;
├─────────────────────────────────────────────────┤&lt;br /&gt;
│          Django ORM / SQLite                    │&lt;br /&gt;
│  Character · Memory · Experience · Skill        │&lt;br /&gt;
│  Resource · Mark · GameCharacter · Prompt        │&lt;br /&gt;
│  PendingChange · GameStateSnapshot              │&lt;br /&gt;
└─────────────────────────────────────────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backend ==&lt;br /&gt;
&lt;br /&gt;
=== Django Apps ===&lt;br /&gt;
&lt;br /&gt;
The project is organised into three Django apps plus a settings module:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! App !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;vampire&amp;lt;/code&amp;gt; || Core domain models: Character, Memory, Experience, Skill, Resource, Mark, GameCharacter, Prompt, PendingChange, GameStateSnapshot&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tyov_api&amp;lt;/code&amp;gt; || REST API layer: serialisers, viewsets, URL routing, permissions, middleware&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;authentication&amp;lt;/code&amp;gt; || JWT-based login and token verification endpoints&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tyov_backend&amp;lt;/code&amp;gt; || Django project settings, URL root, WSGI/ASGI configuration&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data Models ===&lt;br /&gt;
&lt;br /&gt;
==== Character ====&lt;br /&gt;
&lt;br /&gt;
The central model, owned by a Django &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; via a ForeignKey:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || CharField(200) || Current name of the vampire&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; || TextField || Background/appearance description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt; || ImageField || Optional character portrait&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;current_prompt&amp;lt;/code&amp;gt; || CharField(10) || ID of the current prompt (e.g. &amp;quot;17a&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;last_dice_roll&amp;lt;/code&amp;gt; || JSONField || Stores D10, D6, and result of the last roll&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;visited_prompts&amp;lt;/code&amp;gt; || JSONField(list) || List of all prompt IDs visited in order&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memory_slots_lost&amp;lt;/code&amp;gt; || IntegerField || Permanent memory slot reductions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memory_slots_gained&amp;lt;/code&amp;gt; || IntegerField || Permanent memory slot increases&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;creation_step&amp;lt;/code&amp;gt; || IntegerField(1–6) || Tracks progress through the creation wizard&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;is_creation_complete&amp;lt;/code&amp;gt; || BooleanField || True when all six creation steps are finished&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;creation_data&amp;lt;/code&amp;gt; || JSONField || Temporary storage during creation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;epilogue&amp;lt;/code&amp;gt; || TextField || Player&amp;#039;s final reflection (set at game end)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;is_completed&amp;lt;/code&amp;gt; || BooleanField || Whether the story has ended&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;completed_at&amp;lt;/code&amp;gt; || DateTimeField || Timestamp of story completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Memory ====&lt;br /&gt;
&lt;br /&gt;
A memory belongs to a Character and holds up to 3 Experiences:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; – descriptive name (unique per character)&lt;br /&gt;
* &amp;lt;code&amp;gt;in_diary&amp;lt;/code&amp;gt; – whether the memory is stored in the diary&lt;br /&gt;
* &amp;lt;code&amp;gt;is_lost&amp;lt;/code&amp;gt; – whether the memory has been forgotten&lt;br /&gt;
&lt;br /&gt;
==== Experience ====&lt;br /&gt;
&lt;br /&gt;
An individual narrative entry within a Memory:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; – optional short description&lt;br /&gt;
* &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; – the narrative text&lt;br /&gt;
* &amp;lt;code&amp;gt;prompt_id&amp;lt;/code&amp;gt; – which prompt generated this experience&lt;br /&gt;
* &amp;lt;code&amp;gt;date_info&amp;lt;/code&amp;gt; – temporal context (e.g. &amp;quot;Winter, 431 CE&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Skill ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; – one of &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;checked&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;lost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Resource ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;resource_type&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;portable&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;stationary&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;is_diary&amp;lt;/code&amp;gt; – flags the special diary resource (constrained to one active diary per character)&lt;br /&gt;
* &amp;lt;code&amp;gt;is_lost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mark ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;is_lost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GameCharacter ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;character_type&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;mortal&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;immortal&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;relationship&amp;lt;/code&amp;gt; – e.g. friend, rival, mentor, love, enemy, neutral&lt;br /&gt;
* &amp;lt;code&amp;gt;is_lost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Prompt ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;prompt_id&amp;lt;/code&amp;gt; – e.g. &amp;quot;17a&amp;quot;, &amp;quot;32b&amp;quot;&lt;br /&gt;
* &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;variation&amp;lt;/code&amp;gt; – parsed components for sorting&lt;br /&gt;
* &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; – the scenario text&lt;br /&gt;
* &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; – special mechanics as comma-separated tokens (e.g. &amp;lt;code&amp;gt;no_experience, allow_name_change&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== PendingChange ====&lt;br /&gt;
&lt;br /&gt;
Temporary storage for changes before they are atomically committed on &amp;quot;Continue&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;change_type&amp;lt;/code&amp;gt; – experience, memory, skill, resource, mark, or character&lt;br /&gt;
* &amp;lt;code&amp;gt;change_data&amp;lt;/code&amp;gt; – JSON payload of the change&lt;br /&gt;
&lt;br /&gt;
==== GameStateSnapshot (Audit Trail) ====&lt;br /&gt;
&lt;br /&gt;
Automatically created each turn to record the complete game state:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;turn_number&amp;lt;/code&amp;gt; – sequential, starting from 1&lt;br /&gt;
* &amp;lt;code&amp;gt;prompt_id&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;next_prompt_id&amp;lt;/code&amp;gt; – transition&lt;br /&gt;
* &amp;lt;code&amp;gt;dice_roll&amp;lt;/code&amp;gt; – raw dice data&lt;br /&gt;
* &amp;lt;code&amp;gt;game_state&amp;lt;/code&amp;gt; – full JSON snapshot of all memories, skills, resources, etc.&lt;br /&gt;
* &amp;lt;code&amp;gt;changes_applied&amp;lt;/code&amp;gt; – JSON array of pending changes that were committed&lt;br /&gt;
* &amp;lt;code&amp;gt;created_at&amp;lt;/code&amp;gt; – timestamp&lt;br /&gt;
&lt;br /&gt;
=== API Endpoints ===&lt;br /&gt;
&lt;br /&gt;
All endpoints require JWT authentication (except login).&lt;br /&gt;
&lt;br /&gt;
==== Authentication ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/auth/login/&amp;lt;/code&amp;gt; || Authenticate with username/password; returns JWT token&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/auth/verify/&amp;lt;/code&amp;gt; || Verify current token and return user info&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Login is rate-limited to 5 requests per minute per IP.&lt;br /&gt;
&lt;br /&gt;
==== Characters ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/characters/&amp;lt;/code&amp;gt; || List all characters for the authenticated user&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/characters/&amp;lt;/code&amp;gt; || Create a new character&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/characters/{id}/&amp;lt;/code&amp;gt; || Retrieve full character detail (prefetched relations)&lt;br /&gt;
|-&lt;br /&gt;
| PUT/PATCH || &amp;lt;code&amp;gt;/api/characters/{id}/&amp;lt;/code&amp;gt; || Update character fields&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || &amp;lt;code&amp;gt;/api/characters/{id}/&amp;lt;/code&amp;gt; || Delete a character&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/characters/{id}/game_state/&amp;lt;/code&amp;gt; || Complete game state including prompt, validation, dice info&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/characters/{id}/roll_dice/&amp;lt;/code&amp;gt; || Roll D10 − D6 and store the result&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/api/characters/{id}/continue_story/&amp;lt;/code&amp;gt; || Validate, commit pending changes, advance to next prompt&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/characters/{id}/audit_trail/&amp;lt;/code&amp;gt; || View turn-by-turn audit history&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/characters/{id}/game-state-changes/&amp;lt;/code&amp;gt; || Timeline of state changes between turns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Nested Character Resources ====&lt;br /&gt;
&lt;br /&gt;
For each character, full CRUD is available on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/memories/&amp;lt;/code&amp;gt; (plus &amp;lt;code&amp;gt;move_to_diary&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;restore_lost_memory&amp;lt;/code&amp;gt; actions)&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/experiences/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/skills/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/resources/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/marks/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/characters/&amp;lt;/code&amp;gt; (known NPCs)&lt;br /&gt;
* &amp;lt;code&amp;gt;/api/characters/{id}/pending-changes/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Prompts ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/prompts/&amp;lt;/code&amp;gt; || List all game prompts&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/api/prompts/{prompt_id}/&amp;lt;/code&amp;gt; || Retrieve a single prompt by ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Permissions and Security ===&lt;br /&gt;
&lt;br /&gt;
* All character data is scoped to the authenticated user via &amp;lt;code&amp;gt;IsCharacterOwner&amp;lt;/code&amp;gt; permission.&lt;br /&gt;
* JWT tokens are sent as &amp;lt;code&amp;gt;Authorization: Bearer {token}&amp;lt;/code&amp;gt; headers.&lt;br /&gt;
* The login endpoint is throttled (5/minute) to prevent brute-force attacks.&lt;br /&gt;
* All pending changes are processed inside a database &amp;#039;&amp;#039;&amp;#039;transaction&amp;#039;&amp;#039;&amp;#039; to guarantee atomicity.&lt;br /&gt;
* CORS headers are configured via &amp;lt;code&amp;gt;django-cors-headers&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Frontend ==&lt;br /&gt;
&lt;br /&gt;
=== Views (Pages) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! View !! Route !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;LoginView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/login&amp;lt;/code&amp;gt; || Authentication form; redirects authenticated users to home&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;HomeView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; || Dashboard showing all active characters in a card grid&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;CharacterCreationView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/character-creation/:id&amp;lt;/code&amp;gt; || Six-step creation wizard&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;GameView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/game/:characterId&amp;lt;/code&amp;gt; || Main game loop: prompt display, experience form, dice rolling, entity management, memory display&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;GameEndedView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/game/:characterId/ended&amp;lt;/code&amp;gt; || End-of-story screen with statistics and epilogue&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;RecordsView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/records&amp;lt;/code&amp;gt; || Archive of current and completed characters&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;StoryView&amp;#039;&amp;#039;&amp;#039; || &amp;lt;code&amp;gt;/story/:characterId&amp;lt;/code&amp;gt; || Narrative timeline with experience history, character stats sidebar, and epilogue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All routes except &amp;lt;code&amp;gt;/login&amp;lt;/code&amp;gt; require authentication. The router guard redirects unauthenticated users.&lt;br /&gt;
&lt;br /&gt;
=== Key Components ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;PromptSection&amp;#039;&amp;#039;&amp;#039; || Displays the current prompt text, special rules, and dice roll results&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;ExperienceForm&amp;#039;&amp;#039;&amp;#039; || Form for writing new experiences with title, date, content, and memory selection&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;MemoriesDisplay&amp;#039;&amp;#039;&amp;#039; || Shows active, diary, and lost memories with experience counts; includes move-to-diary, delete, and restore actions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;GameDataSection&amp;#039;&amp;#039;&amp;#039; || Reusable list for skills, resources, or marks with add/edit/delete controls&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;CharactersSection&amp;#039;&amp;#039;&amp;#039; || Grid of known NPCs with type badges and edit/delete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;EntityCreationWindow&amp;#039;&amp;#039;&amp;#039; || Draggable modal for creating/editing skills, resources, marks&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;CharacterCreationWindow&amp;#039;&amp;#039;&amp;#039; || Draggable modal for creating/editing NPC characters&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;ExperienceEditWindow&amp;#039;&amp;#039;&amp;#039; || Window for editing existing experience text&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;DiaryCreationModal&amp;#039;&amp;#039;&amp;#039; || Modal for creating a diary resource and moving a memory into it&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;ConfirmationDialog&amp;#039;&amp;#039;&amp;#039; || Generic confirmation dialog for destructive actions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;ValidationWarning&amp;#039;&amp;#039;&amp;#039; || Displays validation errors when game rules are not satisfied&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== State Management (Pinia) ===&lt;br /&gt;
&lt;br /&gt;
Four Pinia stores manage application state:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Store !! Responsibility&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;auth&amp;#039;&amp;#039;&amp;#039; || JWT token, user object, login/logout, token expiry handling&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;game&amp;#039;&amp;#039;&amp;#039; || Characters list, current character, game state, all CRUD actions for entities, dice rolling, story continuation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;characterCreation&amp;#039;&amp;#039;&amp;#039; || Multi-step wizard data, initial character creation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;theme&amp;#039;&amp;#039;&amp;#039; || Dark/light mode toggle with localStorage persistence&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== API Service Layer ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;api.ts&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Axios instance with base URL auto-detection (development vs. production), request interceptor for JWT headers, response interceptor for 401/token-expiry handling.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;gameService.ts&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – All API call methods: authentication, character CRUD, dice rolling, story continuation, memory/experience/skill/resource/mark/character management.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;entityService.ts&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Generic &amp;lt;code&amp;gt;EntityService&amp;lt;/code&amp;gt; class instantiated for skills, resources, marks, and characters for DRY CRUD operations.&lt;br /&gt;
&lt;br /&gt;
=== Composables ===&lt;br /&gt;
&lt;br /&gt;
Vue composables encapsulate reusable business logic:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useGameData()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Computed properties derived from the game store (current character, memories, skills, resources, etc.)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useExperienceForm()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Form state, validation, memory selection, and reset logic&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useEntityManagement()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Generic CRUD operations with optional confirmation dialogs&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useSkillManagement()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useResourceManagement()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useMarkManagement()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useMemoryManagement()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Specialised wrappers&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useConfirmationDialog()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Promise-based modal confirmation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useMemoryDisplay()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Display logic for memories including pending-change awareness&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;useExperienceDisplay()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Markdown rendering for experience content&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;usePendingChangesDisplay()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; – Badge rendering for undo-able pending changes&lt;br /&gt;
&lt;br /&gt;
== Audit Trail ==&lt;br /&gt;
&lt;br /&gt;
The application includes an automatic audit trail that captures the complete game state every time the player advances to a new prompt.&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;&amp;#039;GameStateSnapshot&amp;#039;&amp;#039;&amp;#039; records:&lt;br /&gt;
&lt;br /&gt;
* The turn number (sequential from 1)&lt;br /&gt;
* The prompt transition (e.g. 36a → 34a)&lt;br /&gt;
* The dice roll&lt;br /&gt;
* A complete JSON snapshot of all memories, skills, resources, marks, and known characters&lt;br /&gt;
* All pending changes that were committed&lt;br /&gt;
&lt;br /&gt;
The audit trail is accessible via:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;GET /api/characters/{id}/audit_trail/&amp;lt;/code&amp;gt; with optional &amp;lt;code&amp;gt;?turn=N&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;?limit=N&amp;lt;/code&amp;gt; parameters&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Management command&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;python manage.py view_audit_trail {id} [--summary] [--turn N] [--export file.json]&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Timeline API&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;GET /api/characters/{id}/game-state-changes/&amp;lt;/code&amp;gt; for a structured timeline of all state changes&lt;br /&gt;
&lt;br /&gt;
== Deployment ==&lt;br /&gt;
&lt;br /&gt;
=== Local Development ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\startup.ps1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script creates a virtual environment, installs dependencies, runs migrations, and starts both the Django backend (&amp;lt;code&amp;gt;http://localhost:8000&amp;lt;/code&amp;gt;) and the Vue dev server (&amp;lt;code&amp;gt;http://localhost:5173&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;DJANGO_ENV=production&amp;lt;/code&amp;gt;&lt;br /&gt;
* Build the frontend: &amp;lt;code&amp;gt;cd frontend &amp;amp;&amp;amp; npm run build&amp;lt;/code&amp;gt;&lt;br /&gt;
* Serve with Gunicorn behind a reverse proxy&lt;br /&gt;
* Static files are collected into the &amp;lt;code&amp;gt;static/&amp;lt;/code&amp;gt; directory&lt;br /&gt;
* The production frontend points to &amp;lt;code&amp;gt;https://tyov.yusupov.cloud&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example: A Finished Character ==&lt;br /&gt;
&lt;br /&gt;
The following is an example of a character from an actual playthrough stored in the application database. It demonstrates how the game&amp;#039;s mechanics play out over an extended narrative.&lt;br /&gt;
&lt;br /&gt;
=== Karmiš (formerly Ekurzu / Naram) ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Naram was a temple scribe in the ancient city of Mari: meticulous, observant, and deeply entangled in the political and spiritual life of the city. His life was shaped by clay tablets, omens, and whispered secrets carried through palace corridors and temple courtyards. Behind his calm demeanor lies a mind constantly at work—recording, interpreting, and surviving.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prompts visited:&amp;#039;&amp;#039;&amp;#039; 34 prompts across variations, including: 1a, 4a, 11a–c, 12a, 17a, 20a, 24a, 25a, 32a–b, 34a–36a, 37a–41c, 43a–c, 47a, 52a, 57a, 64a, 66a, 68a, 71a, 73a.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Final prompt:&amp;#039;&amp;#039;&amp;#039; 73a&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Memory slots lost:&amp;#039;&amp;#039;&amp;#039; 1 · &amp;#039;&amp;#039;&amp;#039;Memory slots gained:&amp;#039;&amp;#039;&amp;#039; 1 (net effect: standard 5-memory limit)&lt;br /&gt;
&lt;br /&gt;
==== Epilogue ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
He has not died. Let me say that plainly. There will be no grave, no crumbling tomb, no name worn smooth by time. He is alive—quietly, deliberately, and utterly outside your reach.&lt;br /&gt;
&lt;br /&gt;
This book is not a memorial. It is a reckoning.&lt;br /&gt;
&lt;br /&gt;
When I first met him, I did not understand what he was. He wore his years like dust on old vellum—thin, barely visible, but ever present. [...] Over time, I became his mirror, then his partner, and—finally—his historian.&lt;br /&gt;
&lt;br /&gt;
But someone has to begin the telling. Someone has to place the first stone. So this book begins in a house of quiet gardens and low ceilings, where he writes in the mornings and feeds only when he must. [...]&lt;br /&gt;
&lt;br /&gt;
Just a man who remembered too much, for too long. And chose, in the end, &amp;#039;&amp;#039;peace&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
— &amp;#039;&amp;#039;Mirelde&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Statistics ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Metric !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total memories || 16&lt;br /&gt;
|-&lt;br /&gt;
| Active memories || 5&lt;br /&gt;
|-&lt;br /&gt;
| Diary memories || 3&lt;br /&gt;
|-&lt;br /&gt;
| Lost (forgotten) memories || 8&lt;br /&gt;
|-&lt;br /&gt;
| Total experiences || 37&lt;br /&gt;
|-&lt;br /&gt;
| Skills || 11 (3 lost during play)&lt;br /&gt;
|-&lt;br /&gt;
| Resources || 10 (6 lost during play)&lt;br /&gt;
|-&lt;br /&gt;
| Marks || 2&lt;br /&gt;
|-&lt;br /&gt;
| Known characters || 11 (6 lost during play)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Active Memories (at end of game) ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Memory Title !! Location !! Experiences&lt;br /&gt;
|-&lt;br /&gt;
| Memory 1 || Active || &amp;quot;Mortal life&amp;quot; (Initial), &amp;quot;The Name Given in Ash&amp;quot; (24a)&lt;br /&gt;
|-&lt;br /&gt;
| The Thorn and the Quill || Active || 1 experience (35a)&lt;br /&gt;
|-&lt;br /&gt;
| The Light That Does Not Burn || Active || &amp;quot;The Dawn at Mirelde&amp;#039;s Fire&amp;quot; (52a), &amp;quot;The Dust in the Foundation&amp;quot; (57a)&lt;br /&gt;
|-&lt;br /&gt;
| We Were Not Counted Among the Cargo || Active || &amp;quot;The Bellies of Ships and Men&amp;quot; (64a), &amp;quot;Ink Without Meaning&amp;quot; (66a)&lt;br /&gt;
|-&lt;br /&gt;
| Echoes Before the Self Was Named || Active || &amp;quot;The Weight in the Smoke&amp;quot; (71a), &amp;quot;The Clay That Knew My Name&amp;quot; (68a)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Diary Memories ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Memory Title !! Experiences&lt;br /&gt;
|-&lt;br /&gt;
| The Hill That Waits || &amp;quot;The Hollow Beneath the Cairn&amp;quot; (40a), &amp;quot;The Ring Beneath the Clay&amp;quot; (43c), &amp;quot;The Face Returned Through Time&amp;quot; (44a)&lt;br /&gt;
|-&lt;br /&gt;
| Ash of the Ledger || &amp;quot;The Last Ledger Vanishes&amp;quot; (38a), &amp;quot;The Fog Beneath Names&amp;quot; (39b), &amp;quot;The Weight of Unspoken Words&amp;quot; (34a)&lt;br /&gt;
|-&lt;br /&gt;
| The Fever-Ledger || &amp;quot;The Illness in Karkheda&amp;quot; (36a), &amp;quot;The Name That Returns in Ash&amp;quot; (41c), &amp;quot;The Echo That Cannot Translate&amp;quot; (47a)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lost Memories ====&lt;br /&gt;
&lt;br /&gt;
Eight memories were forgotten over the course of the game, including &amp;quot;The Forged Omen&amp;quot; (Memory 2), &amp;quot;Hessa&amp;#039;s Last Message&amp;quot; (Memory 3), &amp;quot;Duel of Stars and Signs&amp;quot; (Memory 4), &amp;quot;The Turning&amp;quot;, &amp;quot;The Name That Cannot Burn&amp;quot;, &amp;quot;The Blood Between Accusations&amp;quot;, &amp;quot;Trade Beneath Empire&amp;quot;, and &amp;quot;What Was Meant to Last&amp;quot;. These losses illustrate the game&amp;#039;s core mechanic: as new experiences accumulate, the vampire is forced to sacrifice older memories, creating a poignant sense of identity erosion across the centuries.&lt;br /&gt;
&lt;br /&gt;
==== Skills ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Skill !! Status !! Description (excerpt)&lt;br /&gt;
|-&lt;br /&gt;
| Ash-Tongue || {{Checked}} || &amp;quot;I speak in soot and suggestion, in the cracks between laws.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Bloodthirsty || {{Lost}} || &amp;quot;The scent of mortal blood calls to me like a hymn in the dark.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Ceremonial Composure || {{Checked}} || &amp;quot;In the presence of gods or kings, my face is unreadable.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Decipher Ancient Texts || {{Lost}} || &amp;quot;I can read languages long dead and spot forgeries.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| I Control the Beast || {{Lost}} || &amp;quot;When the thirst rises, I do not flinch. I meet the monster&amp;#039;s gaze.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Ledger Without End || Normal || &amp;quot;Born from the quiet rituals of inventory and account.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Physick of the Pale Vein || Normal || &amp;quot;I feed gently, beneath the guise of care.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Remain in Unknowing || {{Checked}} || &amp;quot;I do not flee the edges of memory.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Silent Cartography || {{Checked}} || &amp;quot;I trace the unseen paths between people, places, and power.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Snare and Stillness || {{Checked}} || &amp;quot;I move with silence that makes mortals forget they heard me.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Tongue of the Unnamed || Normal || &amp;quot;I no longer understand the languages of my past, but I wear the sounds of others like masks.&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Resource !! Type !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Kept Against Forgetting || Portable / &amp;#039;&amp;#039;&amp;#039;Diary&amp;#039;&amp;#039;&amp;#039; || Active || The character&amp;#039;s diary; written with Mirelde&lt;br /&gt;
|-&lt;br /&gt;
| Tablet Bearing My Name || Portable || Active || A clay tablet from the ancient past, rediscovered&lt;br /&gt;
|-&lt;br /&gt;
| The Margins of Manifest || Portable || Active || A cipher-folio cataloguing names of the enslaved&lt;br /&gt;
|-&lt;br /&gt;
| Burrowed Sanctum || Portable || Lost || An earthen chamber beneath a forgotten altar&lt;br /&gt;
|-&lt;br /&gt;
| Chamber of Whispers || Stationary || Lost || A hidden storeroom beneath the temple of Ishtar&lt;br /&gt;
|-&lt;br /&gt;
| Clay Tablets and Reed Stylus || Portable || Lost || Writing implements used by instinct, not understanding&lt;br /&gt;
|-&lt;br /&gt;
| Hidden Archive Tablet || Portable || Lost || A tablet inscribed with dynasty-breaking truths&lt;br /&gt;
|-&lt;br /&gt;
| The Monastery Diary || Portable / Diary || Lost || A former diary, lost when the monastery fell&lt;br /&gt;
|-&lt;br /&gt;
| The Silent Authority || Portable || Lost || A carved seal whose symbols can no longer be read&lt;br /&gt;
|-&lt;br /&gt;
| The Walls of Forgetting || Stationary / Diary || Lost || Memory carvings in five scripts beneath a forgotten shrine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Known Characters ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Type !! Relationship !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Ashurban the Veiled || Immortal || Neutral || Active&lt;br /&gt;
|-&lt;br /&gt;
| Mirelde of Bracha || Immortal || Friend || Active&lt;br /&gt;
|-&lt;br /&gt;
| The One Who Does Not Answer || Mortal || Neutral || Active&lt;br /&gt;
|-&lt;br /&gt;
| Thoöni (spectral) || Immortal || Neutral || Active&lt;br /&gt;
|-&lt;br /&gt;
| Belatu || Mortal || Rival || Lost&lt;br /&gt;
|-&lt;br /&gt;
| Ennatum || Mortal || Friend || Lost&lt;br /&gt;
|-&lt;br /&gt;
| Hessa || Mortal || Love || Lost&lt;br /&gt;
|-&lt;br /&gt;
| Ibbi-Zamri || Mortal || Mentor || Lost&lt;br /&gt;
|-&lt;br /&gt;
| Mekha || Mortal || Enemy || Lost&lt;br /&gt;
|-&lt;br /&gt;
| Pelagon || Mortal || Enemy || Lost&lt;br /&gt;
|-&lt;br /&gt;
| Thoöni (scholar) || Mortal || Friend || Lost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Marks ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mark !! Description&lt;br /&gt;
|-&lt;br /&gt;
| The Unblinking Eye || An ancient eye-like scar below the collarbone; burns faintly in the presence of lies&lt;br /&gt;
|-&lt;br /&gt;
| The Gesture Forbidden || An involuntary three-fingered gesture of silence, often mistaken for mockery&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example Experience: &amp;quot;The Bellies of Ships and Men&amp;quot; (Prompt 64a) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
They arrived in numbers too vast to count—pressed between barrels, chained to holds slick with piss and seawater, branded, sick, broken. And the sailors were not much better.&lt;br /&gt;
&lt;br /&gt;
The ships would come in [...]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Date: around 1510 CE&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This experience is part of the memory &amp;quot;We Were Not Counted Among the Cargo&amp;quot;, illustrating the vampire&amp;#039;s witness to the Atlantic slave trade—one of many historical eras the character passes through during a millennium-spanning story.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Backend ===&lt;br /&gt;
&lt;br /&gt;
Tests are run with &amp;#039;&amp;#039;&amp;#039;pytest&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;pytest-django&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pytest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test files include:&lt;br /&gt;
* &amp;lt;code&amp;gt;vampire/test_models.py&amp;lt;/code&amp;gt; – model unit tests&lt;br /&gt;
* &amp;lt;code&amp;gt;tyov_api/test_api.py&amp;lt;/code&amp;gt; – API endpoint integration tests&lt;br /&gt;
* &amp;lt;code&amp;gt;tyov_api/test_models.py&amp;lt;/code&amp;gt; – API model tests&lt;br /&gt;
* &amp;lt;code&amp;gt;authentication/test_views.py&amp;lt;/code&amp;gt; – authentication tests&lt;br /&gt;
&lt;br /&gt;
=== Frontend ===&lt;br /&gt;
&lt;br /&gt;
End-to-end tests use &amp;#039;&amp;#039;&amp;#039;Playwright&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd frontend&lt;br /&gt;
npx playwright test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test specs include:&lt;br /&gt;
* &amp;lt;code&amp;gt;e2e/character-creation-workflow.spec.ts&amp;lt;/code&amp;gt; – character creation wizard&lt;br /&gt;
* &amp;lt;code&amp;gt;e2e/tyov-game.spec.ts&amp;lt;/code&amp;gt; – game loop testing&lt;br /&gt;
* &amp;lt;code&amp;gt;e2e/vue.spec.ts&amp;lt;/code&amp;gt; – general Vue component tests&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Thousand Year Old Vampire&amp;#039;&amp;#039; by Tim Hutchings – the original tabletop game&lt;br /&gt;
* [[Django (web framework)]]&lt;br /&gt;
* [[Vue.js]]&lt;br /&gt;
* [[Single-page application]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Web applications]]&lt;br /&gt;
[[Category:Role-playing video games]]&lt;br /&gt;
[[Category:Django (web framework) applications]]&lt;br /&gt;
[[Category:Vue.js applications]]&lt;br /&gt;
[[Category:Solo role-playing games]]&lt;/div&gt;</summary>
		<author><name>Mvuijlst</name></author>
	</entry>
</feed>