Campaign
Skeleton framework for building a Call of Cthulhu campaign/scenario. It’s client-only for now (saved in your browser). When you give me the PDF, we’ll wire the workflow properly.
Quick checklist
Coming soon (once you give me the PDF)
- PDF upload + extraction of official fields
- Step-by-step workflow (investigation structure, clue types, skill checks, sanity rules)
- Printable handouts + session packet export
- Share links / server-side saves
Investigators
Just enough structure to start. Later we’ll align this with the actual CoC sheet + rules.
Character creation (spec)
This is a read-only spec based on the latest CoC character creation flow.
We’ll reconcile details (edition + exact wording) once the scanned PDF pages are successfully imported.
Note: per your request, we’re ignoring optional rules from the last page.
Goals
- Define a clear step-by-step workflow for creating an investigator.
- Define the data model (fields + types) we’ll store in this app.
- Define validations + derived values (HP, SAN, etc.).
- No implementation yet. This page is the blueprint.
Workflow (high-level)
- Concept: name, occupation, age, pronouns (optional), backstory hook.
- Characteristics: choose roll method (default: “standard”), record raw values.
- Derived attributes: compute HP, MP, SAN, Luck, Move (edition-dependent formulas).
- Occupation: pick occupation package → assign occupation skill points.
- Personal interests: assign personal interest skill points.
- Background: personal description, ideology/beliefs, significant people, meaningful locations, treasured possessions, traits.
- Finishing: equipment, contacts, notes, starting cash/credit rating (from occupation).
- Review: sanity/skill caps, missing required fields, export snapshot.
Investigator data model (draft)
{
"id": "string",
"name": "string",
"occupation": "string",
"age": "number",
"concept": "string",
"characteristics": {
"STR": "number",
"CON": "number",
"SIZ": "number",
"DEX": "number",
"APP": "number",
"INT": "number",
"POW": "number",
"EDU": "number"
},
"derived": {
"hp": "number",
"mp": "number",
"san": "number",
"luck": "number",
"move": "number"
},
"skills": {
"Credit Rating": "number",
"...": "number"
},
"background": {
"description": "string",
"ideology": "string",
"significantPeople": ["string"],
"meaningfulLocations": ["string"],
"treasuredPossessions": ["string"],
"traits": ["string"]
},
"notes": "string",
"createdAt": "string (ISO)",
"updatedAt": "string (ISO)"
}
Validations / constraints (draft)
- All characteristics must be present and within edition-defined min/max.
- Derived values must be computed from characteristics (not hand-entered once we implement).
- Skills are percentages; enforce reasonable caps (edition-defined).
- Occupation and credit rating must be consistent.
Open questions (to resolve from your scan)
- Confirm edition + exact characteristic roll method and any age adjustments.
- Confirm formulas for HP/MP/SAN/Luck/Move used in the latest edition.
- Confirm skill point formulas and required background prompts.
Next step
Once the PDF attachment arrives, I’ll rewrite this spec to match it line-for-line.
Scenario
Safety / boundaries
Not rules-accurate; just a practical place to keep session safety notes.
Clues
This is the heart of the investigation. Add clues; each should point somewhere.
Handouts
Text-only placeholders for now.
Export
This is your escape hatch. Copy/download JSON so you can hand it back to me later (or store it in git).
Next: PDF workflow
When you give me the PDF, I’ll map its structure into:
- data schema (fields + validations)
- stepper UI + required/optional sections
- export formats (JSON + printable packet)