many changes

This commit is contained in:
2025-04-15 20:51:50 +01:00
parent 129e9021c4
commit 403e01722b
2 changed files with 374 additions and 119 deletions

View File

@@ -9,6 +9,7 @@
font-family: lexend, roboto, sans serif; font-family: lexend, roboto, sans serif;
color: white; color: white;
background-color: rgb(22,16,18); background-color: rgb(22,16,18);
scroll-behavior: smooth;
} }
body { body {
margin: 0; margin: 0;
@@ -37,6 +38,9 @@
width:100%; width:100%;
z-index:1; z-index:1;
} }
#header-spacer {
height: var(--headheight);
}
#controls { #controls {
text-align: right; text-align: right;
} }
@@ -171,7 +175,7 @@
h1,h2,h3,h4,h5,h6 { h1,h2,h3,h4,h5,h6 {
margin-top:0; margin-top:0;
margin-bottom:0; /* margin-bottom:0; */
font-weight: unset; font-weight: unset;
/* border-left:8pt solid white; */ /* border-left:8pt solid white; */
/* padding-left:8pt; */ /* padding-left:8pt; */
@@ -238,8 +242,8 @@
z-index:-1; z-index:-1;
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;
/* transition:background-image 1s; */ /* transition:background-image 0.1s; */
transition:opacity 5s; transition:opacity 0.5s;
opacity:0; opacity:0;
background-position: center top; background-position: center top;
} }
@@ -271,7 +275,25 @@
font-style: italic; font-style: italic;
opacity: .75; opacity: .75;
} }
a {
color: rgb(255,64,128);
/* color: white; */
text-decoration: none;
/* border-radius:1em; */
/* background-color: rgb(146,0,60); */
/* border: 2pt solid white; */
/* padding: 0 .5em 0 .5em; */
}
/*#content [id]::before {
content: '';
display:block;
position:relative;
top: -250px;
visibility: hidden;
}*/
#content [id] {
scroll-margin-top: calc(var(--headheight) + 1em);
}
.c1,.c2,.c3,.c4,.c5,.c6,.c7,.c8,.c9,.c10 { .c1,.c2,.c3,.c4,.c5,.c6,.c7,.c8,.c9,.c10 {
display:none; display:none;
} }
@@ -323,6 +345,23 @@
display:revert; display:revert;
} }
.cle1,.cle2,.cle3,.cle4,.cle5,.cle6,.cle7,.cle8,.cle9,.cle10 {
display:none;
}
.show-cle1 .cle1,
.show-cle2 .cle2,
.show-cle3 .cle3,
.show-cle4 .cle4,
.show-cle5 .cle5,
.show-cle6 .cle6,
.show-cle7 .cle7,
.show-cle8 .cle8,
.show-cle9 .cle9,
.show-cle10 .cle10
{
display:revert;
}
</style> </style>
</head> </head>
@@ -390,11 +429,10 @@
A Modifier provided by the Source above ("Ring of Perception"). A Modifier provided by the Source above ("Ring of Perception").
</p> </p>
</div>
<div class="section c2"> <div class="section c2">
<h2>Modifiers</h2> <h3>Modifiers</h3>
<p>Modifiers are any attribute of a Character which increases or decreases their chance of passing a check.<span class="c3"><br />For example: skills, damage, buffs and debuffs, etc.</span></p> <p class="c10 aside notes">This section requires more work.</p>
<p>Modifiers are any attribute of a Character which increases or decreases their chance of passing a Check.<span class="c2 minor"><br />For example: skills, damage, buff and debuff effects, etc.</span></p>
<p class="c3"> <p class="c3">
Modifier names define the 'scope' they are relevant in. Modifier names define the 'scope' they are relevant in.
@@ -402,17 +440,206 @@
</div> </div>
<div class="section c2"> <div class="section c2">
<h2>Sources</h2> <h3>Sources</h3>
<p>Sources are anything which can provide Modifiers to a Character.<span class="c3"><br />For example: items, enchantments, or the Character themselves.</span></p> <p>Sources are anything which can provide Modifiers to a Character.<span class="c2 minor"><br />For example: items, buffs and debuffs, or the Character themselves.</span></p>
</div>
</div>
<div class="section">
<h2>Character Creation</h2>
<p class="c10 aside notes">This section requires more work.</p>
<div class="section c2">
<h2>Campaign Limits</h2>
<p class="c10 aside notes">This section requires more work.</p>
<p>
Each Campaign can impose limits on which Characters can participate.
<br />
The common means to do so are detailed below.
</p>
<div class="section c2">
<h2 id="balance">Balance</h2>
<p class="c7 aside caution">This implementation is somewhat inelegant and is likely to change.</p>
<p class="c10 aside notes">This section requires more work, specifically better detail levels, and some character-sheet examples.</p>
<p>
Balance is the current points spent improving a Character.
<br />
<span class="minor">
It starts at zero, and can go negative.
</span>
</p>
<p></p>
<p>
Any Modifier or Source which is intended as a permanent part of a Character counts towards Balance.
<br />
<span class="minor">
This includes everything the Player chooses.
</span>
</p>
<p>
Modifiers contribute their total value to Balance, meaning the sum of their <span class="mono">+</span> and <span class="mono">-</span> values.
</p>
<p>
Some Sources can also contribute to Balance, which are usually custom packages of Modifiers, such as racials. These are usually defined alongside a Balance-cost.
</p>
<div class="aside">
<p>
On the Character Sheet, a Modifier or Source which contributes towards Balance can be marked with a letter <span class="mono">b</span> at the end of the line to make this easier to track.
</p>
<p>
Sources with a custom Balance-contibution can be marked as, for example <span class="mono">b+4</span> or <span class="mono">b-2</span> for plus 4 and minus 2 Balance respectively.
</p>
</div>
<p>
The Storyteller should set a Balance limit for each campaign.
<br />
If a Character's Balance exceeds that limit, they are not allowed to participate in the Campaign.
</p>
<p>The recommended default limit is 25.</p>
</div>
<div class="section c3">
<h2>Cognia</h2>
<p class="c10 aside notes">This section requires more work.</p>
<p>
Cognia is a measure of the mental weight required to include this Character in a campaign accurately.
</p>
<p><a href="#balance">Balanced</a>-for Modifiers and Sources with <span class="mono">-</span> values increase Cognia (1 per Modifier/Source).</p>
<div class="c6 aside commentary">
<p>
Players are naturally motivated to remember Modifiers with <span class="mono">+</span> values, but not so for the <span class="mono">-</span> values. Given this, the Storyteller needs to always remember which Modifiers may apply, not just during Checks but during any interaction to which the Modifier might be relevant.
</p>
<p>
A Campaign with 5 Player-Characters, each of whom have 3 Negative Modifiers, would require the Storyteller to reliably remember 15 Modifiers at all times. This would be difficult, and thus this mechanism helps regulate this potential excess.
</p>
</div>
<p>
The Storyteller may set a Cognia limit for each campaign.
<br />
If a Character's Cognia exceeds that limit, they are not allowed to participate in the Campaign.
</p>
<p>It is recommended to start with a conservative Cognia limit of 2 per Character.</p>
</div>
</div>
</div>
</div>
<div class="section c7">
<h1 id="tasks">Tasks</h1>
<p>
Anything a Character can attempt to do, but might not complete successfully is a Task.
<br />
Tasks are usually used with Checks, and don't need to be recorded otherwise.
</p>
<p class="aside">
Most Tasks are implicit, are communicated as part of a Check, are Ephemeral, and only have a Workload rating.
<br />
For more advanced Tasks, such as a long project, it may be worth communicating the Task explicitly.
</p>
<p>
Tasks are recorded as Sources, and defined by the following information:
<ul>
<li>Workload rating</li>
<li>Ephemeral or Persistent</li>
<li>Complexity rating (Defaults to 0)</li>
<li>Current Progress (Starts at 0)</li>
</ul>
</p>
<div class="section">
<h2>Workload</h2>
<p>
The Workload of a task is the total Progress required to complete it.
</p>
<p>
The Storyteller may choose to tell Players the Workload, especially if the Character would be able to ascertain it.
</p>
</div>
<div class="section">
<h2>Ephemeral or Persistent</h2>
<p>
Ephemeral Tasks either Succeed or Fail as soon as they are progressed.
<br />
Most Tasks are Ephemeral.
<br />
Ephemeral Tasks don't usually need to be recorded.
</p>
<p>
Persistent Tasks can exist in a partially-completed state, and can be progressed by multiple Checks over time.
</p>
</div>
<div class="section">
<h2>Complexity Rating</h2>
<p>
A Task's Complexity Rating is the minimum Success Rating required to make any progress in it.
</p>
<p class="aside">
For example, for a Task with a Complexity of 6, if a Check to progress the Task has a Success Rating of 5, no progress is made.
<br />
If the Success Rating is 6, then 6 progress is made.
</p>
</div>
<div class="section">
<h2>Progressing a Task</h2>
<p>
First, run a Check for the Character, to determine the Success Rating in this Task.
</p>
<p>
If the Success Rating is greater than or equal to the Task's Complexity, add the Success Rating to the Task's Progress.
</p>
<p>
If the Progress is greater than or equal to the Workload, the Task completes.
</p>
<div class="section">
<h3>Gradient Completion</h3>
<p>
As the Progress of a Task approaches the required amount, a less-than-total conclusion can be reached, ending the Task.
</p>
<p>
This is at the Storyteller's discretion, but should not be done if the Player wants to fully complete the Task.
</p>
</div>
</div> </div>
</div> </div>
<div class="section"> <div class="section">
<h1>Checks</h1> <h1>Checks</h1>
<p>Whenever a Character may fail at something they are trying to do, run a Check.</p> <p class="cl7">Whenever a Character may fail at something they are trying to do, run a Check.</p>
<p class="c7">Checks are usually run to determine the level of success a Character has at a <a href="#tasks">Task</a>.</p>
<div class="section"> <div class="section cl7">
<h2>Difficulty</h2> <h2>Difficulty</h2>
<p> <p>
The Storyteller determines a Difficulty, usually between 1 and 10. The Storyteller determines a Difficulty, usually between 1 and 10.
@@ -420,16 +647,29 @@
<p class="c4"> <p class="c4">
The Storyteller may choose to tell Players the difficulty<span class="c5">, especially if the Character would be able to ascertain it</span>. The Storyteller may choose to tell Players the difficulty<span class="c5">, especially if the Character would be able to ascertain it</span>.
</p> </p>
<p class="c3">
The Storyteller may choose to use a range of values, allowing partial success.
<br />
This is called Gradient Difficulty.
<br />
<span class="minor">
For example, a Check might give a better result with a Success Rating of 3 than with 1, even though 6 is required for a complete success.
</span>
</p>
</div> </div>
<div class="section"> <div class="section">
<h2>Performance</h2> <h2>Performance</h2>
<p class="c10 aside notes">This section requires more work.</p> <p class="c10 aside notes">This section requires more work, particularly in presentation.</p>
<p class="c1"> <p class="c1">
Find Modifiers which are relevant to this Check. Find Modifiers which are relevant to this Check.
<br /> <br />
<span class="ce1 minor">
Use the highest Modifier per source, one for positive, one for negative.
<br />
</span>
<span class="c2"> <span class="c2">
The Storyteller determines whether Modifiers are relevant. The Storyteller determines whether Modifiers are relevant.
</span> </span>
@@ -483,30 +723,23 @@
<div class="section"> <div class="section">
<h3>Boost (Optional)</h3> <h3>Boost (Optional)</h3>
<p class="c10 aside notes">This section requires more work.</p>
<p> <p>
The Character may choose to improve their chances by rolling any number of 6-sided dice. The Character may choose to improve their chances by rolling 6-sided dice.
<br /> <br />
<span class="c4 minor"> If the Storyteller agrees, any RNG method the Storyteller can see can be used.</span> <span class="c4 minor"> If the Storyteller agrees, any RNG method the Storyteller can see can be used.</span>
</p> </p>
<p class="aside c7">
Thematically, the number of rolls represents exertion, and the roll results represent luck.
</p>
<p> <p>
Any roll can be discarded at the cost of taking 1 Stress Damage. If two 1's are rolled in a single check, no further rolls are allowed, and the result is a Catastrophic Failure.
</p>
<p>
If any of the non-discarded rolls are 1, the Character Blunders this Check.
<br /> <br />
<span class="minor c2">Check the Blunder section below.</span> <span class="minor c3">
This incurs a major detrimental narrative side-effect<span class="c5">, unless none are applicable</span>.
</span>
</p> </p>
<p> <p>
Otherwise, the Character chooses one of their results: Otherwise, using the most recent roll, apply the given effect:
<table> <table>
<tr> <tr>
<td>6</td> <td>6</td>
@@ -533,104 +766,107 @@
<td><span class="dice-face">&#9857;</span></td> <td><span class="dice-face">&#9857;</span></td>
<td class="ignore">No Effect</td> <td class="ignore">No Effect</td>
</tr> </tr>
<tr class="c2"> <tr>
<td>1</td> <td>1</td>
<td><span class="dice-face">&#9856;</span></td> <td><span class="dice-face">&#9856;</span></td>
<td>Blunder</td> <td>Simple Failure</td>
</tr> </tr>
</table> </table>
</p> </p>
<div class="section c2">
<h4>Blunder</h4>
<p>
Roll a 6-sided di.
</p>
<p>
<table>
<tr>
<td>6</td>
<td><span class="dice-face">&#9861;</span></td>
<td>Bypass this Blunder for free, as if you had taken 1 Stress Damage to discard it</td>
</tr>
<tr>
<td>5</td>
<td><span class="dice-face">&#9860;</span></td>
<td>Simple failure</td>
</tr>
<tr>
<td>4</td>
<td><span class="dice-face">&#9859;</span></td>
<td>Moderate undesired side-effect</td>
</tr>
<tr class="c2">
<td>3</td>
<td><span class="dice-face">&#9858;</span></td>
<td>Severe undesired side-effect</td>
</tr>
<tr class="c2">
<td>2</td>
<td><span class="dice-face">&#9857;</span></td>
<td>Very severe undesired side-effect</td>
</tr>
<tr class="c2">
<td>1</td>
<td><span class="dice-face">&#9856;</span></td>
<td>
Cosmic Blunder
<br/>
Roll another 6-sided di.
<br />
Every roll produces undesired side-effects which can originate from or affect anything in the universe.
<br />
The effect is worse the lower the roll result.
</td>
</tr>
</table>
</p>
</div>
</div> </div>
<p> <p class="cl3">
The Success Rating is compared to the Difficulty, and if it is greater or equal, the Challenge is successful, otherwise it fails. The Success Rating is compared to the Difficulty, and if it is greater or equal, the Challenge is successful, otherwise it fails.
</p> </p>
<div class="section c3">
<h2 class="cl7">Completion</h2>
<p class="cl7">
The Storyteller determines the outcome by comparing the Success Rating to the Difficulty.
<br />
The result can be failure, partial success, or complete success.
</p>
<h2 class="c7">Success Rating</h2>
<p class="c7">
The Success Rating of this Check can now be used, including to progress a Task.
</p>
</div>
</div> </div>
<div class="section c10"> <div class="section ce1 ce10">
<h1>Vigour</h1>
<p class="c10 aside notes">This section requires more work.</p>
<p class="c10 aside notes">Vigour may be renamed, likely to "Cohesion" or "Stability".</p>
<p class="ce1">Keep track of a Modifier called "Vigour", which starts at zero, and applies to all Checks.</p>
<div class="section">
<h1>Reprieve</h1> <h1>Reprieve</h1>
<p class="c10 aside notes">This section requires more work.</p> <p class="c10 aside notes">This section requires more work.</p>
<p class="ce1">When a Character enters a comfortable situation, coming from a tense or hazardous one, they gain 1-3 Vigour depending on the level of comfort.</p>
</div> </div>
<div class="section c10"> <div class="section">
<h1>Projects</h1>
<p class="c10 aside notes">This section requires more work.</p>
</div>
<div class="section c10">
<h1>Collapse</h1> <h1>Collapse</h1>
<p class="c10 aside notes">This section requires more work.</p> <p class="c10 aside notes">This section requires more work.</p>
<p class="ce1">When Vigour gets low enough, the Character collapses, and cannot take actions.</p>
</div>
<div class="section">
<h1>Focus</h1>
<p class="c10 aside notes">This section requires more work.</p>
<p class="ce1">At any time, a Character can spend 1 Vigour, to "switch focus" to a new Modifier named at their choice, which has +2.</p>
</div>
</div> </div>
<div class="section c10"> <div class="section c10">
<h1>Instant Reaction</h1> <h1>Common Tasks</h1>
<p class="c10 aside notes">This section requires more work.</p>
<p class="c10 aside notes">This section's title should be improved.</p>
<div class="section c2">
<h1>Combat</h1>
<p class="c10 aside notes">This section requires more work.</p>
</div>
<div class="section c10">
<h1>Damage</h1>
<p class="c10 aside notes">This section requires more work.</p> <p class="c10 aside notes">This section requires more work.</p>
</div> </div>
<div class="section c3"> <div class="section c3">
<h1>Common Tasks</h1> <h1>Instant Reaction</h1>
<p class="c10 aside notes">This section requires more work.</p>
<p class="c10 aside notes">This section's title should be improved.</p> <p class="c6 aside notes">
This is intended for Characters with human-like sensory systems, in Campaigns running at relevant timescales.
</p>
<p>
If a Character is confronted by a sudden change of circumstances for which they need to gather information using their senses in preparation for a potential reaction, the Storyteller can initiate an Instant Reaction.
</p>
<p class="aside">
An example of an Instant Reaction scenario is opening a door whilst expecting combat.
</p>
<p>
The Player is told what they can sense in the first tenth of a second.
<br />
This will usually be very vague and general information about shapes, layout, etc.
</p>
<p>
The Player can either choose to act instantly on the limited information, or wait a tiny bit longer for much more detailed information.
<br />
The delay should be half a second for humans, and an equivalent time for different Characters.
</p>
<div class="section c10">
<h1>Damage</h1>
<p class="c10 aside notes">This section requires more work.</p>
</div> </div>
@@ -648,12 +884,18 @@
function updateTexts(){ function updateTexts(){
updateDisplay() updateDisplay()
let classes = ""; let classes = "";
for(let i = 1; i <= input.value; i++) { let v = input.value;
for(let i = 1; i <= 10; i++) {
if(v >= i){
classes += " show-c" + i; classes += " show-c" + i;
} }
for(let i = input.value; i <= 10; i++) { if(v < i){
classes += " show-cl" + i; classes += " show-cl" + i;
} }
if(v <= i){
classes += " show-cle" + i;
}
}
classes += " show-ce" + input.value; classes += " show-ce" + input.value;
body.className = classes.trim(); body.className = classes.trim();
} }
@@ -661,16 +903,26 @@
input.addEventListener("change", updateTexts); input.addEventListener("change", updateTexts);
updateTexts(); updateTexts();
const header = document.querySelector("#header");
const headerSpacer = document.querySelector("#header-spacer");
headerSpacer.style.height = header.offsetHeight;
setInterval(() => {
headerSpacer.style.height = header.offsetHeight;
},1000);
const bg = document.querySelector("#bg"); const bg = document.querySelector("#bg");
bg.style.backgroundImage = "url(\"images/bg/maxima_bg_" + Math.floor(Math.random() * 15) + ".jpg\")"; bg.style.backgroundImage = "url(\"images/bg/maxima_bg_" + Math.floor(Math.random() * 21) + ".jpg\")";
setTimeout(() => {
bg.style.opacity = 1; bg.style.opacity = 1;
},100);
const header = document.querySelector("#header");
const rt = document.querySelector(":root");
var currentHeaderSpace = 0;
function updateHeaderSpacer() {
let oh = header.offsetHeight;
if(oh != currentHeaderSpace) {
console.log("updating header space: " + oh);
currentHeaderSpace = oh;
rt.style.setProperty("--headheight", oh + "px");
}
}
updateHeaderSpacer();
setInterval(updateHeaderSpacer,1000);
</script> </script>

View File

@@ -225,4 +225,7 @@ health
- replace "strain" with a modifier "health" - replace "strain" with a modifier "health"
- better use of the modifier structure than "strain"/"fatigue"/"stress" - better use of the modifier structure than "strain"/"fatigue"/"stress"
- CAN go positive, but only from some forms of reprieve, and possibly limited to maximum positive values - CAN go positive, but only from some forms of reprieve, and possibly limited to maximum positive values
- ? clear all positive health when taking damage?
- some principled way to prevent acquiring this must exist, or at least a clear special case - some principled way to prevent acquiring this must exist, or at least a clear special case
- the word "health", given its wide use in other contexts, may imply death at zero
- perhaps it's time to bring back "vigor"?