A solo roleplaying game engine integrated directly into your Obsidian vault.
This is the English version of the documentation. For the Spanish version, see
README-es.md.
OPSE Oracle is a plugin for Obsidian that implements the full One Page Solo Engine v1.6 system — the minimalist all-in-one engine to play any TTRPG without a Game Master. It automates rolls, oracle queries, content generation and exploration tracking, leaving the player free to interpret and improvise.
but… / and… modifiers main.js, manifest.json and styles.css from the latest release. .obsidian/plugins/opse-oracle/ in your vault. Run OPSE: Start New Adventure from the command palette (Ctrl+P). Fill in:
The plugin creates a Markdown file with YAML frontmatter, initializes the adventure state and opens the note.
Click the 🎲 icon in the left ribbon, or run OPSE: Open control panel. The panel opens in the right sidebar and stays accessible throughout the session.
In the Scene tab, click Generate Scene. Enter the location and goal of your characters. The plugin rolls:
Use the buttons in the panel tabs to:
Results are automatically inserted into the active note (if Auto-insert is enabled) and recorded in the history.
If you need to track a dungeon or hex map, create the trackers from the Explore tab. The state persists between sessions.
The panel is the main play interface. It is organized into 5 tabs plus the adventure card and the history.
Shows the active adventure with:
| Tab | Content |
|---|---|
| Scene | Generate Scene, Check Alteration, Roll Alteration, Complication, Beat Move, Failure Move, OPSE Help |
| Oracle | Yes/No, How Much?, Action Focus, Detail Focus, Theme Focus, Double Focus |
| Generate | NPC, Plot Hook, Generic, Plot Twist, Flavor/Weather, Random Event |
| Explore | Create Dungeon, Create Hex Region, Explore next room |
| Session | New Adventure, Export log, Shuffle deck, Card counter |
There is a separator bar between the tabs and the history that you can drag to adjust how much space each section uses. The position is saved automatically.
Implements OPSE v1.6's 2d6 mechanic:
| Probability | Threshold | Shortcut |
|---|---|---|
| Likely | d1 ≥ 3 | 3+ |
| Even | d1 ≥ 4 | 4+ |
| Unlikely | d1 ≥ 5 | 5+ |
The second die (d2) adds a narrative modifier:
1 → but… (complication) 2–5 → no modifier 6 → and… (additional benefit)The default probability is configurable in settings.
Single d6 roll using the OPSE v1.6 scale:
| d6 | Result |
|---|---|
| 1 | Surprisingly little |
| 2 | Less than expected |
| 3–4 | About average |
| 5 | More than expected |
| 6 | Extraordinary |
Focuses use playing cards (ranks 2–A + suit) or dice (d12 + d4 in Dice mode). The suit defines the domain that contextualizes the result:
| Suit | Domain |
|---|---|
| ♣ Clubs | Physical (appearance, existence) |
| ♦ Diamonds | Technical (mental, functioning) |
| ♠ Spades | Mystic (meaning, capability) |
| ♥ Hearts | Social (personal, connection) |
Action Focus — What does it do?
Detail Focus — What kind of thing is it?
Theme Focus — What is this about?
Double Focus — Combines Action + Detail in a single roll.
| Mode | Description |
|---|---|
| Dice | d12 for rank, d4 for suit. No deck, always available. |
| Cards | Virtual 54-card deck (52 + 2 Jokers) shuffled. Jokers trigger an automatic Random Event and reshuffle the deck (OPSE v1.6 rule). |
| Persistent Deck | Same as Cards, but deck state is saved when closing Obsidian. Cards do not return to the deck until it is exhausted. |
Roll 3 independent d6 to generate:
Goal → d6 (Eliminate threat / Learn the truth / Recover value / …)
Adversaries → d6 (Organization / Outlaws / Guardians / Locals / …)
Reward → d6 (Money / Knowledge / Ally's help / Plot arc / …)
Combines 4 card focuses + 2 dice rolls:
Identity → Card focus (NPC_IDENTITY table)
Goal → Card focus (NPC_OBJECTIVE table)
Trait → 1d6 trait type + Detail Focus (description)
Attitude → 1d6 How Much? scale
Theme → Card focus (THEMES table)
Composes two focuses:
What happens → Action Focus + Domain
What it involves → Theme Focus
If you draw a Joker in any focus, an additional chained Random Event is triggered.
Useful for cities, ships, magic items, taverns, monsters:
What it does → Action Focus + Domain
What it looks like → Detail Focus + Domain
How striking it is → How Much? (1d6)
Implements OPSE v1.6's dungeon crawl mechanics.
Creation: Name + visual appearance + purpose. The first room always has 3 exits.
For each new room the plugin rolls:
| Table | d6 ranges |
|---|---|
| Location | 1 = Typical area … 6 = Special purpose |
| Encounter | 1–2 = Nothing, 3–4 = Enemies, 5 = Obstacle, 6 = Unique foe |
| Object | 1–2 = Nothing, 3 = Clue, 4 = Tool, 5 = Valuable, 6 = Special |
| Exits | 1–2 = Dead end, 3–4 = 1 exit, 5–6 = 2 exits |
Navigation: Exploration buttons (advance) and backtracking to connected rooms. Per-room notes. Cumulative route map.
Implements OPSE v1.6's hexcrawl system using axial coordinates.
Creation: Region name + 3 terrain types (common / uncommon / rare).
Terrain generation (d6 per adjacent hex):
| d6 | Result |
|---|---|
| 1–2 | Same as current hex |
| 3–4 | Common terrain |
| 5 | Uncommon terrain |
| 6 | Rare terrain |
Contents (1d6): results 1–5 = nothing noteworthy, 6 = generate a Feature.
Features (1d6): Notable structure / Dangerous hazard / Settlement / Strange natural feature / New region / Dungeon entrance.
Events: An event triggers when the event roll meets the configured threshold (default d6 ≥ 5).
Navigation: 6-direction compass (N / NE / SE / S / SW / NW). Already visited hexes are retrieved without re-rolling.
The history logs all rolls in the session and persists between sessions.
Exports the full history as:
The settings screen is organized into sections:
| Setting | Values | Description |
|---|---|---|
| Language | Spanish / English | UI and tables language |
| Randomization mode | Dice / Cards / Persistent Deck | Random source for focuses |
| Auto-insert | Yes / No | Automatically insert results into active note |
| Setting | Values | Description |
|---|---|---|
| Default tab | Scene / Oracle / Generate / Explore / Session | Tab opened when the panel starts |
| Accent color | Color picker | Main UI color (default violet #8b5cf6) |
| Compact mode | Yes / No | Smaller cards in history |
| History order | Newest first / Oldest first | Entry ordering |
| Timestamp format | Time / Full date / Relative | How time is shown in each entry |
| Setting | Values | Description |
|---|---|---|
| Insertion format | Plain markdown / Obsidian callout / Answer only | How inserted text is formatted |
| Show raw rolls | Yes / No | Include dice result (1d6=4) in the text |
| Show domain/suit | Yes / No | Include suit domain in focus results |
Format examples:
── Plain markdown ────────────────────────────────────
? Is the guard asleep?
Yes, but... (2d6=5: d1=4, d2=1, Prob: even)
*Social (personal, connection)*
── Obsidian callout ───────────────────────────
> [!oracle] Is the guard asleep?
> **Yes, but...** (2d6=5)
> *Social (personal, connection)*
── Answer only ──────────────────────────────────
**Yes, but...**
| Setting | Values | Description |
|---|---|---|
| Default probability | Likely / Even / Unlikely | Preselected level in Yes/No modal |
| Hex event threshold | 2–6 (slider) | Minimum d6 value to trigger an event |
| Setting | Values | Description |
|---|---|---|
| Export format | Markdown / JSON | Exported file format |
| Auto-open exploration | Yes / No | Open exploration view when creating dungeon/hex |
| Reset deck on adventure change | Yes / No | Reset deck when switching active adventure |
| History limit | 10–500 (slider) | Max number of entries to keep |
| Clear history | Button | Remove all non-pinned entries |
| Restore defaults | Button | Restore UI/behavior defaults (not adventures/history) |
All commands use the OPSE: prefix and are available from the command palette (Ctrl+P).
| ID | Description |
|---|---|
opse-open-control |
Open control panel |
opse-open-history |
Open history (opens panel) |
opse-open-exploration |
Open exploration view |
| ID | Description |
|---|---|
opse-start-adventure |
New adventure (modal) |
opse-set-scene |
Set up new scene (modal) |
| ID | Description |
|---|---|
opse-ask-oracle |
Yes/No Oracle (question modal) |
opse-ask-how-much |
How Much? Oracle (1d6) |
opse-focus-action |
Action Focus |
opse-focus-detail |
Detail Focus |
opse-focus-theme |
Theme Focus |
opse-focus-double |
Double Focus (Action + Detail) |
opse-roll-beat-move |
Beat Move (1d6) |
opse-roll-failure-move |
Failure Move (1d6) |
| ID | Description |
|---|---|
opse-random-event |
Random Event |
opse-generate-hook |
Plot Hook |
opse-generate-npc |
Generate NPC |
opse-generate-generic |
Generic Content |
opse-plot-twist |
Plot Twist |
opse-flavor |
Flavor / Weather |
| ID | Description |
|---|---|
opse-create-dungeon |
Create dungeon tracker |
opse-create-hex-region |
Create hex region |
opse-explore-room |
Explore next room |
opse-hex-north |
Move North |
opse-hex-northeast |
Move Northeast |
opse-hex-southeast |
Move Southeast |
opse-hex-south |
Move South |
opse-hex-southwest |
Move Southwest |
opse-hex-northwest |
Move Northwest |
| Rank | ES | EN | |------|-----------|-----------|| | 2 | Buscar | Seek | | 3 | Oponerse | Oppose | | 4 | Comunicar | Communicate| | 5 | Mover | Move | | 6 | Dañar | Harm | | 7 | Crear | Create | | 8 | Revelar | Reveal | | 9 | Mandar | Command | | 10 | Tomar | Take | | J | Proteger | Protect | | Q | Ayudar | Help | | K | Transformar | Transform| | A | Engañar | Deceive |
| Rank | ES | EN | |------|----------|---------|| | 2 | Pequeño | Small | | 3 | Grande | Large | | 4 | Viejo | Old | | 5 | Nuevo | New | | 6 | Mundano | Mundane | | 7 | Simple | Simple | | 8 | Complejo | Complex | | 9 | Insulso | Bland | | 10 | Especial | Special | | J | Inesperado | Unexpected | | Q | Exótico | Exotic | | K | Digno | Worthy | | A | Único | Unique |
| Rank | ES | EN |
|---|---|---|
| 2 | Necesidad Ya | Immediate Need |
| 3 | Aliados | Allies |
| 4 | Comunidad | Community |
| 5 | Historia | History |
| 6 | Planes Futuros | Future Plans |
| 7 | Enemigos | Enemies |
| 8 | Conocimiento | Knowledge |
| 9 | Rumores | Rumors |
| 10 | Arco Argumental | Plot Arc |
| J | Eventos Recientes | Recent Events |
| Q | Equipo | Equipment |
| K | Facción | Faction |
| A | Los PJs | The PCs |
This is the English version of the documentation. For the original Spanish readme, see
README-es.md.
This plugin implements the mechanics of One Page Solo Engine v1.6, created by Karl Hendricks (Inflatable Studios), with Spanish translation by Micky Pardo.
This plugin is an independent implementation. It is not affiliated with or endorsed by the original author.
Author: Snifer · Bastion del Dinosaurio
License: MIT — free to use, modify and distribute.
Made with ❤️ for the solo roleplaying community.