This commit is contained in:
2026-06-10 21:31:37 -04:00
parent 01a49c1c30
commit 3e80ce78a0
119 changed files with 6234 additions and 8 deletions
+5
View File
@@ -24,6 +24,11 @@
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather <span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="docs">
<span class="bi bi-file-text-nav-menu" aria-hidden="true"></span> Docs
</NavLink>
</div>
</nav> </nav>
</div> </div>
+20
View File
@@ -0,0 +1,20 @@
namespace Web.Models;
public class NoteInfo
{
public string Slug { get; set; } = "";
public string Title { get; set; } = "";
}
public class NotesIndex
{
public List<NoteInfo> Notes { get; set; } = new();
}
public class NoteDocument
{
public string Slug { get; set; } = "";
public string Title { get; set; } = "";
public string FrontmatterHtml { get; set; } = "";
public string HtmlContent { get; set; } = "";
}
+44
View File
@@ -0,0 +1,44 @@
@page "/docs/{Slug}"
@inject Web.Services.DocsService DocsService
<PageTitle>@(doc?.Title ?? "Not Found")</PageTitle>
@if (loading)
{
<p>Loading...</p>
}
else if (doc == null)
{
<h1>Not Found</h1>
<p>The document "@Slug" could not be found.</p>
<a href="/docs">&larr; Back to Docs</a>
}
else
{
<h1>@doc.Title</h1>
@if (!string.IsNullOrEmpty(doc.FrontmatterHtml))
{
<details class="frontmatter-section" open>
<summary>Frontmatter</summary>
@((MarkupString)doc.FrontmatterHtml)
</details>
}
<div class="markdown-body">
@((MarkupString)doc.HtmlContent)
</div>
}
@code {
[Parameter] public string Slug { get; set; } = "";
private Web.Models.NoteDocument? doc;
private bool loading = true;
protected override async Task OnInitializedAsync()
{
doc = await DocsService.GetNoteAsync(Slug);
loading = false;
}
}
+32
View File
@@ -0,0 +1,32 @@
@page "/docs"
@inject Web.Services.DocsService DocsService
<PageTitle>Docs</PageTitle>
<h1>Documentation</h1>
@if (notes == null)
{
<p>Loading...</p>
}
else
{
<div class="docs-grid">
@foreach (var note in notes.OrderBy(n => n.Title))
{
<a href="/docs/@note.Slug" class="docs-card">
<h3>@note.Title</h3>
</a>
}
</div>
}
@code {
private List<Web.Models.NoteInfo>? notes;
protected override async Task OnInitializedAsync()
{
var index = await DocsService.GetIndexAsync();
notes = index.Notes;
}
}
+2
View File
@@ -1,11 +1,13 @@
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Web; using Web;
using Web.Services;
var builder = WebAssemblyHostBuilder.CreateDefault(args); var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after"); builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddScoped<DocsService>();
await builder.Build().RunAsync(); await builder.Build().RunAsync();
+146
View File
@@ -0,0 +1,146 @@
using System.Net.Http.Json;
using Markdig;
using Web.Models;
namespace Web.Services;
public class DocsService
{
private readonly HttpClient _http;
private NotesIndex? _index;
private static readonly MarkdownPipeline Pipeline = new MarkdownPipelineBuilder()
.UseYamlFrontMatter()
.Build();
public DocsService(HttpClient http)
{
_http = http;
}
public async Task<NotesIndex> GetIndexAsync()
{
if (_index != null)
return _index;
_index = await _http.GetFromJsonAsync<NotesIndex>("docs/notes-index.json")
?? new NotesIndex();
return _index;
}
public async Task<NoteDocument?> GetNoteAsync(string slug)
{
var index = await GetIndexAsync();
var noteInfo = index.Notes.FirstOrDefault(n =>
string.Equals(n.Slug, slug, StringComparison.OrdinalIgnoreCase));
if (noteInfo == null) return null;
try
{
var markdown = await _http.GetStringAsync($"docs/notes/{slug}.md");
return ParseDocument(slug, noteInfo.Title, markdown);
}
catch
{
return null;
}
}
private static NoteDocument ParseDocument(string slug, string title, string markdown)
{
var doc = new NoteDocument
{
Slug = slug,
Title = title
};
var frontmatterLines = new List<string>();
var bodyLines = new List<string>();
var inFrontmatter = false;
var frontmatterDone = false;
foreach (var line in markdown.Replace("\r\n", "\n").Split('\n'))
{
var trimmed = line.Trim();
if (!frontmatterDone && trimmed == "---")
{
if (!inFrontmatter)
{
inFrontmatter = true;
continue;
}
inFrontmatter = false;
frontmatterDone = true;
continue;
}
if (inFrontmatter)
frontmatterLines.Add(line);
else if (frontmatterDone || !string.IsNullOrWhiteSpace(line))
bodyLines.Add(line);
}
if (frontmatterLines.Count > 0)
{
var fmHtml = new System.Text.StringBuilder();
fmHtml.Append("<table class=\"frontmatter\">");
foreach (var line in frontmatterLines)
{
var colonIdx = line.IndexOf(':');
if (colonIdx > 0)
{
var key = line[..colonIdx].Trim();
var value = line[(colonIdx + 1)..].Trim().Trim('"');
fmHtml.Append("<tr><td class=\"fm-key\">");
fmHtml.Append(System.Net.WebUtility.HtmlEncode(key));
fmHtml.Append("</td><td class=\"fm-value\">");
fmHtml.Append(System.Net.WebUtility.HtmlEncode(value));
fmHtml.Append("</td></tr>");
}
else
{
fmHtml.Append("<tr><td colspan=\"2\">");
fmHtml.Append(System.Net.WebUtility.HtmlEncode(line.Trim()));
fmHtml.Append("</td></tr>");
}
}
fmHtml.Append("</table>");
doc.FrontmatterHtml = fmHtml.ToString();
}
var body = string.Join("\n", bodyLines);
body = ConvertWikiLinks(body);
doc.HtmlContent = Markdown.ToHtml(body, Pipeline);
return doc;
}
private static string ConvertWikiLinks(string text)
{
return System.Text.RegularExpressions.Regex.Replace(
text,
@"\[\[([^\]]+)\]\]",
match =>
{
var content = match.Groups[1].Value;
var parts = content.Split('|');
var linkText = parts.Length > 1 ? parts[1].Trim() : parts[0].Trim();
var target = parts[0].Trim();
var slug = Slugify(target);
return $"<a href=\"/docs/{slug}\">{System.Net.WebUtility.HtmlEncode(linkText)}</a>";
});
}
public static string Slugify(string title)
{
var slug = title.ToLowerInvariant()
.Replace(' ', '-')
.Replace("'", "")
.Replace(".", "")
.Replace("(", "")
.Replace(")", "");
slug = System.Text.RegularExpressions.Regex.Replace(slug, @"[^a-z0-9\-]", "");
slug = System.Text.RegularExpressions.Regex.Replace(slug, @"-+", "-");
return slug.Trim('-');
}
}
+24
View File
@@ -0,0 +1,24 @@
$src = Resolve-Path "$PSScriptRoot\..\..\docs\Notes"
$dst = "$PSScriptRoot\wwwroot\docs\notes"
if (Test-Path $dst) { Remove-Item "$dst\*" -Force -ErrorAction SilentlyContinue }
New-Item -ItemType Directory -Path $dst -Force | Out-Null
$entries = @()
Get-ChildItem -Path $src -Filter "*.md" | ForEach-Object {
$base = $_.BaseName
$slug = $base.ToLowerInvariant()
$slug = $slug -replace "'", ""
$slug = $slug -replace "\.", ""
$slug = $slug -replace "[^a-z0-9 -]", ""
$slug = $slug -replace "\s+", "-"
$slug = $slug -replace "-+", "-"
$slug = $slug.Trim('-')
Copy-Item $_.FullName (Join-Path $dst "$slug.md")
$entries += @{ slug = $slug; title = $base }
}
$indexPath = "$PSScriptRoot\wwwroot\docs\notes-index.json"
$index = @{ notes = $entries } | ConvertTo-Json
Set-Content -Path $indexPath -Value $index -Encoding UTF8
+5
View File
@@ -8,8 +8,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Markdig" Version="0.40.0"/>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9"/> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9"/>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" PrivateAssets="all"/> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" PrivateAssets="all"/>
</ItemGroup> </ItemGroup>
<Target Name="SyncDocsNotes" BeforeTargets="BeforeBuild">
<Exec Command="powershell -NoProfile -ExecutionPolicy Bypass -File &quot;$(MSBuildProjectDirectory)\SyncDocs.ps1&quot;"/>
</Target>
</Project> </Project>
+2
View File
@@ -8,3 +8,5 @@
@using Microsoft.JSInterop @using Microsoft.JSInterop
@using Web @using Web
@using Web.Layout @using Web.Layout
@using Web.Models
@using Web.Services
+86
View File
@@ -113,3 +113,89 @@ code {
.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder { .form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
text-align: start; text-align: start;
} }
.bi-file-text-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-file-text' viewBox='0 0 16 16'%3E%3Cpath d='M5 4a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1H5zm-.5 2.5A.5.5 0 0 1 5 6h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zM5 8a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1H5zm0 2a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1H5z'/%3E%3Cpath d='M2 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2zm10-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z'/%3E%3C/svg%3E");
}
.docs-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1rem;
margin-top: 1rem;
}
.docs-card {
display: block;
padding: 0.75rem 1rem;
border: 1px solid #dee2e6;
border-radius: 8px;
text-decoration: none;
color: inherit;
transition: box-shadow 0.15s ease-in-out, border-color 0.15s ease-in-out;
}
.docs-card:hover {
border-color: #1b6ec2;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
text-decoration: none;
}
.docs-card h3 {
margin: 0;
font-size: 1rem;
font-weight: 500;
}
.frontmatter-section {
margin: 1rem 0;
padding: 0.5rem;
border: 1px solid #e9ecef;
border-radius: 6px;
background: #f8f9fa;
}
.frontmatter-section summary {
cursor: pointer;
font-weight: 600;
color: #495057;
padding: 0.25rem 0;
}
table.frontmatter {
width: 100%;
border-collapse: collapse;
margin-top: 0.5rem;
font-size: 0.9rem;
}
table.frontmatter td {
padding: 0.25rem 0.5rem;
border: 1px solid #dee2e6;
vertical-align: top;
}
table.frontmatter td.fm-key {
font-weight: 600;
color: #495057;
white-space: nowrap;
width: 1%;
background: #e9ecef;
}
.markdown-body {
line-height: 1.7;
margin-top: 1rem;
}
.markdown-body h1 { font-size: 1.75rem; margin: 1.5rem 0 0.75rem; }
.markdown-body h2 { font-size: 1.4rem; margin: 1.25rem 0 0.5rem; }
.markdown-body h3 { font-size: 1.15rem; margin: 1rem 0 0.5rem; }
.markdown-body p { margin: 0.5rem 0; }
.markdown-body ul, .markdown-body ol { margin: 0.5rem 0; padding-left: 1.5rem; }
.markdown-body table { border-collapse: collapse; margin: 0.75rem 0; }
.markdown-body th, .markdown-body td { border: 1px solid #dee2e6; padding: 0.4rem 0.6rem; }
.markdown-body th { background: #f8f9fa; }
.markdown-body code { background: #f0f0f0; padding: 0.15rem 0.3rem; border-radius: 3px; font-size: 0.9em; }
.markdown-body pre code { background: none; padding: 0; }
.markdown-body blockquote { border-left: 3px solid #dee2e6; padding-left: 1rem; color: #6c757d; margin: 0.75rem 0; }
+380
View File
@@ -0,0 +1,380 @@
{
"notes": [
{
"slug": "artificer",
"title": "Artificer"
},
{
"slug": "awareness",
"title": "Awareness"
},
{
"slug": "cache-map",
"title": "Cache Map"
},
{
"slug": "card-library",
"title": "Card Library"
},
{
"slug": "concoliator",
"title": "Concoliator"
},
{
"slug": "contents",
"title": "Contents"
},
{
"slug": "crisis-markers",
"title": "Crisis Markers"
},
{
"slug": "crisis-resolution",
"title": "Crisis Resolution"
},
{
"slug": "crisis",
"title": "Crisis"
},
{
"slug": "dirt-roads",
"title": "Dirt Roads"
},
{
"slug": "dolewood-canoe",
"title": "Dolewood Canoe"
},
{
"slug": "e03",
"title": "E.03"
},
{
"slug": "ecology",
"title": "Ecology"
},
{
"slug": "endeavor-tokens",
"title": "Endeavor Tokens"
},
{
"slug": "energy-tokens",
"title": "Energy Tokens"
},
{
"slug": "event-cards",
"title": "Event Cards"
},
{
"slug": "events",
"title": "Events"
},
{
"slug": "explore-phase",
"title": "Explore Phase"
},
{
"slug": "explorer",
"title": "Explorer"
},
{
"slug": "ferinodex",
"title": "Ferinodex"
},
{
"slug": "flora-meeples",
"title": "Flora Meeples"
},
{
"slug": "forest-1",
"title": "Forest 1"
},
{
"slug": "forest-2",
"title": "Forest 2"
},
{
"slug": "forest-3",
"title": "Forest 3"
},
{
"slug": "forest-4",
"title": "Forest 4"
},
{
"slug": "forest-5",
"title": "Forest 5"
},
{
"slug": "forest",
"title": "Forest"
},
{
"slug": "gauzeblade",
"title": "Gauzeblade"
},
{
"slug": "gear-cards",
"title": "Gear Cards"
},
{
"slug": "grass-1",
"title": "Grass 1"
},
{
"slug": "grass-2",
"title": "Grass 2"
},
{
"slug": "grass-3",
"title": "Grass 3"
},
{
"slug": "grass-4",
"title": "Grass 4"
},
{
"slug": "grass-5",
"title": "Grass 5"
},
{
"slug": "grasslands",
"title": "Grasslands"
},
{
"slug": "guide",
"title": "Guide"
},
{
"slug": "hidden-trail-map",
"title": "Hidden Trail Map"
},
{
"slug": "injury-cards",
"title": "Injury Cards"
},
{
"slug": "lake",
"title": "Lake"
},
{
"slug": "losing-the-game",
"title": "Losing the Game"
},
{
"slug": "market",
"title": "Market"
},
{
"slug": "mountain-1",
"title": "Mountain 1"
},
{
"slug": "mountain-2",
"title": "Mountain 2"
},
{
"slug": "mountain-3",
"title": "Mountain 3"
},
{
"slug": "mountain-4",
"title": "Mountain 4"
},
{
"slug": "mountain-5",
"title": "Mountain 5"
},
{
"slug": "mountain",
"title": "Mountain"
},
{
"slug": "paratrepsis-whistle",
"title": "Paratrepsis Whistle"
},
{
"slug": "paved-roads",
"title": "Paved Roads"
},
{
"slug": "perfect-day-1",
"title": "Perfect Day 1"
},
{
"slug": "phonoscopic-headset",
"title": "Phonoscopic Headset"
},
{
"slug": "player-boards",
"title": "Player Boards"
},
{
"slug": "player-meeples",
"title": "Player Meeples"
},
{
"slug": "predator-meeples",
"title": "Predator Meeples"
},
{
"slug": "prepare-phase",
"title": "Prepare Phase"
},
{
"slug": "press-on",
"title": "Press On"
},
{
"slug": "prey-meeples",
"title": "Prey Meeples"
},
{
"slug": "progress",
"title": "Progress"
},
{
"slug": "ranger-badges",
"title": "Ranger Badges"
},
{
"slug": "ranger-meeples",
"title": "Ranger Meeples"
},
{
"slug": "research-station",
"title": "Research Station"
},
{
"slug": "rest",
"title": "Rest"
},
{
"slug": "role-cards",
"title": "Role Cards"
},
{
"slug": "round",
"title": "Round"
},
{
"slug": "ruins-map",
"title": "Ruins Map"
},
{
"slug": "scout",
"title": "Scout"
},
{
"slug": "shaper",
"title": "Shaper"
},
{
"slug": "shepard",
"title": "Shepard"
},
{
"slug": "story",
"title": "Story"
},
{
"slug": "supply",
"title": "Supply"
},
{
"slug": "terrain-2",
"title": "Terrain 2"
},
{
"slug": "terrain-3",
"title": "Terrain 3"
},
{
"slug": "terrain-cards",
"title": "Terrain Cards"
},
{
"slug": "terrain",
"title": "Terrain"
},
{
"slug": "totem-of-the-irix",
"title": "Totem of the Irix"
},
{
"slug": "trade",
"title": "Trade"
},
{
"slug": "trader",
"title": "Trader"
},
{
"slug": "trail-markers",
"title": "Trail Markers"
},
{
"slug": "travel-phase",
"title": "Travel Phase"
},
{
"slug": "traverse",
"title": "Traverse"
},
{
"slug": "unmaintained-roads",
"title": "Unmaintained Roads"
},
{
"slug": "valley",
"title": "Valley"
},
{
"slug": "victory-condition",
"title": "Victory Condition"
},
{
"slug": "wasteland-1",
"title": "Wasteland 1"
},
{
"slug": "wasteland",
"title": "Wasteland"
},
{
"slug": "water-1",
"title": "Water 1"
},
{
"slug": "water-2",
"title": "Water 2"
},
{
"slug": "water-3",
"title": "Water 3"
},
{
"slug": "water-4",
"title": "Water 4"
},
{
"slug": "water-5",
"title": "Water 5"
},
{
"slug": "weather",
"title": "Weather"
},
{
"slug": "white-sky",
"title": "White Sky"
},
{
"slug": "xp-cubes",
"title": "XP Cubes"
},
{
"slug": "xp",
"title": "XP"
}
]
}
+6
View File
@@ -0,0 +1,6 @@
---
category: Role
Role Effect: Can have an additional gear and can spend focus to ready that gear or add a stored item from the supply.
Role Veteran Effect: Can have two additional gear and can spend focus to ready that gear or add a stored item from the supply
Unknown: "4"
---
+1
View File
@@ -0,0 +1 @@
Green energy.
+7
View File
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 1
Effect: "Travel: Discard this gear and spend 2 [[Progress]] while in this region to gain 1 [[Tool]]."
Location: Anywhere
Gear Category: Tool
---
@@ -0,0 +1,3 @@
---
count: 380
---
+6
View File
@@ -0,0 +1,6 @@
---
category: Role
Role Effect: Can have any number of companions with you. Can exchange companions with any Ranger nearby during the prepare phase.
Role Veteran Effect: Ignore the effects of collateral damage. Can exchange companions with any Ranger anywhere during the prepare phase.
Unknown: "4"
---
+20
View File
@@ -0,0 +1,20 @@
| Item | Count |
| -------------------- | ----- |
| [[Terrain Cards]] | 198 |
| [[Card Library]] | 380 |
| [[Event Cards]] | 40 |
| [[Gear Cards]] | 50 |
| [[Injury Cards]] | 20 |
| [[Endeavor Tokens]] | 48 |
| [[Energy Tokens]] | 80 |
| [[Crisis Markers]] | 7 |
| [[Flora Meeples]] | 40 |
| [[Prey Meeples]] | 40 |
| [[Predator Meeples]] | 40 |
| [[XP Cubes]] | 5 |
| [[Ranger Meeples]] | 20 |
| [[Player Boards]] | 5 |
| [[Player Meeples]] | 5 |
| [[Role Cards]] | 10 |
| [[Trail Markers]] | 10 |
@@ -0,0 +1 @@
When the third Ranger is placed on a crisis. Resolve it, retire 1 of the Rangers, and roll the risk die to determine which of the others retire as well.
+2
View File
@@ -0,0 +1,2 @@
Find and encounter a crisis card to attempt to solve the crisis yourself.
+1
View File
@@ -0,0 +1 @@
2 Progress + Ecology Meeples increases travel cost.
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 4
Gear Category: Tool
Effect: "Boat. Travel: You need 1 less Progress to place trail markers in water regions."
Location: White Sky
---
+10
View File
@@ -0,0 +1,10 @@
---
category: Event
isCrisis: true
Event Type: Mountain
Activates Ecology:
Lake Ecology:
- "[[Prey Meeples]]"
Description: Some of the best experience in life is hard-earned by taking foolish risks, and a few things are riskier than going into the mountains during a thunder-storm.
---
Each Ranger can choose to suffer 2 fatigue to gain 2 XP.
+7
View File
@@ -0,0 +1,7 @@
---
count: 40
---
Draw and resolve on event card at the start of each [[Round]].
Event cards spawn [[Crisis]], activate the [[Ecology]], and represent the [[Story]] and [[Weather]] affecting the [[Valley]].
+3
View File
@@ -0,0 +1,3 @@
[[Sun]]
[[Mountain]]
[[Seal]]
@@ -0,0 +1,3 @@
Draw terrain cards as [[Progress]] until you encounter one.
![[Press On]]
+10
View File
@@ -0,0 +1,10 @@
---
category: Role
Awareness: 2
Fitnesses: 2
Knowledge: 1
Spirit: 1
Unknown: "4"
Role Effect: Ignores predators when suffering fatigue to continue exploring.
Role Veteran Effect: All nearby Rangers ignore predators when suffering fatigue to continue exploring.
---
+7
View File
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 2
Gear Category: Tool
Effect: "Explore: Once per day, use in the place of 1[[Focus]]."
Location: Anywhere
---
+10
View File
@@ -0,0 +1,10 @@
---
category: Region
Connections:
- "[[Grass 1]]"
- "[[Grass 2]]"
- "[[Water 1]]"
- "[[Forest 2]]"
X: 60
Y: 330
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Grass 2]]"
- "[[Water 2]]"
- "[[Forest 1]]"
X: 250
Y: 370
---
+7
View File
@@ -0,0 +1,7 @@
---
category: Region
Connections:
- "[[Water 2]]"
X: 150
Y: 140
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Grass 4]]"
- "[[Wasteland 1]]"
- "[[Grass 5]]"
Y: 100
X: 420
---
+7
View File
@@ -0,0 +1,7 @@
---
category: Region
Connections:
- "[[Water 5]]"
Y: 410
X: 470
---
View File
+7
View File
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 5
Gear Category: Weapon
Effect: "Explore: Spend 2 [[Fitness]] before encountering a predator or prey to store it. The stored being can be traded as a gear of value 2."
Location: "[[Lone Tree Station]]"
---
+11
View File
@@ -0,0 +1,11 @@
---
category: Region
Connections:
- "[[Mountain 1]]"
- "[[Water 2]]"
- "[[Forest 1]]"
X: 30
Y: 250
Landmarks:
- "[[Lone Tree Station]]"
---
+10
View File
@@ -0,0 +1,10 @@
---
category: Region
Connections:
- "[[Forest 1]]"
- "[[Forest 2]]"
X: 150
Y: 400
Landmarks:
- "[[Spire]]"
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Water 2]]"
- "[[Mountain 2]]"
- "[[Mountain 3]]"
X: 300
Y: 230
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Mountain 4]]"
- "[[Wasteland 1]]"
- "[[Grass 4]]"
Y: 80
X: 630
---
+10
View File
@@ -0,0 +1,10 @@
---
category: Region
Connections:
- "[[Mountain 5]]"
- "[[Water 5]]"
- "[[Wasteland 1]]"
- "[[Forest 4]]"
Y: 290
X: 550
---
+2
View File
@@ -0,0 +1,2 @@
Default region that has [[Lone Tree Station]].
+10
View File
@@ -0,0 +1,10 @@
---
category: Role
Role Effect: Can help nearby Rangers.
Role Veteran Effect: Can help any Ranger anywhere.
Awareness: 2
Fitnesses: 2
Knowledge: 2
Spirit: 2
Unknown: "5"
---
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 3
Gear Category: Tool
Effect: "Prepare: Discard to travel to a nearby region."
Location: Anywhere
---
View File
@@ -0,0 +1 @@
If you ever need to deploy a [[Ranger Meeples]] from [[Lone Tree Station]] but can't you lose the game.
+2
View File
@@ -0,0 +1,2 @@
Cards you can buy. Some cards need you to be at a specific location to buy them.
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Grass 1]]"
- "[[Water 3]]"
- "[[Forest 3]]"
X: 20
Y: 120
---
+8
View File
@@ -0,0 +1,8 @@
---
category: Region
Connections:
- "[[Water 3]]"
- "[[Forest 3]]"
X: 260
Y: 110
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Mountain 5]]"
- "[[Forest 4]]"
- "[[Grass 3]]"
Y: 180
X: 380
---
+8
View File
@@ -0,0 +1,8 @@
---
category: Region
Connections:
- "[[Forest 4]]"
- "[[Grass 4]]"
Y: 30
X: 370
---
+8
View File
@@ -0,0 +1,8 @@
---
category: Region
Connections:
- "[[Grass 5]]"
- "[[Mountain 3]]"
Y: 330
X: 430
---
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 6
Gear Category: Tool
Effect: "Explore: You can spend 1 [[Focus]] to prevent suffering 1 injury."
Location: "[[Lone Tree Station]]"
---
+1
View File
@@ -0,0 +1 @@
1 Progress + Ecology Meeples increases travel cost.
@@ -0,0 +1,14 @@
---
category: Event
isCrisis: true
Event Type: Mountain
Forest Ecology:
- "[[Prey Meeples]]"
Lake Ecology:
- "[[Prey Meeples]]"
Grass Ecology:
Mountain Ecology:
Wasteland Ecology:
Effect: In each region with 3 or more prey, they stampede! Each Ranger in that region suffers 1 injury, then distribute the prey nearby. Shuffle and add 5 random cards from E to the top of the event deck.
Description: A massive crack of thunder heralds the approach of a storm rolling into the Valley. At the sound of the deafening boom, herbs of startled animals scatter and run for cover.
---
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 2
Gear Category: Garment
Effect: "Explore: Once per day, use in the place of 1 [[Awareness]]"
Location:
---
@@ -0,0 +1 @@
Containers helper notes around player reminder rules for a player.
@@ -0,0 +1,9 @@
Spend energy to prepare for your day, or save it to explore.
![[Scout]]
![[Traverse]]
![[Rest]]
![[Trade]]
+1
View File
@@ -0,0 +1 @@
When your explore step would end, you may suffer 1 fatigue (plus 1 for each predator) to continue exploring.
+1
View File
@@ -0,0 +1 @@
Progress represents how far you come in order to travel on.
@@ -0,0 +1,3 @@
When you run out of Ranger Meeples you lose the game.
When three Ranger Meeples are on a crisis, they complete it.
+7
View File
@@ -0,0 +1,7 @@
---
actionType: Prepare
energyType: Focus
---
Rest to recover fatigue or injuries.
+15
View File
@@ -0,0 +1,15 @@
| ![[Role Example.png]] | ![[Role Example 2.png]]<br> |
| --------------------- | ---------------------------------------- |
![[Explorer]]
![[Shepard]]
![[Artificer]]
![[Concoliator]]
![[Trader]]
![[Guide]]
View File
+7
View File
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 2
Gear Category: Tool
Effect: "Travel: Retire this gear an spend 2[[Progress]] while in this region to gain 1 [[Artifact]]."
Location: Anywhere
---
+8
View File
@@ -0,0 +1,8 @@
---
actionType:
- "[[Prepare Phase]]"
energyType:
- "[[Awareness]]"
---
Scout terrain cards, putting them on top or bottom.
+4
View File
@@ -0,0 +1,4 @@
---
category: Role
Unknown: "4"
---
+10
View File
@@ -0,0 +1,10 @@
---
category: Role
Awareness: 2
Fitnesses: 1
Knowledge: 1
Spirit: 2
Unknown: "4"
Role Effect: You can spend spirit to move an equal number of prey and predator from a nearby region to your region.
Role Veteran Effect: You can also move them out of your region to a nearby one.
---
View File
+1
View File
@@ -0,0 +1 @@
The deck of gear. Things that can get something, like a tool, and get the top most tool from the supply.
+9
View File
@@ -0,0 +1,9 @@
---
category: Terrain
Description: You come across a squat building sitting in the shadow of [[Lone Tree Station]]. Other Rangers are coming and going, checking in with an older man who hunches over a map of the Valley, his impressively-wide hatbrim shading almost the entire table as he draws lines on the map, sending out Rangers to blaze new trails after a season of growth.
---
1 [[Spirit]] Ask him to show you marked trails. Place one of your [[Trail Markers]] on any region.
2 [[Awareness]] Offer to take over mapping.
Walk by the outpost.
+11
View File
@@ -0,0 +1,11 @@
---
category: Terrain
Description: The shadow of the giga-redwood is a flurry of activity as Rangers go about their assigned duties and exchange stories with the people of the Valley.
---
1 [[Spirit]] Listen to stories about goings-on throughout the Valley.
1 [[Focus]] Recommend new duties to a Range out on the field.
1 [[Awareness]] Request help with a crisis.
X Leave everyone to their jobs.
@@ -0,0 +1,14 @@
---
count: "198"
---
Cards you draw when exploring the matching region.
Each Terrain type appears to be spread out across 5 regions in the map, the exception being [[Wasteland]] which is just one location to the west.
# Categories
![[Lake]]
![[Grasslands]]
![[Forest]]
![[Mountain]]
![[Wasteland]]
+12
View File
@@ -0,0 +1,12 @@
---
category: Terrain
Description: You climb to the top of Lone Tree Station to get the vantage from the circular platforms of Topside Mast. There, you see Ben Amon working on the Swift. It hasn't been functioning perfectly lately, but the artificer keeps it working enough to send Rangers out to deal with crises that arise.
---
1 [[Spirit]] Send a Ranger on the Swift to a crisis.
2 [[Focus]] Board the Swift yourself. Travel to any region.
X Climb down out of [[Lone Tree Station]].
If Mora Orlin is with you, offer her help repairing the Swift.
@@ -0,0 +1,7 @@
---
category: Gear
Cost: 2
Gear Category: Consumable
Effect: "Explore: Discard to help a Ranger anywhere."
Location: Anywhere
---
+7
View File
@@ -0,0 +1,7 @@
---
actionType: Prepare
energyType: Spirit
---
Trade to acquire gear from the market (or exchange).
+10
View File
@@ -0,0 +1,10 @@
---
category: Role
Awareness: 1
Fitnesses: 1
Knowledge: 2
Spirit: 2
Unknown: "4"
Role Effect: All gear counts as one higher when trading. And can exchange gear with any nearby Ranger.
Role Veteran Effect: All of your gear counts as two higher when trading. And can exchange gear with any Ranger anywhere.
---
@@ -0,0 +1,3 @@
Spend a trailer marker from your region to search for any card from its terrain deck and put it on top. If it's another Ranger's marker, they get an [[XP]]!
Spend 4 progress to place a Trail Marker as your location.
@@ -0,0 +1,9 @@
Spend progress to move along paths, place trail markers in your region, or complete other objectives.
Keep in mind that when you leave a region, you discard all your remaining progress.
![[Paved Roads]]
![[Dirt Roads]]
![[Unmaintained Roads]]
+5
View File
@@ -0,0 +1,5 @@
---
actionType: Prepare
energyType: Fitness
---
Traverse your region, adding [[Movement]] for this turn only.
@@ -0,0 +1 @@
3 Progress + Ecology Meeples increases travel cost.
View File
@@ -0,0 +1,3 @@
You win the game by earing [[Ranger Badges]].
The exact number needed is determined by your game mode.
+10
View File
@@ -0,0 +1,10 @@
---
category: Region
Connections:
- "[[Forest 4]]"
- "[[Grass 4]]"
- "[[Grass 5]]"
- "[[Water 4]]"
Y: 120
X: 560
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Forest 1]]"
X: 30
Y: 410
Landmarks:
- "[[Research Station]]"
---
+13
View File
@@ -0,0 +1,13 @@
---
category: Region
Connections:
- "[[Forest 1]]"
- "[[Forest 2]]"
- "[[Grass 1]]"
- "[[Forest 3]]"
- "[[Grass 3]]"
X: 150
Y: 160
Landmarks:
- "[[White Sky]]"
---
+9
View File
@@ -0,0 +1,9 @@
---
category: Region
Connections:
- "[[Mountain 1]]"
- "[[Mountain 2]]"
- "[[Forest 3]]"
X: 50
Y: 50
---
+8
View File
@@ -0,0 +1,8 @@
---
category: Region
Connections:
- "[[Grass 4]]"
- "[[Wasteland 1]]"
Y: 110
X: 640
---

Some files were not shown because too many files have changed in this diff Show More