diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..12767a8 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,170 @@ +# CLAUDE.md - Codebase Documentation for Claude Code + +This file helps Claude understand the Deathwatch Roller codebase and provide better assistance. + +## Project Overview + +**Deathwatch Roller** is a React-based web application for managing Deathwatch tabletop RPG sessions. + +**Main Features:** +- Player management (CRUD operations for player accounts) +- Requisition shop (browse and purchase items with RP) +- Session tracking (track game sessions and progress) +- GM Kit (comprehensive Game Master tools) +- Bestiary (monster and enemy reference) +- Rules database (searchable rules and mechanics) + +**Tech Stack:** +- Frontend: React + TypeScript +- Backend: Node.js + Express + TypeScript +- Database: SQLite +- Styling: CSS modules / Tailwind + +## Architecture + +``` +dwroller/ +├── backend/ # Express API server +├── frontend/ # React frontend (Vite) +├── data/ # Static data and assets +├── database/ # SQLite database and backups +└── docs/ # Documentation (see docs/) +``` + +## Key Files and Locations + +### Backend +- `backend/server.js` - Express server entry point +- `backend/src/routes/` - API route handlers +- `backend/src/middleware/` - Authentication, validation middleware +- `backend/src/models/` - Data models +- `backend/src/controllers/` - Route controllers + +### Frontend +- `frontend/src/components/` - React components +- `frontend/src/pages/` - Route pages +- `frontend/src/hooks/` - Custom React hooks +- `frontend/src/store/` - State management + +### Shared +- `.env` - Environment variables (port, secrets, database path) +- `package.json` - Root package.json with scripts +- `database/data.db` - SQLite database (created on first run) + +## Development Workflow + +1. Install dependencies: `npm install` +2. Create `.env` from `.env.example` +3. Start backend: `npm run server` (or `npm run dev` for dev) +4. Start frontend: `npm start` (or `npm run dev` for dev) + +### Scripts +- `npm start` - Start frontend +- `npm run server` - Start backend +- `npm run dev` - Start both in dev mode +- `npm run build` - Build for production +- `npm run pm2:start` - Start with PM2 + +## API Endpoints + +| Endpoint | Description | +|----------|-------------| +| `GET /api/players` | Get all players | +| `POST /api/players` | Create player (GM only) | +| `GET /api/shop` | Get shop inventory | +| `GET /api/bestiary` | Get bestiary data | +| `GET /api/rules/search` | Search rules | + +### Authentication +- Sessions use HTTP-only cookies +- GM endpoints require `x-gm-secret` header +- Passwords hashed with bcrypt + +## Code Style + +- Use TypeScript for all new code +- Follow Airbnb JavaScript style guide +- Use ESLint for linting +- Maximum 100 character line length +- Functional React components with hooks + +## Security Considerations + +- Session cookies are HTTP-only +- Passwords hashed with bcrypt +- SQL queries use parameterized statements +- Rate limiting enabled (100 req/min) +- CORS configured for allowed origins +- Input validation on all endpoints + +## Database + +- SQLite by default +- Schema created automatically on first run +- Tables: players, items, inventory, sessions, webhooks +- Database path configurable via `DATABASE_PATH` env var +- Backups in `database/backups/` + +## Frontend Components + +Main component locations: +- `Shop/` - Shop and inventory components +- `Bestiary/` - Creature reference components +- `Rules/` - Rules database components +- `Sessions/` - Session tracking components +- `Players/` - Player management (GM only) + +## Common Tasks + +### Adding a New API Endpoint +1. Create route file in `backend/src/routes/` +2. Add controller in `backend/src/controllers/` +3. Register route in `server.js` +4. Add tests in `backend/src/routes/__tests__/` + +### Adding a New Frontend Component +1. Create component in `frontend/src/components/` +2. Add TypeScript interface for props +3. Use existing CSS patterns +4. Test in browser + +### Adding a Database Model +1. Create model in `backend/src/models/` +2. Define schema with `sequelize` +3. Add indexes for frequent queries +4. Write migration if needed + +## Testing + +- Backend tests: `npm test` +- Frontend tests: `cd frontend && npm test` +- E2E tests: `npm run test:e2e` + +## Documentation + +Full documentation is in `docs/`: +- `SUMMARY.md` - Documentation index +- `quick-start.md` - Installation guide +- `user-guide.md` - User documentation +- `api.md` - API reference +- `developer-guide.md` - Contributing guide +- `security.md` - Security best practices +- `troubleshooting.md` - Common issues +- `pm2.md` - Production deployment + +## Environment Variables + +```env +PORT=5000 # Backend server port +SESSION_SECRET=... # Session encryption key +X_GM_SECRET=... # GM authentication secret +DATABASE_PATH=./database/data.db # SQLite path +NODE_ENV=development # env: development|production +``` + +## Getting Help + +1. Check documentation in `docs/` +2. Review code examples in the codebase +3. See open issues on GitHub +4. Create new issue for questions diff --git a/README.md b/README.md index f8a17d0..fcb01d2 100755 --- a/README.md +++ b/README.md @@ -78,5 +78,17 @@ The application includes a comprehensive Player Management interface available o - Add tests for new functionality - Submit a pull request with a detailed description +## Documentation + +Full documentation is available in the `docs/` directory: + +- [Quick Start Guide](./docs/quick-start.md) - Setup and installation +- [User Guide](./docs/user-guide.md) - Features and usage +- [API Documentation](./docs/api.md) - REST API reference +- [Developer Guide](./docs/developer-guide.md) - Contributing to the project +- [Contributing Guide](./docs/contributing.md) - How to contribute +- [Security Guide](./docs/security.md) - Security best practices +- [PM2 Configuration](./docs/pm2.md) - Production deployment + ## License This project is licensed under the MIT License. See the LICENSE file for details. diff --git a/database/rules/rules-database.json b/database/rules/rules-database.json index 94ee89d..a350762 100644 --- a/database/rules/rules-database.json +++ b/database/rules/rules-database.json @@ -1,34 +1,7 @@ { "rules": [ { - "title": "CORE RULEBOOK", - "content": "™\n™\n", - "page": 1, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_1" - }, - { - "title": "DARKNESS OF THE 41ST MILLENNIUM", - "content": "Credits\nDeathwatch DesigneD by Art Direction\nRoss Watson Zoë Robinson\nwith additional concepts by Jay Little and Sam Stewart\nProduction Manager\nLead Developer Gabe Laulunen\nRoss Watson\nFFG Lead Game Designer\nWritten and Developed by Corey Konieczka\nOwen Barnes, Alan Bligh, John French, Andrea Gausman\nand Andy Hoare FFG Lead Game Producer\nMichael Hurley\nCredits\nAdditional Writing\nMack Martin and Robin Everett-McGuirl Publisher\nChristian T. Petersen\nBased on Dark Heresy, Designed by\nOwen Barnes, Kate Flack, and Mike Mason games workshop\nEditing Licensing Manager\nDylan Owen, Leigh Anne Reger, and Patrick Rollens Owen Rees\nGraphic Design Head of Licensing\nKevin Childress Paul Lyons\nAdditional Graphic Design Head of Intellectual Property\n", - "page": 1, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_2" - }, - { - "title": "GAMES USA", - "content": "Copyright © Game Workshop Limited 2010. Games Workshop, Warhammer 40,000, Warhammer 40,000 Role Play, Deathwatch,\nthe foregoing marks’ respective logos, Deathwatch, and all associated marks, logos, places, names, creatures, races and race insignia/\ndevices/logos/symbols, vehicles, locations, weapons, units and unit insignia, characters, products and illustrations from the Warhammer\n40,000 universe and the Deathwatch game setting are either ®, ™, and/or © Games Workshop Ltd 2000-2010, variably registered\nin the UK and other countries around the world. This edition published under license to Fantasy Flight Publishing Inc. All rights\nreserved to their respective owners. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any\nform by any means, electronic, mechanical, photocopying, recording or otherwise, without the prior permission of the publishers.\nISBN: 978-1-58994-778-8 Product Code: DW01 Print ID: 781JUN10\nPrinted in China\nFor more information about the Deathwatch line, free downloads, answers\nto rule queries, or just to pass on greetings, visit us online at\n.FantasyFlightGames.com\nContents Deathwatch Assault Marine ................................................ 72\nDeathwatch Devastator Marine .......................................... 76\nDeathwatch Librarian .......................................................... 80\nForeword\b 6 Deathwatch Tactical Marine .............................................. 84\n", - "page": 1, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_3" - }, - { - "title": "GAME?", + "title": "GAME", "content": "Introduction\ndangerous special missions in the grim darkness of the far In a roleplaying game (RPG), you create an alter ego, a fictional\nfuture. The player characters form a Kill-team of Space Marines character that is your avatar within the game world. Perhaps you\nin the Deathwatch, an elite warrior brotherhood wherein you will create a stoic soldier, a wise scholar, or an inspiring leader.\nwill face hostile aliens and foul daemons in the Jericho Reach, Next, you and your friends direct your characters through a\na region of the Imperium devastated by war and on the brink series of adventures. Imagine a crime drama, adventure film,\nof annihilation. or war movie—except that instead of passively watching the\nThe role of the Deathwatch in the Imperium is to story unfold, you control one of the characters, making his\nsafeguard humanity against the predations of the vile alien decisions, selecting his actions, and even speaking for him.\nand other threats. Deathwatch Space Marines are at the fore The decisions of you and your fellow players directly affect\nof Mankind’s war for survival against a hostile universe. The the events of the story.\nDeathwatch recruits Space Marines from across the galaxy- How can you affect these events? How do you decide\nspanning Imperium of Man, meaning that many Space what happens? That is the role of the game itself. Roleplaying\n", "page": 7, "source": "Core Rulebook", @@ -46,7 +19,7 @@ "id": "rule_5" }, { - "title": "perCeption (per)", + "title": "Perception (per)", "content": "Perception describes how well your character perceives his\nsurroundings. It reflects the acuteness of your character’s\nsenses. Space Marines have two special implants that affect\n", "page": 24, "source": "Core Rulebook", @@ -63,15 +36,6 @@ "category": "general", "id": "rule_7" }, - { - "title": "88 —", - "content": "Techmarine masters of machinery\ns Table 1–3: Movement in Metres Per\nRound\nAg Bonus Half Move Full Move Charge Run\n“They shall be pure of heart and strong of body, untainted by doubt 1 1 2 3 6\nand unsullied by self-aggrandisement. They will be bright stars 2 2 4 6 12\nin the firmament of battle, Angels of Death whose shining wings 3 3 6 9 18\nbring swift annihilation to the enemies of man. So it shall be for a 4 4 8 12 24\nI: Character Creation\nthousand times a thousand years, unto the very end of eternity and the 5 5 10 15 30\nextinction of mortal flesh.” 6 6 12 18 36\n7 7 14 21 42\n–Roboute Guilliman, Codex Astartes 8 8 16 24 48\n9 9 18 27 54\nOnce you have determined your Speciality, your next step 10 10 20 30 60\nis to note down your character’s Movement, Fate Points,\n", - "page": 25, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_8" - }, { "title": "therefore, and you will know no fear.”", "content": "–Roboute Guilliman, Primarch of the Ultramarines\nR\noleplaying as a Space Marine presents a unique challenge:\nSpace Marines are more than human, larger-than-life\nfigures more akin to the heroes of the Trojan War and\nthe Odyssey than to Inquisitional Acolytes or a Rogue Trader and\nhis companions. Some Space Marines are epic beings who will\nduel for days over a matter of honour, others are philosophers\nand tragic figures, full of passion and regret. In their heart, many\nSpace Marines feel that their Chapter is just a little bit better\nthan the others. However you choose to interpret these ideas,\nit is important to note that the Space Marines chosen for the\nDeathwatch are nuanced, complex characters.\nThis section presents some ideas and thoughts to keep in mind\nwhen roleplaying your Deathwatch Space Marine, a guide that\nshould give you some great dramatic hooks and opportunities to\ndevelop your character in a unique way.\nAt the beginning of a Deathwatch game, the Battle-Brothers\nyou serve with are simply “fellow Space Marines.” Over time, complications with their gene-seed. Some individual Space\nhowever, this perception may change: some of these Space Marines Marines have difficulties adjusting to the particular effects of\nmay become true friends, others may become bitter rivals. their Chapter’s gene-seed.\nAn example of a good story might challenge a Space Marine Psykers: How do you (or your Chapter) view psykers? Most\nto choose between his loyalty to his Chapter and the bond of Chapters utilise Librarians and rely on psykers like most other\n", @@ -342,15 +306,6 @@ "category": "general", "id": "rule_38" }, - { - "title": "Intelligence", - "content": "wranGlinG (advanced)\nWith the Tracking Skill, the character can follow the Intelligence\nsigns left by his quarry, allowing him to hunt them down. The character can tame, train, and potentially ride animals he\nFollowing obvious tracks does not require a Skill Test, and is encounters in his travels, from spine-hounds to the noble warhorse\nconsidered part of a character’s movement. In instances where breeds. Both taming and training beasts are Extended Tests, the\nthe time or elements have eroded the signs or where the very duration of which is determined by the nature and temper of the\nenvironment makes seeing them difficult, such as darkness creature involved. Once an animal has been broken to its master’s\nor fog, Tracking Tests are required. The difficulty depends will—or at least formed a partnership for particularly strong-\non the condition of the traces and the tracker’s surroundings. willed beasts—directing it or issuing commands is a Half Action.\nWhen following any tracks where the difficulty of the test Wild animals, or those trained for hostility and aggression,\nis more than Challenging (+0), the tracker’s Movement rate can have their Disposition changed by one level for every two\ndrops to half. Cunning or devious quarry may attempt to Degrees of Success, up to a maximum of three levels by a Full\nconceal or erase their tracks. In any case where an opponent Action use of this Skill. GMs may impose penalties for animals\n", - "page": 105, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_39" - }, { "title": "out of action to regain full Cohesion.", "content": "Catfall Ag 30 Reduce falling damage.\nChem Geld — Immune to seduction, resistant to charm.\nCleanse and Purify Basic Weapons (Flame) Increases the effect of your flamer attacks.\nCombat Formation Int 40 Use Int Bonus for Initiative.\nOpponents get no bonus for outnumbering the\nCombat Master WS 30\ncharacter.\nCombat Sense Per 40 Use Per Bonus instead of Ag Bonus for Initiative.\nConcealed Cavity — Character has a secret compartment on his person.\nCounter Attack WS 40 Gain free attack with successful Parry.\nCrack Shot BS 40 Deal +2 Critical Damage with ranged weapon.\nCrippling Strike WS 50 Deal +4 Critical Damage with melee weapon.\nCrushing Blow S 40 Deal +2 Damage with melee weapons.\nDeadeye Shot BS 30 Called Shots are at –10 penalty.\nCause greater damage when charging or dropping\nDeath From Above Adeptus Astartes, Pilot (Personal)\ninto combat using a jump pack.\n", @@ -486,15 +441,6 @@ "category": "psychic", "id": "rule_54" }, - { - "title": "successful Willpower Test.", - "content": "t\n", - "page": 117, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "psychic", - "id": "rule_55" - }, { "title": "Prerequisites: Intelligence 30", "content": "Logic and analysis do for the character what Tarot and\nfeeDback screech the bones claim to do for the superstitious masses. By\nPrerequisites: Techmarine or Mechanicus Implants careful consideration of all the possible consequences, and\nThe character can scramble his vox synthesizers, causing a examination of all evidence and information, the character\nhideous blast of noise that shocks and distracts others. All can identify the best path for success. By spending 10 minutes\nunprotected creatures within a 30-meter radius who have the studying or analysing a problem, the character gains a +10\nability to hear must make a Willpower Test or lose a Half bonus to his next Intelligence Test.\nAction on their next turn as they involuntarily react to the\ncacophonous shriek.\nfrenzy GunslinGer\nThe character’s temper and passion boil just below the surface Prerequisites: Ballistic Skill 40, Two-Weapon Wielder\nof his psyche, mostly held in check by his rational mind, but The character has trained with pistols for so long that they are\neasily released when needed. If the character spends one full like extensions of his own body, barely requiring conscious\nRound fuelling his anger—by flagellation, drugs, or other thought to aim and fire. When armed with two pistols, the\nmeans—on the next Round he goes into an uncontrolled rage, character reduces the penalty for Two-Weapon Fighting by\n", @@ -515,12 +461,12 @@ }, { "title": "Prerequisites: Toughness 40", - "content": "GooD repuTaTion The character’s constitution rebounds quickly from shock\nPrerequisites: Fellowship 50, Peer (of that group) or injury. When undergoing medical treatment or healing\nTalent Groups: Adeptus Arbites, Adeptus Astra Telepathica, from injures, the character recovers Damage as if Lightly\nAdeptus Astartes, Adeptus Mechanicus, Adepta Sororitas, Damaged.\nAdeptus Titanicus, Administratum, Astropaths, Chartist Captains,\nEcclesiarchy, Imperial Guard, Imperial Navy, Inquisition,\nNavigators, Officio Assassinorum, PDF, Planetary Governors,\nd\nRogue Trader, Schola Progenium, Scholastica Psykana Talent Groups: Chaos Space Marines, Daemons, Mutants,\nThe character is well respected within a social group or Psykers, Xenos (specific), other\norganisation. The character gains an additional +10 bonus to A group, organisation, or race has wronged the character in\nFellowship Tests when dealing with this group. This Talent the past, fuelling this animosity. When fighting opponents of\nis cumulative with Peer, for a total of a +20 bonus. This that group in close combat, the character gains a +10 bonus\nbonus also applies to Influence Tests when dealing with this to all Weapon Skill Tests made against them.\nparticular group. The GM and player may agree to award this\nTalent when appropriate to the adventure or campaign.\ng\nTalent Groups: Bolt, Las, Launcher, Melta, Plasma, Primitive,\n", - "page": 118, + "content": "The character is able to shrug off wounds that would fell\nlesser men. Whenever the character suffers Critical Damage,\nhalve the result (rounding up).\nExample: Agamemnon takes a grievous wound from a\ntyranid warrior. After reduction for Armour and Toughness,\nThe flesh is Weak the Scything Talon strike still does 8 Damage. Unfortunately,\nPrerequisites: Mechanicus or Techmarine Implants it’s been tough going and Agamemnon only has 4 Wounds\nThe character’s body has undergone significant bionic remaining, which would normally result in 4 points of Critical\nreplacement to the point where he is far more machine than man. Damage. However, since he has the True Grit Talent, he only\nThis Talent grants the character the Machine Trait page\n(see 133) takes 2 points of Critical Damage.\nwith Armour Points equal to the number of times this Talent\nhas been taken. The character may purchase this Talent multiple\ntimes in accordance with his Career Path. In this case, note the\nTWo-Weapon WielDer\nnumber of times this Talent has been taken, such as The Flesh Talent Groups: Ballistic, Melee\nis Weak 3. Prerequisites: Ballistic Skill 35 or Weapon Skill 35, Agility 35\nYears of training allow the character to use a weapon in each\nhand when needed. When armed with two weapons of the\nThunDer charGe same type, the character may spend a Full Action to attack\n", + "page": 127, "source": "Core Rulebook", "sourceAbbr": "CR", "category": "general", - "id": "rule_58" + "id": "rule_67" }, { "title": "Prerequisites: Intelligence 40", @@ -576,33 +522,6 @@ "category": "general", "id": "rule_64" }, - { - "title": "Prerequisites: Intelligence 30", - "content": "Either through the ease of long practice, or the proper ritual\nto appease a weapon’s machine spirit, the character can clear\nstoppages with a simple knock. The character may un-jam\nany gun as a Half Action, but may only perform this rite\non one weapon per Round. The character must touch the\nweapon to enact this rite.\ng\nTalent Groups: Universal\nThe character’s mastery of the balance, spin, and weight of\nthrown weapons makes him a formidable foe at any distance,\neven if only armed with a knife. The Universal group includes\nthe Primitive, Chain, Shock, and Power weapon groups. When\nIV: Talents & Traits\na character attempts to use a weapon he does not have the\ncorrect Weapon Training Talent for, he suffers a –20 penalty\nto any relevant Weapon Skill or Ballistic Skill Test.\nToTal recall\n", - "page": 126, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_65" - }, - { - "title": "Prerequisites: Intelligence 30", - "content": "Mental conditioning or augmentation enables the character\nto record and recall great amounts of information, effectively\ngranting him a perfect memory. The character can\nautomatically remember trivial facts or pieces of information\nhe might feasibly have picked up in the past. When dealing\nwith more detailed, complex, or obscure facts, such as the\nexact layout of a defence network, the GM may require a\nsuccessful Intelligence Test to recall the information.\nt\n", - "page": 127, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_66" - }, - { - "title": "Prerequisites: Toughness 40", - "content": "The character is able to shrug off wounds that would fell\nlesser men. Whenever the character suffers Critical Damage,\nhalve the result (rounding up).\nExample: Agamemnon takes a grievous wound from a\ntyranid warrior. After reduction for Armour and Toughness,\nThe flesh is Weak the Scything Talon strike still does 8 Damage. Unfortunately,\nPrerequisites: Mechanicus or Techmarine Implants it’s been tough going and Agamemnon only has 4 Wounds\nThe character’s body has undergone significant bionic remaining, which would normally result in 4 points of Critical\nreplacement to the point where he is far more machine than man. Damage. However, since he has the True Grit Talent, he only\nThis Talent grants the character the Machine Trait page\n(see 133) takes 2 points of Critical Damage.\nwith Armour Points equal to the number of times this Talent\nhas been taken. The character may purchase this Talent multiple\ntimes in accordance with his Career Path. In this case, note the\nTWo-Weapon WielDer\nnumber of times this Talent has been taken, such as The Flesh Talent Groups: Ballistic, Melee\nis Weak 3. Prerequisites: Ballistic Skill 35 or Weapon Skill 35, Agility 35\nYears of training allow the character to use a weapon in each\nhand when needed. When armed with two weapons of the\nThunDer charGe same type, the character may spend a Full Action to attack\n", - "page": 127, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_67" - }, { "title": "equal to the character’s Intelligence Bonus.", "content": "unshakeable faiTh\nThe character’s confidence in the Emperor is so strong that\nWhirlWinD of DeaTh\nthe character can face any danger. The character may re-roll Prerequisites: Adeptus Astartes\nany failed Willpower Tests to avoid the effects of Fear (see When facing massed opponents in combat, the Battle-Brother\npage 276). becomes a whirlwind of death, moving, hacking, gutting, and\nbeheading with ceaseless fury. When attacking an enemy with\nthe Horde trait in close combat, the Battle-Brother doubles\nWall of sTeel any Damage dealt to the Horde’s Magnitude. For example,\nPrerequisites: Agility 35 if the Battle-Brother’s attacks would reduce the Horde’s\nThe character’s skill with blades is so profound that to try to Magnitude by 3, this amount is doubled to 6.\nland a blow on him is like trying to strike an invisible wall of\nsteel, as the character’s blade is constantly in the correct place\nto deflect an attack. The character may make one additional\nParry per Round, in effect giving the character a second Prerequisites: Adeptus Astartes, Intelligence 40\nReaction that may only be used to Parry. The character may The Battle-Brother has survived many wars, seen much, and\nonly attempt a single Parry against any one attack. been favoured with the experience of his chapter’s most\n", @@ -630,24 +549,6 @@ "category": "general", "id": "rule_70" }, - { - "title": "Requisition", - "content": "•\n", - "page": 136, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "equipment", - "id": "rule_71" - }, - { - "title": "Renown", - "content": "•\nCRaftsmanship\n•\nweapons\n•\nr\n•\nwaRgeaR &\nReliCs\n•\nChapteR\ntRappings\n•\nCybeRnetiCs\nChapter V: The resources of the Deathwatch exceed those of any\ntraditional Chapter. The wargear in a Watch Fortress’s\narmoury has many sources: equipment specialised to the\nArmoury\npurpose of fighting xenos forged by the Deathwatch’s own\nartificers, tithes from the Chapters sworn to the Deathwatch,\nInquisitional support, caches revealed by the cryptic Omega\nVault, and even technology captured during thousands of\n“The history of our chapter is in this bolter. Twelve times it has years at war with the alien.\npassed from one of our fallen Brothers to his successor. May the deeds\n", - "page": 136, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_72" - }, { "title": "Requisition", "content": "it performs in your hands live up to theirs.”\nV: Armoury\n–Sergeant Caelicus of the Ultramarines, upon a Scout’s\ninduction to the 10th Company\nVictory is just a prelude to the next battle.\nE\nach Adeptus Astartes is a weapon unto himself, an\ninstrument of war left behind to safeguard humanity –maxim of the Blood Ravens Chapter\nin the God-Emperor’s stead. This sacred task is\nT\nassailed from every corner of the galaxy by every manner of hough the Deathwatch’s tools of war fill armoured\nfoe; a Battle-Brother faces threats so terrible that the mere chambers deep beneath Watch Fortress Erioch and\nknowledge of them can break mortal men. He could not hold sleep in the holds of its scattered Watch Stations, its\nback this abominable tide without weapons as carefully forged resources are still ultimately finite. The Forge Master must\nand time-tempered as his own gene-seed. The Space Marines ensure all Deathwatch Kill-teams in the Jericho Reach are\nare a remnant of the mighty Imperium that was, and their sufficiently equipped to fight the enemies of man. Simply\ntools of war reflect this same might. Their arsenals include keeping a steady stock of bolt shells requires vigilantly\nthe finest weapons and armour in the Imperium—equipment protected and secret supply lines. Replacing a suit of\nworthy of the Adeptus Astartes’ legacy. Terminator Armour may take years, and if a relic blade strikes\n", @@ -1118,12 +1019,12 @@ }, { "title": "Cohesion", - "content": "•\n", - "page": 200, + "content": "of any successful attack, and are always removed first before\napplying Damage to the Battle-Brother’s normal Wounds.\nThese bonus Wounds will also be lost if the Battle-Brother\nRighTeous zeal (blaCk TeMplaRs) leaves his chosen location either by his own choice or\nRequired Rank: 1 involuntarily.\nEffects: The Black Templars are well known for their fanatical Improvement: At Rank 3 and above the temporary Wounds\ndevotion to the Emperor and their burning hatred for psykers, increase to 12. At Rank 5 and above the Battle-Brother may\nwitches, and warp spawn. Once per combat, a Battle-Brother of move a number of metres equal to his Agility Bonus each\nthe Black Templars Chapter may call upon Righteous Zeal as a round without losing the effects of the ability. At Rank 7 and\nFree Action at the start of his Turn. While under the effects of the above the temporary Wounds increase to 18.\nRighteous Zeal, Damage inflicted by the Battle-Brother’s melee\nattacks against creatures with the Daemonic Trait is not reduced\nby Toughness Bonus. In addition, the Battle Brother’s own\nwolf senses (spaCe wolves)\nToughness Bonus is increased by +4 when reducing Damage Required Rank: 1\nfrom attacks by creatures with the Daemonic Trait or Damage Effects: As part of the genetic gifts of their Primarch Leman\nfrom Psychic Powers and weapons. Righteous Zeal lasts for a Russ, the Space Wolves have almost preternatural senses\n", + "page": 216, "source": "Core Rulebook", "sourceAbbr": "CR", "category": "general", - "id": "rule_125" + "id": "rule_140" }, { "title": "squad Mode and", @@ -1134,33 +1035,6 @@ "category": "general", "id": "rule_126" }, - { - "title": "Strength", - "content": "push over a grox.\nsucceed, the one with the most Degrees of Success wins. If both\nDegrees of Success are the same, the highest Characteristic\nResist poison or disease, tolerate\nToughness temperature extremes, stave off hunger, Bonus wins. If the result is still a tie, the lowest dice roll wins.\nresist mutation. Should both parties fail, one of two things occurs. Either\nDetermine Initiative, maintain balance there is a stalemate and nothing happens or both parties should\nAgility on a narrow surface, navigate treacherous re-roll until there is a clear winner.\nterrain.\nRecall an important detail, identify a\n", - "page": 202, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_127" - }, - { - "title": "Intelligence", - "content": "familiar face, solve a puzzle. exaMple\nNotice a hidden enemy, locate a secret Ulfric is trying to force open a bunker door while a group of terrified\n", - "page": 202, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_128" - }, - { - "title": "Perception", - "content": "door, gauge another person’s attitude. traitor guardsmen try to hold it closed. The GM decides this is an\nWillpower Resist a Psychic Power, torture, or Fear. opposed Strength, and so Ulfric’s player rolls against his character’s\nMake a good impression or inspire Strength of 41, while the GM roll against the collective guardsmen\n", - "page": 202, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_129" - }, { "title": "Fellowship", "content": "confidence. Strength of 35. Ulfric’ player rolls a 31, passing his test, while the\nGM rolls a 30 for the guardsmen. As they both passed, the winner is\ndetermined by who passed by the most. This is Ulfric, passing by 10\ndegRees of suCCess and failuRe compared to the guardsmen’s 5. Flinging the door open, Ulfric storms\ninto the bunker to deliver the Emperor’s justice to the traitors.\nFor most tests, it is enough to know whether a character\nsucceeded or failed. Sometimes, however, it is useful to know\nhow well a character succeeded, or how badly he failed. This\nTesT diffiCulTy\nis particularly important with social skills, such as Charm and Not all tests are equal. Setting a melta bomb on a stationary\nInquiry, as well as certain combat situations, such as firing a bunker and placing the same bomb on a moving battle tank\ngun capable of a semi-automatic or fully automatic burst. while under fire may both require Demolition Tests, but the\nMeasuring Degrees of Success and Failure in a Skill or latter is clearly harder than the former. But how much harder\nCharacteristic Test is straightforward. After the percentage is one from the other? This is where test difficulty and the roll\nroll is made, compare the roll with the modified Characteristic of the GM both come into play.\nscore. For each full 10 points by which the Characteristic was In some cases, the difficulty of a test is pre-determined by\n", @@ -1208,12 +1082,12 @@ }, { "title": "Cohesion Challenges", - "content": "Free Action and is taken as soon as the damage occurs. Cohesion is not just used to activate Squad Mode abilities but\nSince damage to Cohesion relies on shock and confusion, can also be used to quickly enter Squad Mode or maintain\nthere are limits to the amount that a Kill-team can suffer in a it under certain stresses, or test the Kill-team’s trust in each\nsingle combat Round—additional explosions, storms of shells, other and faith in their leader’s abilities. In both cases this is\nand artillery have little additional effect. For this reason, a Kill- know as a Cohesion Challenge. To pass this test, a character\nteam will only ever suffer 1 point of Cohesion damage each must roll equal or less to his Kill-team’s current Cohesion\nTurn, with any additional Cohesion damage being ignored. on 1d10.\nexaMple\nA potent Psychic Power is assaulting Palarius and his brothers, filling\nthem with doubt and distrust. The GM decides that each Battle-\nBrother must pass a Cohesion Challenge to maintain Squad Mode.\nThe Kill-team’s current Cohesion is 6, so Palarius and his brothers\nmust roll 6 or less on 1d10 to pass the Cohesion Challenge.\nSquad Mode whaT iS SqUad mode? Squad Mode can only be entered deliberately by a character\nand Solo Mode by using an action or passing a Cohesion Challenge (see page\n212). While in Squad Mode, a Space Marine is linked to any\n", - "page": 211, + "content": "Devastator Marine or Ignore jams, re-roll tests to Fire Support, Fire for Effect,\nOath of the Weapon\nTechmarine confirm Righteous Fury Tank Buster\nExecution\n“They dropped from the sky like angels of death destroying all in\ntheir path and bringing the Emperor’s justice to that wicked world.”\n–From the Remembrances of the Grand Crusade\nVII: Playing the Game\ns\nAll missions have one or more objectives that the players\nmust achieve in order for the Mission to be completed. An\nobjective is a way of quantifying the success of a Mission and\ngiving the players a set of clear goals for their characters to\nachieve. In keeping with the military nature of Deathwatch,\nobjectives are typically set by the GM when the Mission is\ncreated and passed on to the characters during the Mission\nbriefing. However, such is the fickle nature of war that\nobjectives can often change during the course of a Mission,\nand the players can even come up with their own objectives.\nThere are three kinds of objectives, some or all of which may\nbe present in a Mission.\npRiMaRy\nThese are the key objectives to the Mission that are vital for\nits completion. If the players do not complete their primary\nobjectives, then the Mission is considered a failure. For this\nreason, when the GM sets the Mission’s primary objectives,\noaTh of The weapon he should keep them as simple and as broad as possible. For\nSpace Marines drill constantly, and when they are not fighting. instance, a primary objective could be to destroy an enemy\n", + "page": 228, "source": "Core Rulebook", "sourceAbbr": "CR", "category": "general", - "id": "rule_135" + "id": "rule_148" }, { "title": "Battle-Brother using the Squad Mode ability.", @@ -1251,15 +1125,6 @@ "category": "general", "id": "rule_139" }, - { - "title": "Cohesion", - "content": "of any successful attack, and are always removed first before\napplying Damage to the Battle-Brother’s normal Wounds.\nThese bonus Wounds will also be lost if the Battle-Brother\nRighTeous zeal (blaCk TeMplaRs) leaves his chosen location either by his own choice or\nRequired Rank: 1 involuntarily.\nEffects: The Black Templars are well known for their fanatical Improvement: At Rank 3 and above the temporary Wounds\ndevotion to the Emperor and their burning hatred for psykers, increase to 12. At Rank 5 and above the Battle-Brother may\nwitches, and warp spawn. Once per combat, a Battle-Brother of move a number of metres equal to his Agility Bonus each\nthe Black Templars Chapter may call upon Righteous Zeal as a round without losing the effects of the ability. At Rank 7 and\nFree Action at the start of his Turn. While under the effects of the above the temporary Wounds increase to 18.\nRighteous Zeal, Damage inflicted by the Battle-Brother’s melee\nattacks against creatures with the Daemonic Trait is not reduced\nby Toughness Bonus. In addition, the Battle Brother’s own\nwolf senses (spaCe wolves)\nToughness Bonus is increased by +4 when reducing Damage Required Rank: 1\nfrom attacks by creatures with the Daemonic Trait or Damage Effects: As part of the genetic gifts of their Primarch Leman\nfrom Psychic Powers and weapons. Righteous Zeal lasts for a Russ, the Space Wolves have almost preternatural senses\n", - "page": 216, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_140" - }, { "title": "using squad Mode abiliTies", "content": "rank as the Imperium’s finest fighting arm and easily the equal Squad Mode abilities function just like other Actions and can\nof any xenos, Chaos, or heretic foe. While this superiority is in be activated by a Battle-Brother in his Turn. There is no test\npart the result of their genetic heritage, potent arms and armour, to active these abilities; however the Battle-Brother must spend\nand indomitable will, it is also due largely to their training and the required amount of Cohesion (as indicated by the ability)\ncombat tactics. The bond between Battle-Brothers, combined and he must be in Squad Mode. He only needs spend this\nwith a constant training regime, hones a Kill-team’s skills to a cost once, however, and once an ability has been activated, it\nrazor’s edge and makes them capable of preternatural combat remains so for the remainder of the Mission (if the ability is\nfeats. A Space Marine lives and dies by the strength of his Sustained) or for the duration of a single combat (if the ability\nBattle-Brothers. is not Sustained) and may be used by either him or any other\nSquad Mode abilities represent specialised Kill-team training members of his Kill-team in Squad Mode.\nand the superior skill at arms that all Space Marines possess. These Both the Battle-Brother using the action and any other\nare the abilities and special actions that truly allow the player’s members of his Kill-team within his Support Range may then\n", @@ -1323,15 +1188,6 @@ "category": "combat", "id": "rule_147" }, - { - "title": "Cohesion Challenges", - "content": "Devastator Marine or Ignore jams, re-roll tests to Fire Support, Fire for Effect,\nOath of the Weapon\nTechmarine confirm Righteous Fury Tank Buster\nExecution\n“They dropped from the sky like angels of death destroying all in\ntheir path and bringing the Emperor’s justice to that wicked world.”\n–From the Remembrances of the Grand Crusade\nVII: Playing the Game\ns\nAll missions have one or more objectives that the players\nmust achieve in order for the Mission to be completed. An\nobjective is a way of quantifying the success of a Mission and\ngiving the players a set of clear goals for their characters to\nachieve. In keeping with the military nature of Deathwatch,\nobjectives are typically set by the GM when the Mission is\ncreated and passed on to the characters during the Mission\nbriefing. However, such is the fickle nature of war that\nobjectives can often change during the course of a Mission,\nand the players can even come up with their own objectives.\nThere are three kinds of objectives, some or all of which may\nbe present in a Mission.\npRiMaRy\nThese are the key objectives to the Mission that are vital for\nits completion. If the players do not complete their primary\nobjectives, then the Mission is considered a failure. For this\nreason, when the GM sets the Mission’s primary objectives,\noaTh of The weapon he should keep them as simple and as broad as possible. For\nSpace Marines drill constantly, and when they are not fighting. instance, a primary objective could be to destroy an enemy\n", - "page": 228, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_148" - }, { "title": "bad inTelligenCe", "content": "forcing the players to adapt to difficult situations and think Frequently the Imperium’s intelligence about its foes is just\non their feet, complications also increase the difficulty of a plain wrong. Commanders base decisions on unfounded\nmission and as a result the rewards the players gain from it. information and send soldiers to pay for their ignorance.\nHere are 10 typical complications that the GM can use to While the Deathwatch is more careful than most of the\nalter the nature of his missions, though he should feel free Emperor’s forces, they too can suffer from this fate. The GM\nto come up with more of his own. If a degree of randomness should change one of the Mission’s primary or secondary\nobjectives without the knowledge of the players. This change\nshould, however, become quickly apparent, such as arriving\ninseRTion and exTRaCTion to destroy a bridge to discover it does not exist. It is then\nHow the Kill-team reach the battlefield and how they up to the players to discover the new objective and try to\nleave it depends on the nature of the Mission. This could complete it.\ninclude such things as deployment by drop pod from\nlow orbit, direct assault via Thunderhawk gunships,\nor even land-based assaults in Rhinos or Land Raiders\nCuT off\nfrom a forward base. Ultimately it falls to the GM, in As can often happen in the chaos of war, a forward unit can\nthe role of the characters’ commanders, to decide how discover its supply lines cut off as the frontlines shift suddenly.\n", @@ -1486,13 +1342,13 @@ "id": "rule_165" }, { - "title": "fEaR anD", - "content": "Damnation\nChapter IX: The GM\nGame Master\nWhen organising a game of Deathwatch, one player needs\nto be nominated as the GM. It is always a good idea if the\nGM volunteers for the job, as the game will be better if the\nperson running it is enthusiastic about what he is doing.\n“For the Emperor!”\nIX: The Game Master\nUsually, however, the Game Master is decided before the\nplayers get together for their first session, as the role of the\n–Favoured battle cry of the Adeptus Astartes\nGM taken up by the person that has organised the game\nI\nin the first place—probably also the person that bought\nn Deathwatch, the players assume the role of elite warriors\nthis book. It is also common that over time several of the\nof the Imperium and must face the multitude of humanity’s\ngroup’s players may take on the role of the GM, sharing\nfoes across countless battlefields and war-scarred worlds.\nthe work and creating their own adventures. This allows\nThey are the chosen few amongst the uncounted billions of\nplayers a chance to make their own stories and can be very\nhumanity standing between the boiling dark and the flickering\nrewarding as GMs tag-team adventures leading to plots\nlight of civilisation and order. Bringing this bloody reality to\nand campaigns with more depth and detail.\nlife is the role of the Game Master who guides the players in\ntheir endeavours and adventures against the enemies of the ers\nImperium, formulating their missions, spawning horrors for\n", - "page": 262, + "title": "Fear and", + "content": "the Difficulty of the test. Such situations include atmosphere,\nsituation and an NPC’s particular circumstances. However,\nthe most important factor is the NPC’s disposition toward the\nDamnation\nPlayer Character—how the character regards him and what “The enemy shall know fear.”\nIX: The Game Master\nfeelings or lack of feelings the NPC displays. The NPC’s\ndisposition, which is always set by the GM, determines the –Captain Davian Thule of the Blood Ravens\nbase Difficulty. Other factors can adjust the Difficulty up or\nT\ndown as the situation demands. Table 9–5: Dispositions he 41st millennium is a dark and terrible place where\nprovides sample dispositions based on the test a player is mankind’s billions inhabit a universe filled with\nattempting and the corresponding Difficulty. unnumbered horrors and countless dangers. Murderous\nOn a successful test, the target’s Disposition improves by aliens stalk the cold stars, rebellion and treachery fester\none step, plus one step per Degree of Success. On a failed within the shadow of the Imperium’s decaying might, and\ntest, the target’s Disposition remains unchanged and worsens nightmarish forces eternally claw at the very fabric of reality\nby one step for each Degree of Failure. Generally, a target from beyond, seeking both to feast and to corrupt. As a member\nmust at least be Indifferent to do as requested, and then the of the Deathwatch, a Battle-Brother must face all these perils\n", + "page": 275, "source": "Core Rulebook", "sourceAbbr": "CR", "category": "general", - "id": "rule_166" + "id": "rule_173" }, { "title": "the weight of its own fear and confusion.", @@ -1548,15 +1404,6 @@ "category": "general", "id": "rule_172" }, - { - "title": "Fear and", - "content": "the Difficulty of the test. Such situations include atmosphere,\nsituation and an NPC’s particular circumstances. However,\nthe most important factor is the NPC’s disposition toward the\nDamnation\nPlayer Character—how the character regards him and what “The enemy shall know fear.”\nIX: The Game Master\nfeelings or lack of feelings the NPC displays. The NPC’s\ndisposition, which is always set by the GM, determines the –Captain Davian Thule of the Blood Ravens\nbase Difficulty. Other factors can adjust the Difficulty up or\nT\ndown as the situation demands. Table 9–5: Dispositions he 41st millennium is a dark and terrible place where\nprovides sample dispositions based on the test a player is mankind’s billions inhabit a universe filled with\nattempting and the corresponding Difficulty. unnumbered horrors and countless dangers. Murderous\nOn a successful test, the target’s Disposition improves by aliens stalk the cold stars, rebellion and treachery fester\none step, plus one step per Degree of Success. On a failed within the shadow of the Imperium’s decaying might, and\ntest, the target’s Disposition remains unchanged and worsens nightmarish forces eternally claw at the very fabric of reality\nby one step for each Degree of Failure. Generally, a target from beyond, seeking both to feast and to corrupt. As a member\nmust at least be Indifferent to do as requested, and then the of the Deathwatch, a Battle-Brother must face all these perils\n", - "page": 275, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_173" - }, { "title": "01–20", "content": "normally.\nFear grips the character and he begins to shake and tremble. He is at a –10 penalty on all tests for the rest of the\n", @@ -1746,15 +1593,6 @@ "category": "general", "id": "rule_194" }, - { - "title": "SEGEMENTUM", - "content": "Tempestus\nGryphonne IV Rynn’s World\nThe Veiled Region\n", - "page": 287, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_195" - }, { "title": "THE AGES OF HUMANITY", "content": "1st to 5th Millennia—The Age of Terra\nHumanity dominates Earth. Civilisations rise and fall. The Solar System is colonised. Mankind lives\non Mars and the moons of Jupiter, Saturn and Neptune.\nX: The Imperium\n15th to 18th Millennia—The Dark Age of Technology\nMankind begins to colonise the stars using sub-light spacecraft. At first only nearby systems can be\nreached and the colonies must survive as independent states since they are separated from Earth by up\nto ten generations of travel.\n18th to 22nd Millennia—The Dark Age of Technology\nThe invention of the warp drive accelerates colonisation of the galaxy. Federations and empires are\nfounded. The first aliens are encountered and the first Alien Wars are fought. The first human psykers\nare scientifically proven to exist and begin to appear throughout the human worlds.\n22nd to 25th Millennia—The Dark Age of Technology\nThe first Navigators are born, allowing human spaceships to make even longer, quicker warp jumps.\nMankind enters a golden age of enlightenment as scientific and technological progress accelerates.\nHuman worlds unite and non-aggression pacts are secured with dozens of alien races.\n25th to 26th Millennia—The Age of Strife\nTerrible warp storms interrupt interstellar travel. Sporadic at first, the storms eventually prevent any\nwarp jumps being made. The incidence of human mutation increases rapidly and Mankind enters a\ndark period of anarchy and despair.\n26th to 30th Millennia—The Age of Strife\nHuman worlds are ripped apart by civil wars, revolts, alien predation and invasion. Human psykers and\n", @@ -2116,61 +1954,7 @@ "id": "rule_235" }, { - "title": "\b 165 \b 115", - "content": "Index\n", - "page": 392, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_236" - }, - { - "title": "\b 113 \b", - "content": "\b\n", - "page": 392, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_237" - }, - { - "title": "\b 205 \b", - "content": "\b\n", - "page": 392, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_238" - }, - { - "title": "\b 117 \b 271", - "content": "Index\n", - "page": 393, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_239" - }, - { - "title": "\b 119 \b 241", - "content": "\b\n10\n", - "page": 393, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_240" - }, - { - "title": "\b \b", - "content": "121 205\n\b 273 \b 234\n\b 241 \b 123\n", - "page": 394, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_241" - }, - { - "title": "\b \b", + "title": "", "content": "121 228\n\b 149 \b 272\n\b 152 \b 94\n\b 121 \b 203\n\b 208 \b 123\n\b 209 Other Warhammer 40,000 Roleplay Characters and\n\b 262 \b 34\nIndex\n\b 121 \b 241\n", "page": 394, "source": "Core Rulebook", @@ -2178,41 +1962,14 @@ "category": "general", "id": "rule_242" }, - { - "title": "\b 121 \b", - "content": "\b 121 242\n\b 121 \b 25\n\b 248 \b 186, 188\n\b 121 \b 248\n\b 122 \b 147\n\b 122 \b 249\n\b \b 273\n\b 160\n122 \b 28, 161\n\b 122 \b 185\n\b 122 \b 154\n\b 359 \b 227\n\b 241 \b 249\n\b 122 \b 187\n\b 363 \b 180, 184, 185, 189\n\b 122 \b 184\n\b 123 \b 208\n", - "page": 394, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_243" - }, - { - "title": "\b 123 \b", - "content": "\b 123 124\n\b 153 \b 125\n\b 123 \b 236\n\b 148 \b 242\n\b 123 \b 167\n\b 123 \b 242\n\b 123 \b 139, 232\n\b 248 \b 270\n", - "page": 394, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_244" - }, - { - "title": "\b 230", - "content": "\b 226 \b 125\n\b 270 \b 232\n\b 241 \b 245\n\b 27, 205 \b 35\n\b 206 \b 234\n\b 94 \b 243\n\b 241 \b 206\n\b 207\n\b 207\n\b\n248\n\b 101 \b\n\b 228\n\b 242 243\n\b 125 \b 112\n\b 247 \b 108\n\b 249 \b 108\n\b 206 \b 189\n\b 249 \b 190\n\b 58 \b 203\n", - "page": 394, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_245" - }, { "title": "CHARACTERISTICS", - "content": "weaPoN skill BallistiC skill streNgth toughNess agility iNtelligeNCe n will Power p\n(ws) (Bs) (s) (t) (ag) (iNt) (Per) (wP) (Fel)\nIndex\n", - "page": 396, + "content": "weaPoN skill BallistiC skill streNgth toughNess agility iNtelligeNCe n will Power p\n(ws) (Bs) (s) (t) (ag) (iNt) (Per) (wP) (Fel)\nWEAPON WEAPON\nNAME NAME\nCLASS PEN CLASS PEN\nIndex\nCLIP RLD CLIP RLD\nSPECIAL RULES SPECIAL RULES\nWEAPON ARMOUR HEAD ARMOUR ADDITIONS\n", + "page": 397, "source": "Core Rulebook", "sourceAbbr": "CR", "category": "general", - "id": "rule_246" + "id": "rule_250" }, { "title": "SKILLS", @@ -2241,15 +1998,6 @@ "category": "general", "id": "rule_249" }, - { - "title": "CHARACTERISTICS", - "content": "weaPoN skill BallistiC skill streNgth toughNess agility iNtelligeNCe n will Power p\n(ws) (Bs) (s) (t) (ag) (iNt) (Per) (wP) (Fel)\nWEAPON WEAPON\nNAME NAME\nCLASS PEN CLASS PEN\nIndex\nCLIP RLD CLIP RLD\nSPECIAL RULES SPECIAL RULES\nWEAPON ARMOUR HEAD ARMOUR ADDITIONS\n", - "page": 397, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_250" - }, { "title": "NAME", "content": "Type: ✔✓?\nCLASS PEN 〔 〕\nRIGHT ARM LEFT ARM\nCLIP RLD (11-20) BODY (21-30)\n", @@ -2268,15 +2016,6 @@ "category": "general", "id": "rule_252" }, - { - "title": "NAME", - "content": "CLASS PEN RIGHT LEG LEFT LEG\n(71-85) (86-00) ✔✓?\nCLIP RLD 〔 〕\nType: Type:\n", - "page": 397, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_253" - }, { "title": "〔 POWER ARMOUR ABILITIES 〕", "content": "SPACE MARINE TALENTS & TRAITS Servo-Augmented Musculature: +20 Strength\nAuto-senses: Dark Sight, immune to Photon Flash and Stun Grenades;\nAmbidextrous ____________________________ Called Shots are Half Actions; +10 to Sight and Hearing Awareness Tests\nAstartes Weapon Training ____________________________ (total of +20 bonus with Heightened Senses)\nBulging Biceps ____________________________ Built-in Vox Link\nHeightened Senses (Hearing, Sight) ____________________________ Built-in Magboots\nKilling Strike ____________________________ Nutrient Recycling: Can operate for two weeks without re-supply\nNerves of Steel ____________________________ Recoil Suppression: May fire Basic weapons 1-handed without penalty\nQuick Draw ____________________________ Size: Hulking (Black Carapace means no bonus for enemies to attack)\nResistance (Psychic Powers) ____________________________ Poor Manual Dexterity: Delicate tasks suffer a –10 penalty, unless using\nTrue Grit ____________________________ equipment designed for Space Marines\n", @@ -2322,15 +2061,6 @@ "category": "general", "id": "rule_258" }, - { - "title": "SOLO MODE", - "content": "Index\n™\n", - "page": 399, - "source": "Core Rulebook", - "sourceAbbr": "CR", - "category": "general", - "id": "rule_259" - }, { "title": "OF THE 41ST MILLENNIUM", "content": "You are a Space Marine, one of the Imperium’s supreme\nwarriors. Genetically enhanced and engineered with\nspecial implants to be the ultimate soldier, you are far\nstronger, tougher—and deadlier—than any human\nbeing. You have been selected to join an elite warrior\nbrotherhood of alien-hunters known as the Deathwatch.\nAs a Deathwatch Space Marine, your duty is to seek\nout vile alien ruins on forbidden worlds, venture\nbehind enemy lines to perform special missions no-\none else can accomplish, and confront the most\ndangerous challenges the galaxy possesses...challenges\nthat only the heroes of the Space Marines can defeat.\nFast character creation to get you into the game\nquickly, followed by a lifetime of possibilities\nwith an expanded Speciality system.\nDynamic rules for all eventualities that let\nyou handle everything from social interaction\n™\nto deadly fast-paced combat, psychic\npowers, and structured adventures known as\nMissions, perfect for Deathwatch games.\nComprehensive background on Space\nMarines and the Deathwatch, written by\nWarhammer 40,000 Novelist Andy Hoare.\nPlace your players directly into the front\nlines of the crusade with a complete\nadventure to get you started.\nThe Deathwatch core rulebook contains\neverything you need to start your adventure\nin the Warhammer 40,000 universe. 781JUN10\nDeathwatch\b DW01\n", @@ -2341,7 +2071,7 @@ "id": "rule_260" }, { - "title": "ISBN:\b978-1-58994-778-8", + "title": "ISBN:978-1-58994-778-8", "content": "™\nwww.FantasyFlightGames.com 9 781589 947788 55995\n™\n", "page": 400, "source": "Core Rulebook", @@ -2349,15 +2079,6 @@ "category": "general", "id": "rule_261" }, - { - "title": "GAMES USA", - "content": "Copyright © Game Workshop Limited 2010. Games Workshop, Warhammer 40,000, Warhammer 40,000 Role Play, Deathwatch, the\nGame Master’s Kit, the foregoing marks’ respective logos, and all associated marks, logos, places, names, creatures, races and race insignia/\ndevices/logos/symbols, vehicles, locations, weapons, units and unit insignia, characters, products and illustrations from the Warhammer\n40,000 universe and the Deathwatch game setting are either ®, ™, and/or © Games Workshop Ltd 2000-2010, variably registered\nin the UK and other countries around the world. This edition published under license to Fantasy Flight Publishing Inc. All rights\nreserved to their respective owners. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any\nform by any means, electronic, mechanical, photocopying, recording or otherwise, without the prior permission of the publishers.\nISBN: 978-1-58994-779-5 Product Code: DW02 Print ID: 821AUG10\nPrinted in China\nFor more information about the Deathwatch line, free downloads, answers\nto rule queries, or just to pass on greetings, visit us online at\nwww.FantasyFlightGames.com\nShadow of Madness\nErioch\n•\nBaraBan\n•\nThE TowEring\ngladEs\n•\nBEhind EnEmy\nlinEs\n•\nt\n•\nt\nShadow of Perhaps intending to preserve the planet’s ecosystem\nfor their own use, the enemy planted Delirium Trellises to\ninfect the population with visions of death and insanity. The\nMadness tormented inhabitants tore one another apart, becoming just\n", - "page": 1, - "source": "Game Master's Kit", - "sourceAbbr": "GMK", - "category": "general", - "id": "rule_262" - }, { "title": "by Kroot (Novice Objective, 6 Requisition)", "content": "The war-torn Jericho Reach needs the Spear of Fury far too\nTertiary Objective: Rescue the General (Veteran\ngreatly for it to idle waiting in orbit. Jaresh gives the Kill-\nObjective, not included in calculation)\nteam a vox beacon to signal when they are ready for retrieval.\nTertiary Objective: Deal with the crazed Guardsmen\nBrother Dane pilots the Battle-Brothers to Epsilon Outpost\nwithout taking their lives (Veteran Objective, not included\n420 in a Thunderhawk. He has explicit orders to drop them\nin calculation)\nand return so his ship can depart. Once they are set down and\nTertiary Objective: Defeat the feral Kroot (Skilled\nany immediate trouble in their landing zone cleared, it would\n", @@ -2529,24 +2250,6 @@ "category": "equipment", "id": "rule_281" }, - { - "title": "ISBN: 978-1-58994-779-5", - "content": "9 781589 947795 51995\nwww.FantasyFlightGames.com\nCopyright © Game Workshop Limited 2010. Games Workshop, Warhammer 40,000, Warhammer 40,000 Role Play, Deathwatch, the Game Master’s Kit, the foregoing marks’ respective\nlogos, and all associated marks, logos, places, names, creatures, races and race insignia/devices/logos/symbols, vehicles, locations, weapons, units and unit insignia, characters, products\nand illustrations from the Warhammer 40,000 universe and the Deathwatch game setting are either ®, ™, and/or © Games Workshop Ltd 2000-2010, variably registered in the UK and\nother countries around the world. This edition published under license to Fantasy Flight Publishing Inc. All rights reserved to their respective owners. No part of this publication may be\nreproduced, stored in a retrieval system, or transmitted in any form by any means, electronic, mechanical, photocopying, recording or otherwise, without the prior permission of the publishers.\nTest Difficulty Ranged Weapons Combat Actions Melee Weapons Weapon Jams Semi-Automatic Weapons Armour\n", - "page": 31, - "source": "Game Master's Kit", - "sourceAbbr": "GMK", - "category": "general", - "id": "rule_282" - }, - { - "title": "Hordes", - "content": "Punishing –50 Grapple Half/Full Attack, Melee Affect a Grappled opponent or escape from a Grapple. the appropriate Talent. In the case of Flame\nAstartes Infernus Pistol Pistol 10m S/–/– 2d10+8 E 13 4 Full – raditional Weapons hours, or until the Full Burst Action has been used.\nHellish –60 Guarded Attack Full Attack, Concentration, Melee –10 WS, +10 to Parry and Dodge. weapons, targets receive +30 to Agility Test to\n", - "page": 31, - "source": "Game Master's Kit", - "sourceAbbr": "GMK", - "category": "general", - "id": "rule_283" - }, { "title": "†† ††† ††", "content": "Shooting an Enormous target.\nLauncher Head Head Arm Body Arm Body much more effective against Hordes than weapons which fire\nMelee attacks against a foe who is outnumbered two to one.\nonly one shot; a lascannon is a weapon for destroying tanks, not\nAstartes Missile Launcher\n(Soundstrike)\nHeavy 250m S/–/– †† †††\n8 Full †† Accurate:\nBalanced:\nAdditional +10 to hit when used with an Aim Action.\n", @@ -2592,19884 +2295,5 @@ "category": "combat", "id": "rule_288" } - ], - "searchIndex": { - "113": [ - 236 - ], - "115": [ - 235 - ], - "117": [ - 238 - ], - "119": [ - 239 - ], - "121": [ - 242 - ], - "123": [ - 243 - ], - "165": [ - 235 - ], - "205": [ - 237 - ], - "211": [ - 12 - ], - "230": [ - 244 - ], - "241": [ - 239 - ], - "271": [ - 238 - ], - "500": [ - 22 - ], - "1000": [ - 21, - 22, - 120 - ], - "1120": [ - 250 - ], - "1500": [ - 21, - 120 - ], - "1820": [ - 100 - ], - "2000": [ - 21, - 120 - ], - "2010": [ - 2, - 261, - 281 - ], - "2039": [ - 75 - ], - "2123": [ - 100 - ], - "2130": [ - 250 - ], - "2140": [ - 79 - ], - "2530": [ - 114 - ], - "3032": [ - 102 - ], - "3138": [ - 114 - ], - "3160": [ - 179 - ], - "3941": [ - 104 - ], - "4059": [ - 75 - ], - "5000": [ - 21 - ], - "5759": [ - 109 - ], - "5967": [ - 115 - ], - "6062": [ - 109 - ], - "6079": [ - 75, - 287 - ], - "6668": [ - 110 - ], - "6971": [ - 110 - ], - "7185": [ - 252 - ], - "7378": [ - 116 - ], - "7982": [ - 116 - ], - "8600": [ - 252 - ], - "8790": [ - 117 - ], - "9199": [ - 118 - ], - "36918": [ - 218 - ], - "40000": [ - 2, - 241, - 261, - 281 - ], - "51995": [ - 281 - ], - "55995": [ - 260 - ], - "71110": [ - 232 - ], - "81100": [ - 81, - 176 - ], - "111130": [ - 232 - ], - "121130": [ - 177 - ], - "141160": [ - 178 - ], - "161170": [ - 178 - ], - "481224": [ - 229, - 231 - ], - "481632": [ - 265, - 275 - ], - "781589": [ - 260, - 281 - ], - "947788": [ - 260 - ], - "947795": [ - 281 - ], - "5101530": [ - 275 - ], - "12243672": [ - 215 - ], - "20002010": [ - 2, - 261, - 281 - ], - "core": [ - 0, - 280 - ], - "rulebook": [ - 0 - ], - "darkness": [ - 1, - 3, - 101, - 102, - 120, - 132 - ], - "the": [ - 1, - 11, - 13, - 16, - 17, - 18, - 20, - 20, - 23, - 23, - 67, - 77, - 86, - 89, - 118, - 135, - 156, - 160, - 166, - 182, - 189, - 191, - 195, - 199, - 200, - 200, - 203, - 204, - 205, - 222, - 223, - 259, - 270, - 271, - 272, - 273, - 274, - 280, - 285 - ], - "41st": [ - 1, - 172, - 259 - ], - "millennium": [ - 1, - 172, - 259 - ], - "credits": [ - 1 - ], - "deathwatch": [ - 1, - 2, - 3, - 6, - 12, - 13, - 21, - 22, - 37, - 71, - 73, - 75, - 77, - 145, - 148, - 151, - 165, - 166, - 167, - 198, - 200, - 203, - 204, - 206, - 223, - 259, - 261, - 264, - 275, - 281 - ], - "designed": [ - 1, - 78, - 82, - 151 - ], - "direction": [ - 1, - 268, - 269 - ], - "ross": [ - 1 - ], - "watson": [ - 1 - ], - "robinson": [ - 1 - ], - "with": [ - 1, - 4, - 6, - 9, - 10, - 14, - 20, - 23, - 33, - 36, - 37, - 38, - 39, - 40, - 42, - 43, - 46, - 48, - 52, - 53, - 56, - 58, - 60, - 62, - 64, - 65, - 67, - 68, - 71, - 73, - 75, - 77, - 78, - 80, - 81, - 82, - 83, - 84, - 85, - 87, - 88, - 90, - 91, - 94, - 95, - 97, - 99, - 111, - 115, - 116, - 118, - 119, - 120, - 121, - 122, - 125, - 126, - 131, - 138, - 143, - 144, - 152, - 154, - 155, - 156, - 161, - 166, - 167, - 168, - 170, - 174, - 175, - 176, - 177, - 178, - 185, - 187, - 189, - 206, - 207, - 217, - 218, - 222, - 223, - 233, - 248, - 253, - 259, - 262, - 271, - 273, - 280, - 283, - 285, - 287 - ], - "additional": [ - 1, - 6, - 44, - 57, - 62, - 78, - 83, - 85, - 95, - 119, - 134, - 144, - 150, - 152, - 171, - 207, - 283, - 286, - 287 - ], - "concepts": [ - 1 - ], - "little": [ - 1, - 8, - 15, - 134, - 199, - 200 - ], - "stewart": [ - 1 - ], - "production": [ - 1 - ], - "manager": [ - 1 - ], - "lead": [ - 1, - 20, - 73, - 144 - ], - "developer": [ - 1 - ], - "gabe": [ - 1 - ], - "laulunen": [ - 1 - ], - "game": [ - 1, - 2, - 3, - 10, - 11, - 125, - 141, - 145, - 147, - 165, - 166, - 167, - 168, - 172, - 180, - 186, - 222, - 223, - 234, - 261, - 281 - ], - "designer": [ - 1 - ], - "written": [ - 1 - ], - "developed": [ - 1, - 59 - ], - "corey": [ - 1 - ], - "konieczka": [ - 1 - ], - "owen": [ - 1 - ], - "barnes": [ - 1 - ], - "alan": [ - 1 - ], - "bligh": [ - 1 - ], - "john": [ - 1 - ], - "french": [ - 1 - ], - "andrea": [ - 1 - ], - "gausman": [ - 1 - ], - "andy": [ - 1 - ], - "hoare": [ - 1 - ], - "producer": [ - 1 - ], - "michael": [ - 1 - ], - "hurley": [ - 1 - ], - "writing": [ - 1 - ], - "mack": [ - 1 - ], - "martin": [ - 1 - ], - "robin": [ - 1 - ], - "everettmcguirl": [ - 1 - ], - "publisher": [ - 1 - ], - "christian": [ - 1 - ], - "petersen": [ - 1 - ], - "based": [ - 1, - 81, - 158, - 171, - 233, - 248, - 264 - ], - "dark": [ - 1, - 15, - 16, - 17, - 18, - 20, - 120, - 121, - 171, - 172, - 191, - 195, - 202, - 210, - 220, - 231, - 253, - 269 - ], - "heresy": [ - 1, - 20, - 23, - 37 - ], - "kate": [ - 1 - ], - "flack": [ - 1 - ], - "mike": [ - 1 - ], - "mason": [ - 1 - ], - "games": [ - 1, - 2, - 166, - 222, - 261, - 281 - ], - "workshop": [ - 1, - 2, - 261, - 281 - ], - "editing": [ - 1 - ], - "licensing": [ - 1 - ], - "dylan": [ - 1 - ], - "leigh": [ - 1 - ], - "anne": [ - 1 - ], - "reger": [ - 1 - ], - "patrick": [ - 1 - ], - "rollens": [ - 1 - ], - "rees": [ - 1 - ], - "graphic": [ - 1 - ], - "design": [ - 1, - 83 - ], - "head": [ - 1, - 88, - 161, - 162, - 216, - 218, - 249, - 276, - 283, - 285 - ], - "kevin": [ - 1 - ], - "usa": [ - 2, - 261 - ], - "copyright": [ - 2, - 261, - 281 - ], - "limited": [ - 2, - 261, - 281 - ], - "warhammer": [ - 2, - 241, - 261, - 281 - ], - "role": [ - 2, - 123, - 165, - 224, - 261, - 281 - ], - "play": [ - 2, - 10, - 133, - 135, - 138, - 145, - 181, - 205, - 214, - 261, - 281 - ], - "foregoing": [ - 2, - 261, - 281 - ], - "marks": [ - 2, - 227, - 261, - 281 - ], - "respective": [ - 2, - 261, - 281 - ], - "logos": [ - 2, - 261, - 281 - ], - "associated": [ - 2, - 261, - 281 - ], - "places": [ - 2, - 187, - 196, - 261, - 281 - ], - "names": [ - 2, - 125, - 198, - 261, - 281 - ], - "creatures": [ - 2, - 4, - 55, - 68, - 115, - 261, - 281 - ], - "races": [ - 2, - 261, - 281 - ], - "race": [ - 2, - 37, - 261, - 281 - ], - "insignia": [ - 2, - 261, - 281 - ], - "deviceslogossymbols": [ - 2, - 261 - ], - "vehicles": [ - 2, - 95, - 261, - 275, - 281 - ], - "locations": [ - 2, - 261, - 271, - 275, - 281 - ], - "weapons": [ - 2, - 4, - 39, - 43, - 46, - 47, - 53, - 59, - 64, - 71, - 74, - 75, - 76, - 77, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 110, - 154, - 213, - 216, - 217, - 218, - 220, - 223, - 224, - 229, - 230, - 231, - 234, - 253, - 261, - 266, - 268, - 269, - 271, - 276, - 279, - 281, - 282, - 283, - 285, - 286 - ], - "units": [ - 2, - 17, - 85, - 261, - 281 - ], - "unit": [ - 2, - 48, - 80, - 166, - 261, - 263, - 273, - 281 - ], - "characters": [ - 2, - 3, - 4, - 5, - 10, - 33, - 34, - 38, - 46, - 47, - 49, - 50, - 52, - 56, - 57, - 60, - 61, - 64, - 66, - 67, - 80, - 99, - 128, - 131, - 135, - 142, - 145, - 149, - 157, - 164, - 178, - 182, - 206, - 223, - 241, - 261, - 272, - 279, - 281 - ], - "products": [ - 2, - 261, - 281 - ], - "illustrations": [ - 2, - 261, - 281 - ], - "from": [ - 2, - 10, - 12, - 13, - 16, - 17, - 23, - 35, - 37, - 38, - 51, - 56, - 57, - 60, - 62, - 66, - 71, - 72, - 77, - 78, - 86, - 89, - 91, - 105, - 115, - 117, - 119, - 120, - 135, - 138, - 142, - 143, - 145, - 147, - 148, - 149, - 150, - 174, - 176, - 181, - 186, - 191, - 195, - 196, - 197, - 199, - 203, - 205, - 207, - 210, - 211, - 214, - 223, - 232, - 248, - 261, - 269, - 270, - 271, - 272, - 273, - 280, - 281, - 282, - 285 - ], - "universe": [ - 2, - 23, - 261, - 265, - 281 - ], - "setting": [ - 2, - 168, - 170, - 181, - 261, - 281 - ], - "either": [ - 2, - 46, - 58, - 59, - 62, - 64, - 115, - 118, - 126, - 139, - 152, - 156, - 171, - 191, - 206, - 261, - 279, - 281 - ], - "andor": [ - 2, - 261, - 281 - ], - "variably": [ - 2, - 261, - 281 - ], - "registered": [ - 2, - 261, - 281 - ], - "other": [ - 2, - 4, - 34, - 35, - 36, - 49, - 57, - 68, - 69, - 102, - 115, - 119, - 134, - 135, - 137, - 140, - 141, - 149, - 155, - 164, - 172, - 196, - 218, - 223, - 224, - 231, - 241, - 261, - 270, - 281 - ], - "countries": [ - 2, - 261, - 281 - ], - "around": [ - 2, - 69, - 97, - 100, - 104, - 108, - 114, - 117, - 162, - 168, - 261, - 281 - ], - "world": [ - 2, - 3, - 15, - 19, - 20, - 37, - 110, - 116, - 147, - 191, - 194, - 196, - 205, - 223, - 261, - 280, - 281 - ], - "this": [ - 2, - 6, - 9, - 10, - 11, - 18, - 34, - 35, - 36, - 37, - 45, - 46, - 52, - 53, - 56, - 58, - 62, - 64, - 68, - 69, - 71, - 72, - 73, - 74, - 77, - 78, - 82, - 83, - 87, - 89, - 91, - 94, - 106, - 109, - 110, - 115, - 116, - 119, - 120, - 121, - 128, - 129, - 132, - 133, - 134, - 135, - 140, - 142, - 145, - 148, - 158, - 159, - 163, - 164, - 167, - 169, - 177, - 178, - 187, - 189, - 191, - 200, - 201, - 202, - 204, - 207, - 211, - 214, - 217, - 222, - 223, - 232, - 261, - 269, - 271, - 273, - 279, - 280, - 281, - 286 - ], - "edition": [ - 2, - 261, - 281 - ], - "published": [ - 2, - 261, - 281 - ], - "under": [ - 2, - 33, - 68, - 130, - 134, - 261, - 281 - ], - "license": [ - 2, - 261, - 281 - ], - "fantasy": [ - 2, - 261, - 281 - ], - "flight": [ - 2, - 261, - 281 - ], - "publishing": [ - 2, - 261, - 281 - ], - "rights": [ - 2, - 261, - 281 - ], - "reserved": [ - 2, - 94, - 261, - 281 - ], - "their": [ - 2, - 6, - 8, - 16, - 18, - 23, - 33, - 35, - 45, - 48, - 49, - 81, - 90, - 91, - 95, - 125, - 133, - 134, - 139, - 140, - 145, - 147, - 148, - 149, - 153, - 154, - 157, - 164, - 165, - 167, - 169, - 170, - 186, - 189, - 191, - 198, - 199, - 202, - 204, - 209, - 211, - 215, - 222, - 224, - 226, - 234, - 255, - 261, - 262, - 268, - 269, - 271, - 273, - 280, - 281 - ], - "owners": [ - 2, - 261, - 281 - ], - "part": [ - 2, - 38, - 59, - 138, - 140, - 154, - 167, - 168, - 188, - 214, - 222, - 261 - ], - "publication": [ - 2 - ], - "game?": [ - 3 - ], - "introduction": [ - 3 - ], - "dangerous": [ - 3, - 12, - 255, - 259 - ], - "special": [ - 3, - 5, - 10, - 12, - 46, - 69, - 83, - 85, - 91, - 92, - 135, - 189, - 211, - 249, - 259 - ], - "missions": [ - 3, - 18, - 125, - 145, - 147, - 148, - 166, - 167, - 170, - 171, - 259 - ], - "grim": [ - 3, - 204 - ], - "roleplaying": [ - 3 - ], - "create": [ - 3, - 167, - 169, - 222, - 255 - ], - "alter": [ - 3, - 148 - ], - "fictional": [ - 3 - ], - "future": [ - 3 - ], - "player": [ - 3, - 6, - 128, - 129, - 153, - 165, - 172, - 254, - 257 - ], - "form": [ - 3, - 89, - 133, - 210 - ], - "killteam": [ - 3, - 12, - 134, - 136, - 137, - 138, - 141, - 145, - 166, - 169, - 211, - 232, - 255, - 264, - 270, - 271, - 273 - ], - "space": [ - 3, - 4, - 5, - 8, - 9, - 10, - 11, - 12, - 13, - 15, - 20, - 23, - 35, - 45, - 48, - 51, - 57, - 75, - 84, - 85, - 86, - 135, - 144, - 185, - 198, - 210, - 248, - 253, - 255, - 259, - 273 - ], - "marines": [ - 3, - 4, - 5, - 8, - 9, - 10, - 11, - 13, - 23, - 35, - 45, - 57, - 84, - 86, - 198, - 210, - 259, - 273 - ], - "character": [ - 3, - 4, - 5, - 6, - 7, - 9, - 15, - 17, - 35, - 36, - 37, - 38, - 39, - 43, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 95, - 96, - 125, - 129, - 130, - 131, - 132, - 138, - 141, - 142, - 143, - 149, - 150, - 151, - 154, - 155, - 157, - 158, - 159, - 160, - 163, - 164, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 181, - 183, - 184, - 187, - 197, - 254, - 257, - 259, - 272 - ], - "that": [ - 3, - 4, - 5, - 6, - 8, - 10, - 12, - 13, - 16, - 17, - 23, - 37, - 51, - 52, - 55, - 57, - 59, - 60, - 66, - 67, - 72, - 73, - 76, - 86, - 91, - 117, - 118, - 119, - 120, - 125, - 133, - 134, - 135, - 142, - 143, - 144, - 145, - 147, - 148, - 151, - 153, - 154, - 155, - 159, - 160, - 163, - 164, - 165, - 166, - 167, - 168, - 174, - 178, - 183, - 188, - 190, - 191, - 197, - 198, - 199, - 200, - 201, - 203, - 204, - 205, - 207, - 208, - 211, - 214, - 223, - 259, - 264, - 268, - 270, - 271, - 280, - 285, - 286, - 287 - ], - "your": [ - 3, - 4, - 5, - 39, - 63, - 72, - 75, - 130, - 154, - 185, - 186, - 259, - 264, - 280, - 287 - ], - "avatar": [ - 3 - ], - "within": [ - 3, - 15, - 55, - 57, - 59, - 68, - 80, - 90, - 91, - 98, - 99, - 100, - 101, - 102, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 115, - 116, - 117, - 118, - 122, - 141, - 142, - 143, - 205, - 211, - 285 - ], - "perhaps": [ - 3, - 196, - 202 - ], - "elite": [ - 3, - 166, - 197, - 259 - ], - "warrior": [ - 3, - 14, - 66, - 202, - 218, - 259 - ], - "brotherhood": [ - 3, - 259 - ], - "wherein": [ - 3 - ], - "will": [ - 3, - 7, - 8, - 13, - 73, - 118, - 133, - 139, - 140, - 144, - 153, - 163, - 165, - 168, - 201, - 207, - 208, - 211, - 214, - 218, - 245, - 249, - 287 - ], - "stoic": [ - 3 - ], - "soldier": [ - 3, - 154, - 197, - 259 - ], - "wise": [ - 3 - ], - "scholar": [ - 3 - ], - "inspiring": [ - 3 - ], - "leader": [ - 3 - ], - "face": [ - 3, - 67, - 127, - 198, - 204, - 268 - ], - "hostile": [ - 3 - ], - "aliens": [ - 3, - 190, - 198 - ], - "foul": [ - 3, - 34, - 97 - ], - "daemons": [ - 3, - 57, - 115, - 210 - ], - "jericho": [ - 3, - 37, - 203, - 205, - 262 - ], - "reach": [ - 3, - 37, - 84, - 204, - 262 - ], - "next": [ - 3, - 6, - 56, - 72, - 138, - 144, - 183, - 184 - ], - "friends": [ - 3, - 20 - ], - "direct": [ - 3, - 60 - ], - "through": [ - 3, - 10, - 15, - 36, - 46, - 58, - 62, - 63, - 64, - 75, - 77, - 83, - 91, - 94, - 113, - 138, - 163, - 166, - 189, - 222, - 264, - 266 - ], - "region": [ - 3, - 194, - 196, - 200 - ], - "imperium": [ - 3, - 19, - 37, - 45, - 84, - 89, - 149, - 167, - 188, - 195, - 201, - 206, - 214, - 223, - 224, - 226, - 228, - 234, - 275 - ], - "devastated": [ - 3 - ], - "brink": [ - 3 - ], - "series": [ - 3 - ], - "fellowship": [ - 4, - 21, - 24, - 25, - 27, - 31, - 43, - 48, - 57, - 61, - 129 - ], - "(fel)": [ - 4 - ], - "ability": [ - 4, - 13, - 34, - 49, - 51, - 55, - 62, - 130, - 133, - 140, - 141, - 142, - 143, - 189, - 256, - 257 - ], - "interact": [ - 4 - ], - "ballistic": [ - 4, - 21, - 50, - 52, - 56, - 59, - 78, - 154, - 156, - 159, - 162, - 245, - 249, - 271, - 274 - ], - "skill": [ - 4, - 6, - 21, - 22, - 28, - 33, - 34, - 35, - 36, - 37, - 38, - 48, - 49, - 50, - 52, - 56, - 58, - 59, - 61, - 63, - 78, - 119, - 125, - 154, - 156, - 157, - 158, - 159, - 161, - 162, - 223, - 224, - 231, - 245, - 249, - 271 - ], - "deceive": [ - 4, - 25, - 226, - 228 - ], - "charm": [ - 4, - 24, - 39, - 224, - 247 - ], - "befriend": [ - 4 - ], - "them": [ - 4, - 10, - 23, - 38, - 86, - 89, - 91, - 97, - 166, - 171, - 187, - 202, - 209, - 222, - 262, - 271, - 273 - ], - "reflects": [ - 4, - 5, - 77, - 169 - ], - "accuracy": [ - 4 - ], - "ranged": [ - 4, - 39, - 43, - 56, - 75, - 79, - 83, - 89, - 110, - 150, - 152, - 154, - 208, - 215 - ], - "such": [ - 4, - 52, - 59, - 65, - 76, - 78, - 91, - 95, - 96, - 119, - 125, - 132, - 157, - 168, - 169, - 171, - 172, - 186, - 189, - 190, - 201 - ], - "boltguns": [ - 4 - ], - "lascannons": [ - 4, - 277 - ], - "meltaguns": [ - 4 - ], - "each": [ - 4, - 6, - 15, - 17, - 33, - 35, - 69, - 77, - 81, - 83, - 94, - 114, - 119, - 131, - 134, - 135, - 149, - 152, - 155, - 169, - 170, - 177, - 187, - 201, - 268, - 272, - 273, - 279, - 285 - ], - "characteristic": [ - 4, - 6, - 21, - 28, - 69, - 125, - 126, - 158, - 159 - ], - "corresponding": [ - 4 - ], - "bonus": [ - 4, - 7, - 11, - 39, - 40, - 42, - 43, - 47, - 48, - 49, - 51, - 52, - 53, - 58, - 68, - 69, - 78, - 87, - 96, - 119, - 126, - 130, - 139, - 153, - 160, - 163, - 164, - 207, - 253, - 270, - 285 - ], - "strength": [ - 4, - 9, - 21, - 23, - 24, - 27, - 28, - 36, - 47, - 49, - 69, - 79, - 82, - 87, - 105, - 126, - 128, - 129, - 132, - 153, - 159, - 171, - 215, - 216, - 220, - 230, - 231, - 233, - 245, - 248, - 249, - 253, - 266, - 270 - ], - "equals": [ - 4 - ], - "tens": [ - 4 - ], - "digit": [ - 4 - ], - "describes": [ - 4, - 5, - 130 - ], - "physically": [ - 4 - ], - "strong": [ - 4, - 7, - 47, - 67, - 263 - ], - "score": [ - 4, - 6, - 287 - ], - "example": [ - 4, - 6, - 66, - 67, - 69, - 73, - 77, - 83, - 127, - 138, - 142, - 143, - 144, - 156, - 164, - 222 - ], - "intelligence": [ - 4, - 21, - 26, - 27, - 28, - 29, - 30, - 32, - 33, - 37, - 38, - 49, - 55, - 58, - 62, - 64, - 65, - 67, - 127, - 145, - 148, - 160, - 168, - 217, - 245, - 249 - ], - "important": [ - 4, - 125, - 126, - 130, - 171, - 172, - 180 - ], - "note": [ - 4, - 10, - 11, - 69, - 76, - 119, - 125, - 130 - ], - "inherently": [ - 4 - ], - "generally": [ - 4 - ], - "bonuses": [ - 4, - 49, - 50 - ], - "used": [ - 4, - 33, - 35, - 36, - 78, - 82, - 89, - 90, - 95, - 119, - 133, - 134, - 135, - 154, - 171, - 179, - 206, - 207, - 214, - 233, - 268, - 282, - 283 - ], - "possessed": [ - 4, - 14, - 78, - 117 - ], - "incredible": [ - 4 - ], - "possess": [ - 4, - 13 - ], - "determine": [ - 4, - 126 - ], - "perception": [ - 5, - 21, - 27, - 28, - 34, - 51, - 60, - 128, - 248, - 266, - 269 - ], - "(per)": [ - 5 - ], - "well": [ - 5, - 18, - 46, - 57, - 89, - 129, - 139, - 153, - 169 - ], - "perceives": [ - 5 - ], - "surroundings": [ - 5, - 69, - 97 - ], - "acuteness": [ - 5 - ], - "senses": [ - 5, - 51, - 59, - 69, - 96, - 160, - 178, - 183, - 210, - 253 - ], - "have": [ - 5, - 11, - 14, - 16, - 23, - 38, - 55, - 59, - 65, - 68, - 74, - 75, - 91, - 94, - 121, - 133, - 134, - 142, - 147, - 152, - 154, - 156, - 164, - 167, - 170, - 188, - 198, - 201, - 204, - 206, - 259, - 269, - 271, - 279 - ], - "implants": [ - 5, - 13, - 40, - 42, - 43, - 52, - 53, - 55, - 60, - 61, - 66, - 121, - 259 - ], - "affect": [ - 5, - 61, - 76, - 150, - 187, - 272, - 282 - ], - "perception.": [ - 6 - ], - "see": [ - 6, - 153 - ], - "page": [ - 6, - 10, - 12, - 13, - 40, - 67, - 83, - 88, - 109, - 113, - 116, - 120, - 136, - 138, - 149, - 151, - 152, - 174, - 214, - 234, - 287 - ], - "for": [ - 6, - 23, - 89, - 156, - 162, - 167, - 214, - 287 - ], - "details.": [ - 6 - ], - "creating": [ - 6, - 167, - 206 - ], - "rolls": [ - 6, - 42, - 49, - 128, - 129, - 153 - ], - "2d10": [ - 6, - 87, - 109, - 115, - 116, - 117, - 207 - ], - "alternate": [ - 6 - ], - "method": [ - 6, - 197 - ], - "generating": [ - 6 - ], - "weapon": [ - 6, - 10, - 13, - 21, - 39, - 40, - 43, - 47, - 48, - 49, - 50, - 56, - 61, - 63, - 64, - 68, - 72, - 73, - 76, - 77, - 78, - 80, - 81, - 82, - 83, - 84, - 87, - 88, - 89, - 119, - 133, - 144, - 147, - 152, - 153, - 155, - 156, - 157, - 158, - 161, - 178, - 207, - 210, - 213, - 215, - 217, - 218, - 224, - 226, - 229, - 231, - 245, - 249, - 251, - 253, - 271, - 275, - 283, - 285, - 286, - 287 - ], - "gets": [ - 6, - 149, - 151 - ], - "adds": [ - 6, - 207 - ], - "scores": [ - 6, - 233 - ], - "give": [ - 6, - 141, - 265 - ], - "number": [ - 6, - 17, - 61, - 75, - 78, - 83, - 139, - 153, - 207, - 267, - 285, - 286 - ], - "final": [ - 6, - 208 - ], - "repeats": [ - 6 - ], - "process": [ - 6, - 12, - 189 - ], - "rest": [ - 6, - 18, - 104, - 135, - 173, - 176, - 177, - 233 - ], - "points": [ - 6, - 49, - 66, - 76, - 77, - 82, - 110, - 114, - 115, - 117, - 121, - 133, - 155, - 156, - 158, - 160, - 163, - 179, - 187, - 248, - 272 - ], - "assign": [ - 6 - ], - "wishes": [ - 6, - 73, - 143 - ], - "case": [ - 6, - 152, - 282 - ], - "characteristics": [ - 6, - 33, - 115, - 233, - 245, - 249 - ], - "gaining": [ - 6, - 138, - 143, - 187 - ], - "following": [ - 6, - 10, - 38, - 130, - 145, - 154, - 181 - ], - "results": [ - 6, - 77, - 82, - 157, - 284 - ], - "begins": [ - 6, - 138, - 145, - 173, - 195 - ], - "allocate": [ - 6 - ], - "total": [ - 6, - 153, - 160, - 169, - 253 - ], - "roll": [ - 6, - 40, - 79, - 81, - 82, - 126, - 128, - 153, - 157, - 187, - 284, - 285, - 286, - 287 - ], - "techmarine": [ - 7, - 40, - 42, - 43, - 52, - 53, - 55, - 60, - 61, - 66, - 147 - ], - "masters": [ - 7, - 206, - 261, - 281 - ], - "machinery": [ - 7 - ], - "table": [ - 7, - 28, - 35, - 42, - 76, - 80, - 83, - 91, - 120, - 121, - 130, - 135, - 146, - 156, - 158, - 160, - 161, - 168, - 170, - 172, - 179, - 183, - 187 - ], - "movement": [ - 7, - 24, - 25, - 28, - 38, - 79, - 80, - 120, - 130, - 131, - 150, - 151, - 190, - 215, - 217, - 218, - 229, - 231, - 265, - 275 - ], - "metres": [ - 7, - 53, - 59, - 69, - 90, - 99, - 100, - 101, - 102, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 112, - 115, - 116, - 117, - 118, - 121, - 122, - 132, - 139, - 211, - 285 - ], - "round": [ - 7, - 64, - 81, - 90, - 101, - 102, - 104, - 112, - 114, - 119, - 122, - 125, - 132, - 141, - 149, - 159, - 162, - 285 - ], - "half": [ - 7, - 36, - 40, - 64, - 85, - 118, - 119, - 122, - 144, - 150, - 176, - 177, - 253, - 255, - 269 - ], - "move": [ - 7, - 28, - 130, - 139, - 150, - 231, - 265, - 269, - 275 - ], - "full": [ - 7, - 8, - 39, - 42, - 47, - 48, - 52, - 53, - 60, - 83, - 84, - 93, - 114, - 120, - 121, - 150, - 156, - 213, - 229, - 255, - 276, - 282, - 283, - 285 - ], - "charge": [ - 7, - 42, - 47, - 51, - 56, - 90, - 103, - 141, - 146, - 213, - 255 - ], - "they": [ - 7, - 11, - 15, - 23, - 49, - 59, - 73, - 76, - 78, - 81, - 84, - 85, - 86, - 91, - 106, - 116, - 129, - 133, - 141, - 142, - 144, - 147, - 148, - 156, - 164, - 169, - 170, - 171, - 179, - 191, - 195, - 200, - 202, - 214, - 215, - 222, - 255, - 262, - 264, - 268, - 271, - 272, - 280 - ], - "shall": [ - 7, - 172, - 197 - ], - "pure": [ - 7, - 14, - 91, - 166 - ], - "heart": [ - 7, - 8, - 53, - 178 - ], - "body": [ - 7, - 49, - 63, - 66, - 113, - 114, - 115, - 117, - 156, - 163, - 188, - 198, - 213, - 216, - 218, - 233, - 250, - 269, - 276, - 283, - 285 - ], - "untainted": [ - 7 - ], - "doubt": [ - 7, - 121 - ], - "unsullied": [ - 7 - ], - "selfaggrandisement": [ - 7 - ], - "bright": [ - 7 - ], - "stars": [ - 7, - 161, - 188, - 195, - 205 - ], - "firmament": [ - 7 - ], - "battle": [ - 7, - 15, - 20, - 23, - 48, - 51, - 72, - 135, - 165, - 215, - 223, - 248, - 264, - 268, - 272, - 280 - ], - "angels": [ - 7, - 14, - 15, - 16, - 17, - 18, - 20, - 84, - 120, - 121, - 147, - 199 - ], - "death": [ - 7, - 9, - 51, - 67, - 84, - 118, - 147, - 163, - 184, - 199, - 211, - 220 - ], - "whose": [ - 7, - 206, - 210, - 226 - ], - "shining": [ - 7, - 14 - ], - "wings": [ - 7, - 120 - ], - "bring": [ - 7, - 51, - 91, - 179 - ], - "swift": [ - 7, - 42, - 220 - ], - "annihilation": [ - 7 - ], - "enemies": [ - 7, - 9, - 11, - 45, - 63, - 75, - 82, - 168, - 206, - 208, - 211, - 222, - 226, - 253, - 286 - ], - "creation": [ - 7, - 9, - 15, - 17, - 259 - ], - "thousand": [ - 7, - 15, - 18, - 77 - ], - "times": [ - 7, - 42, - 61, - 69, - 71, - 131, - 156, - 188, - 207, - 287 - ], - "years": [ - 7, - 15, - 56, - 71, - 214 - ], - "unto": [ - 7, - 72 - ], - "very": [ - 7, - 19, - 33, - 38, - 132, - 179, - 186, - 201 - ], - "therefore,": [ - 8 - ], - "and": [ - 8, - 9, - 10, - 12, - 13, - 20, - 41, - 53, - 76, - 85, - 86, - 86, - 118, - 125, - 152, - 153, - 156, - 162, - 165, - 166, - 172, - 184, - 200, - 201, - 222, - 233 - ], - "you": [ - 8, - 183 - ], - "know": [ - 8, - 15, - 18, - 129, - 134, - 164, - 172, - 183, - 188, - 265 - ], - "fear.”": [ - 8 - ], - "roboute": [ - 8 - ], - "guilliman": [ - 8 - ], - "primarch": [ - 8, - 14, - 16, - 19, - 20 - ], - "ultramarines": [ - 8, - 72, - 144 - ], - "oleplaying": [ - 8 - ], - "marine": [ - 8, - 9, - 10, - 11, - 13, - 15, - 21, - 22, - 48, - 51, - 73, - 75, - 85, - 135, - 146, - 147, - 167, - 185, - 248, - 253, - 255, - 259 - ], - "presents": [ - 8 - ], - "unique": [ - 8, - 18 - ], - "challenge": [ - 8, - 138, - 166, - 277 - ], - "more": [ - 8, - 15, - 18, - 23, - 50, - 65, - 66, - 85, - 95, - 96, - 125, - 132, - 135, - 147, - 148, - 149, - 153, - 157, - 163, - 171, - 185, - 186, - 188, - 215, - 224, - 270, - 280, - 283, - 284, - 287 - ], - "than": [ - 8, - 12, - 18, - 19, - 49, - 50, - 59, - 66, - 69, - 77, - 96, - 135, - 148, - 153, - 154, - 163, - 164, - 171, - 215, - 218, - 269, - 283, - 287 - ], - "human": [ - 8, - 16, - 96, - 205, - 259 - ], - "largerthanlife": [ - 8 - ], - "figures": [ - 8, - 205 - ], - "akin": [ - 8 - ], - "heroes": [ - 8, - 19, - 120, - 259 - ], - "trojan": [ - 8 - ], - "odyssey": [ - 8 - ], - "inquisitional": [ - 8, - 71 - ], - "acolytes": [ - 8 - ], - "rogue": [ - 8, - 13, - 57 - ], - "trader": [ - 8, - 57 - ], - "companions": [ - 8 - ], - "some": [ - 8, - 11, - 12, - 13, - 33, - 45, - 69, - 76, - 86, - 89, - 130, - 132, - 133, - 136, - 153, - 169, - 181, - 182, - 189, - 200, - 202, - 206, - 222, - 270 - ], - "epic": [ - 8 - ], - "beings": [ - 8, - 115, - 210 - ], - "duel": [ - 8, - 279 - ], - "days": [ - 8 - ], - "over": [ - 8, - 11, - 20, - 63, - 126, - 131, - 176, - 178, - 189, - 190, - 191, - 200, - 201 - ], - "matter": [ - 8, - 74, - 82, - 207 - ], - "honour": [ - 8, - 20, - 40, - 73, - 167, - 215 - ], - "others": [ - 8, - 9, - 45, - 55, - 191, - 199, - 200, - 224 - ], - "philosophers": [ - 8 - ], - "tragic": [ - 8 - ], - "passion": [ - 8 - ], - "regret": [ - 8 - ], - "many": [ - 8, - 11, - 14, - 19, - 20, - 45, - 49, - 50, - 71, - 76, - 85, - 86, - 89, - 125, - 170, - 187, - 189, - 198, - 201, - 214 - ], - "feel": [ - 8, - 148, - 169, - 222 - ], - "chapter": [ - 8, - 11, - 13, - 15, - 17, - 18, - 45, - 71, - 72, - 92, - 118, - 125, - 149, - 165, - 197, - 199, - 200, - 202, - 206, - 214, - 222, - 254, - 257, - 275, - 280 - ], - "just": [ - 8, - 72, - 81, - 134, - 140, - 148 - ], - "better": [ - 8, - 40, - 91, - 165 - ], - "however": [ - 8, - 10, - 17, - 34, - 50, - 66, - 85, - 129, - 133, - 140, - 142, - 145, - 154, - 165, - 172 - ], - "choose": [ - 8, - 49, - 90, - 130, - 164, - 169, - 268 - ], - "interpret": [ - 8 - ], - "these": [ - 8, - 11, - 33, - 45, - 46, - 60, - 63, - 81, - 89, - 94, - 95, - 121, - 130, - 139, - 140, - 145, - 152, - 154, - 202, - 204, - 222, - 264, - 279 - ], - "ideas": [ - 8 - ], - "toughness": [ - 9, - 10, - 21, - 24, - 35, - 57, - 66, - 78, - 109, - 110, - 111, - 114, - 126, - 131, - 160, - 161, - 163, - 164, - 215, - 220, - 222, - 231, - 245, - 248, - 249, - 275, - 276, - 286 - ], - "traits.": [ - 9, - 10 - ], - "abilities": [ - 9, - 10, - 12, - 33, - 61, - 125, - 134, - 135, - 136, - 138, - 140, - 141, - 143, - 146, - 169, - 248, - 253, - 255 - ], - "ossmodula": [ - 9 - ], - "implant": [ - 9, - 11, - 42 - ], - "conjunction": [ - 9 - ], - "several": [ - 9, - 56, - 75, - 91 - ], - "grants": [ - 9, - 52, - 78 - ], - "unnatural": [ - 9, - 69, - 78, - 104, - 110, - 215, - 220, - 230, - 231, - 248, - 266, - 269, - 275 - ], - "trait": [ - 9, - 11, - 67, - 68, - 69, - 120 - ], - "bodies": [ - 9, - 185 - ], - "armoured": [ - 9, - 72, - 145 - ], - "adamantium": [ - 9 - ], - "souls": [ - 9, - 73 - ], - "biscopea": [ - 9 - ], - "protected": [ - 9, - 226 - ], - "loyalty": [ - 9, - 59 - ], - "bolters": [ - 9, - 84, - 85, - 166, - 168, - 255, - 279 - ], - "charged": [ - 9, - 82 - ], - "emperors": [ - 9, - 14, - 73, - 84, - 129, - 147, - 148, - 164, - 188, - 189, - 197 - ], - "thoughts": [ - 9 - ], - "wisdom": [ - 9 - ], - "ranks": [ - 9, - 45, - 166 - ], - "advance": [ - 9, - 21, - 22, - 142, - 146, - 255 - ], - "does": [ - 9, - 38, - 46, - 47, - 66, - 69, - 76, - 89, - 110, - 155 - ], - "devotion": [ - 9, - 59, - 139, - 277 - ], - "haemastamen": [ - 9, - 248 - ], - "organ": [ - 9, - 10, - 248 - ], - "ingame": [ - 9, - 12 - ], - "effect": [ - 9, - 39, - 76, - 79, - 95, - 115, - 119, - 120, - 134, - 143, - 146, - 147, - 161, - 163, - 178, - 179, - 184, - 186, - 255 - ], - "besides": [ - 9 - ], - "chosen": [ - 9, - 69, - 139, - 146 - ], - "chaplain": [ - 10 - ], - "fergas": [ - 10 - ], - "nils": [ - 10 - ], - "larramans": [ - 10, - 248 - ], - "normally": [ - 10, - 66, - 96, - 173, - 175, - 184 - ], - "suffer": [ - 10, - 35, - 46, - 47, - 56, - 62, - 79, - 80, - 85, - 118, - 121, - 133, - 134, - 148, - 155, - 161, - 199, - 211, - 248, - 285 - ], - "blood": [ - 10, - 12, - 14, - 46, - 72, - 75, - 105, - 106, - 118, - 120, - 162, - 172, - 183, - 199, - 213, - 223, - 248 - ], - "loss": [ - 10, - 186, - 248 - ], - "addition": [ - 10, - 78, - 207, - 211, - 264 - ], - "period": [ - 10 - ], - "hypno": [ - 10 - ], - "gains": [ - 10, - 35, - 47, - 55, - 57, - 78, - 96, - 103, - 104, - 114, - 115, - 117, - 119, - 120, - 205 - ], - "true": [ - 10, - 18, - 46, - 51, - 62, - 81, - 122 - ], - "grit": [ - 10 - ], - "talent": [ - 10, - 21, - 22, - 42, - 45, - 46, - 53, - 57, - 58, - 59, - 61, - 62, - 64, - 155, - 282, - 287 - ], - "indoctrination": [ - 10, - 203 - ], - "training": [ - 10, - 21, - 33, - 38, - 40, - 43, - 46, - 61, - 62, - 76, - 125, - 140, - 210, - 213, - 217, - 218, - 224, - 229, - 231, - 253, - 275 - ], - "provides": [ - 10, - 58, - 77, - 155 - ], - "attacks": [ - 10, - 39, - 43, - 46, - 49, - 67, - 118, - 119, - 122, - 152, - 155, - 177, - 208, - 248, - 283 - ], - "warp": [ - 10, - 23, - 37, - 40, - 59, - 94, - 97, - 108, - 110, - 113, - 115, - 116, - 117, - 118, - 139, - 186, - 187, - 189, - 195, - 203, - 210, - 220 - ], - "quality": [ - 10, - 79, - 82, - 83, - 217, - 234, - 248 - ], - "array": [ - 10, - 77, - 88, - 218 - ], - "skills": [ - 10, - 12, - 26, - 28, - 33, - 34, - 56, - 58, - 62, - 210, - 213, - 215, - 217, - 218, - 219, - 220, - 223, - 224, - 226, - 228, - 229, - 231, - 234, - 246, - 265, - 275 - ], - "represent": [ - 10, - 46, - 167 - ], - "still": [ - 10, - 23, - 66, - 125, - 126, - 141, - 142, - 177, - 187 - ], - "inflict": [ - 10, - 49, - 153, - 187, - 285 - ], - "normal": [ - 10, - 61, - 77, - 81, - 85, - 88, - 139, - 207 - ], - "hypnoindoctrination": [ - 10 - ], - "catalepsean": [ - 10, - 248 - ], - "node": [ - 10, - 248 - ], - "suffers": [ - 10, - 35, - 50, - 66, - 97, - 114, - 159, - 160, - 161, - 178 - ], - "penalties": [ - 10, - 88, - 154, - 248 - ], - "begin": [ - 10 - ], - "talents": [ - 10, - 40, - 42, - 45, - 76, - 125, - 210, - 213, - 215, - 217, - 218, - 223, - 224, - 229, - 231, - 234, - 253, - 275 - ], - "traits": [ - 10, - 40, - 45, - 213, - 215, - 217, - 218, - 220, - 223, - 229, - 231, - 234, - 248, - 253, - 275 - ], - "perceptionbased": [ - 10 - ], - "willpower": [ - 11, - 21, - 29, - 53, - 54, - 55, - 67, - 68, - 110, - 112, - 114, - 115, - 123, - 128, - 146, - 183, - 211 - ], - "test": [ - 11, - 34, - 35, - 38, - 40, - 42, - 52, - 53, - 55, - 65, - 68, - 82, - 90, - 95, - 96, - 105, - 107, - 109, - 110, - 112, - 114, - 115, - 116, - 119, - 123, - 125, - 129, - 131, - 132, - 134, - 140, - 150, - 151, - 161, - 172, - 183, - 187, - 211, - 248, - 270, - 271, - 282, - 286 - ], - "leave": [ - 11, - 142 - ], - "progenoids": [ - 11 - ], - "behind.": [ - 11 - ], - "black": [ - 11, - 13, - 18, - 37, - 94, - 139, - 144, - 202, - 253, - 274 - ], - "carapace": [ - 11, - 213, - 220, - 253 - ], - "gives": [ - 11, - 18, - 262 - ], - "exceptional": [ - 11, - 76, - 94 - ], - "control": [ - 11, - 43, - 63, - 162, - 176, - 206 - ], - "power": [ - 11, - 16, - 17, - 18, - 64, - 79, - 80, - 84, - 87, - 88, - 93, - 95, - 112, - 113, - 114, - 116, - 119, - 120, - 121, - 128, - 150, - 189, - 201, - 207, - 245, - 249, - 253, - 276 - ], - "armour": [ - 11, - 14, - 17, - 18, - 66, - 76, - 77, - 79, - 80, - 84, - 88, - 90, - 92, - 94, - 95, - 110, - 111, - 140, - 155, - 160, - 202, - 213, - 215, - 216, - 218, - 220, - 222, - 223, - 224, - 229, - 230, - 231, - 234, - 249, - 253, - 266, - 269, - 275, - 276, - 287 - ], - "although": [ - 11, - 13, - 18, - 200 - ], - "size": [ - 11, - 197, - 215, - 220, - 231, - 253, - 271 - ], - "hulking": [ - 11, - 253 - ], - "gain": [ - 11, - 39, - 40, - 43, - 44, - 50, - 63, - 110, - 115, - 130, - 148, - 248, - 285 - ], - "thanks": [ - 11 - ], - "designers": [ - 11 - ], - "squad": [ - 11, - 12, - 21, - 86, - 125, - 130, - 133, - 134, - 135, - 136, - 137, - 138, - 140, - 141, - 142, - 143, - 146, - 211, - 254, - 255, - 256 - ], - "mode": [ - 11, - 12, - 13, - 83, - 125, - 130, - 134, - 135, - 136, - 137, - 138, - 140, - 141, - 142, - 143, - 146, - 254, - 255, - 258 - ], - "solo": [ - 11, - 12, - 13, - 125, - 130, - 135, - 136, - 137, - 138, - 142, - 256, - 257, - 258 - ], - "cohesion": [ - 11, - 40, - 124, - 130, - 133, - 134, - 136, - 137, - 138, - 139, - 140, - 146, - 147, - 149, - 211 - ], - "notice": [ - 11, - 34, - 127, - 200 - ], - "references": [ - 11, - 153 - ], - "particular": [ - 11, - 37, - 172, - 264 - ], - "mechanics": [ - 11 - ], - "named": [ - 11, - 16 - ], - "rules": [ - 11, - 109, - 113, - 135, - 167, - 211, - 249, - 268 - ], - "discussed": [ - 11 - ], - "detail": [ - 11, - 126 - ], - "viii": [ - 11, - 149, - 152, - 157, - 160, - 162 - ], - "playing": [ - 11, - 125, - 141, - 145, - 147 - ], - "heres": [ - 11 - ], - "brief": [ - 11, - 101, - 109, - 110 - ], - "summary": [ - 11, - 156 - ], - "idea": [ - 11, - 165 - ], - "what": [ - 11, - 15, - 55, - 135, - 165, - 172, - 205, - 207, - 264 - ], - "encompass": [ - 11, - 33 - ], - "because": [ - 11 - ], - "mode)": [ - 12 - ], - "(for": [ - 12 - ], - "cohesion).": [ - 12 - ], - "putting": [ - 12 - ], - "team": [ - 12, - 133, - 138, - 166, - 262, - 271, - 280 - ], - "into": [ - 12, - 17, - 33, - 47, - 49, - 51, - 59, - 75, - 81, - 91, - 102, - 109, - 112, - 116, - 118, - 121, - 129, - 131, - 138, - 143, - 145, - 159, - 160, - 162, - 171, - 181, - 186, - 201, - 206, - 211, - 265, - 280 - ], - "purpose": [ - 12, - 71, - 119 - ], - "being": [ - 12, - 73, - 91, - 105, - 138, - 142, - 143, - 167, - 183, - 233, - 259, - 271 - ], - "separate": [ - 12 - ], - "things": [ - 12, - 34, - 96, - 126 - ], - "provide": [ - 12, - 90, - 223 - ], - "mechanic": [ - 12 - ], - "support": [ - 12, - 71, - 135, - 137, - 138, - 141, - 142, - 143, - 144, - 147, - 170, - 190, - 255 - ], - "overall": [ - 12, - 272, - 273 - ], - "concept": [ - 12 - ], - "group": [ - 12, - 33, - 37, - 42, - 43, - 45, - 49, - 57, - 64, - 127, - 157, - 169, - 222 - ], - "individuals": [ - 12, - 15, - 33, - 37, - 115 - ], - "slowly": [ - 12 - ], - "become": [ - 12, - 99, - 115, - 178, - 214 - ], - "contain": [ - 12 - ], - "angel": [ - 12, - 51, - 88 - ], - "wolf": [ - 12, - 20 - ], - "ultramarineeach": [ - 12 - ], - "whom": [ - 12, - 201 - ], - "benefits": [ - 12, - 42, - 63, - 130, - 138, - 142, - 143 - ], - "chapterbut": [ - 12 - ], - "itself": [ - 12, - 69 - ], - "greater": [ - 12, - 164, - 214 - ], - "parts": [ - 12 - ], - "about": [ - 12, - 14, - 97, - 100, - 148, - 165, - 280 - ], - "disparate": [ - 12 - ], - "becoming": [ - 12, - 186 - ], - "works": [ - 12, - 121 - ], - "togetherin": [ - 12 - ], - "fact": [ - 12, - 77, - 81, - 186 - ], - "there": [ - 12, - 19, - 79, - 88, - 105, - 112, - 115, - 118, - 126, - 131, - 133, - 134, - 140, - 141, - 145, - 149, - 154, - 169, - 185, - 190, - 205, - 208, - 272 - ], - "threats": [ - 12, - 72 - ], - "simply": [ - 12, - 16, - 88, - 226 - ], - "benefits:": [ - 13 - ], - "skill,,": [ - 13 - ], - "willpower,": [ - 13 - ], - "extreme": [ - 13, - 170 - ], - "independence": [ - 13 - ], - "imperiums": [ - 13, - 19, - 140, - 148, - 259 - ], - "righteous": [ - 13, - 40, - 82, - 83, - 139, - 147 - ], - "zeal": [ - 13, - 139 - ], - "authorities": [ - 13, - 201 - ], - "would": [ - 13, - 33, - 35, - 47, - 50, - 59, - 66, - 67, - 156, - 233 - ], - "verges": [ - 13 - ], - "restrictions": [ - 13, - 88 - ], - "templars": [ - 13, - 94, - 139, - 144, - 274 - ], - "element": [ - 13 - ], - "chapters": [ - 13, - 17, - 71, - 77, - 86, - 199 - ], - "fleetbased": [ - 13 - ], - "nature": [ - 13, - 38, - 62, - 148, - 179, - 279 - ], - "goals": [ - 13, - 147, - 166 - ], - "select": [ - 13, - 62, - 69 - ], - "devastator": [ - 13, - 21, - 22, - 73, - 85, - 146, - 147 - ], - "tenthousandyear": [ - 13 - ], - "crusade": [ - 13, - 16, - 20, - 147, - 203 - ], - "take": [ - 13, - 40, - 48, - 85, - 160, - 166, - 175, - 176, - 177, - 211, - 263, - 286 - ], - "librarian": [ - 13, - 119, - 120, - 121, - 122, - 146 - ], - "specialities": [ - 13 - ], - "throughout": [ - 13, - 84, - 89 - ], - "entire": [ - 13, - 17, - 49 - ], - "galaxy": [ - 13, - 16, - 23, - 72, - 89, - 149, - 185, - 195, - 197, - 200, - 259 - ], - "primarily": [ - 13 - ], - "marshals": [ - 13 - ], - "drives": [ - 13 - ], - "crusades": [ - 13 - ], - "ever": [ - 13, - 17, - 164, - 200, - 204, - 280 - ], - "onwards": [ - 13 - ], - "like": [ - 13, - 45, - 140, - 147, - 149, - 271, - 276 - ], - "both": [ - 13, - 36, - 38, - 46, - 52, - 73, - 89, - 115, - 125, - 126, - 129, - 134, - 142, - 155, - 187, - 206, - 208, - 270 - ], - "betchers": [ - 13 - ], - "gland": [ - 13 - ], - "susan": [ - 13, - 248 - ], - "membrane": [ - 13, - 248 - ], - "sanguinius": [ - 14, - 120 - ], - "legion": [ - 14, - 17, - 20 - ], - "radiant": [ - 14 - ], - "said": [ - 14, - 16 - ], - "been": [ - 14, - 16, - 58, - 62, - 66, - 159, - 188, - 202, - 204, - 259, - 282, - 287 - ], - "born": [ - 14, - 77 - ], - "aloft": [ - 14, - 120 - ], - "upon": [ - 14, - 16, - 23, - 72, - 73, - 144, - 197, - 232 - ], - "angelic": [ - 14 - ], - "pinions": [ - 14 - ], - "countenance": [ - 14 - ], - "noble": [ - 14, - 38 - ], - "wore": [ - 14 - ], - "perfectly": [ - 14 - ], - "sculpted": [ - 14 - ], - "gold": [ - 14, - 265 - ], - "blessed": [ - 14, - 46, - 60 - ], - "gift": [ - 14, - 122 - ], - "burden": [ - 14 - ], - "prophecy": [ - 14 - ], - "ways": [ - 14, - 36, - 110, - 133 - ], - "most": [ - 14, - 16, - 17, - 19, - 49, - 84, - 86, - 95, - 126, - 129, - 148, - 170, - 172, - 197, - 199, - 206, - 226, - 259, - 271 - ], - "beloved": [ - 14, - 20 - ], - "sons": [ - 14 - ], - "uncounted": [ - 14 - ], - "multitudes": [ - 14, - 81 - ], - "singing": [ - 14 - ], - "praises": [ - 14 - ], - "every": [ - 14, - 45, - 72, - 85, - 109, - 150, - 188, - 197, - 202, - 217, - 286 - ], - "victory": [ - 14, - 72, - 272 - ], - "laid": [ - 14, - 200 - ], - "before": [ - 14, - 47, - 49, - 73, - 119, - 139, - 145, - 151, - 165, - 205, - 232 - ], - "father": [ - 14 - ], - "abiding": [ - 14 - ], - "sense": [ - 14, - 39, - 50 - ], - "justice": [ - 14, - 129, - 147 - ], - "devoting": [ - 14 - ], - "life": [ - 14, - 96, - 104, - 130, - 163, - 191, - 198 - ], - "bringing": [ - 14, - 147 - ], - "utopia": [ - 14 - ], - "emperor": [ - 14, - 23, - 67, - 139, - 144, - 146, - 164, - 165, - 171, - 188, - 189, - 198, - 214 - ], - "proclaimed": [ - 14 - ], - "–s.s.": [ - 15 - ], - "different": [ - 15, - 85, - 166 - ], - "levels": [ - 15, - 78, - 159, - 160, - 162 - ], - "which": [ - 15, - 18, - 23, - 37, - 38, - 58, - 66, - 94, - 119, - 133, - 142, - 159, - 166, - 171, - 172, - 187, - 189, - 200, - 211, - 264, - 283 - ], - "gradually": [ - 15 - ], - "rise": [ - 15, - 195 - ], - "attaining": [ - 15 - ], - "level": [ - 15, - 21, - 35, - 81, - 130, - 160, - 161, - 179, - 180, - 181 - ], - "granted": [ - 15 - ], - "knowledge": [ - 15, - 37, - 58, - 62, - 146 - ], - "truth": [ - 15 - ], - "behind": [ - 15, - 47, - 72, - 145, - 154, - 156, - 259 - ], - "origins": [ - 15, - 202 - ], - "only": [ - 15, - 17, - 18, - 64, - 66, - 73, - 75, - 76, - 81, - 85, - 87, - 94, - 118, - 119, - 132, - 133, - 163, - 164, - 176, - 177, - 189, - 190, - 195, - 198, - 202, - 204, - 217, - 218, - 233, - 259, - 279, - 283, - 285 - ], - "highestranking": [ - 15 - ], - "members": [ - 15, - 49, - 141 - ], - "terrible": [ - 15, - 72, - 161, - 172 - ], - "shameful": [ - 15 - ], - "secret": [ - 15, - 39, - 58, - 127, - 247 - ], - "occurred": [ - 15 - ], - "repent": [ - 15 - ], - "tomorrow": [ - 15 - ], - "caliban": [ - 15, - 16 - ], - "home": [ - 15, - 179 - ], - "once": [ - 15, - 20, - 23, - 50, - 62, - 139, - 176, - 202, - 205, - 262, - 273, - 279 - ], - "stand": [ - 15, - 42, - 47, - 51, - 107, - 188, - 198, - 200, - 218 - ], - "first": [ - 15, - 17, - 131, - 139, - 154, - 156, - 165, - 195, - 197, - 211 - ], - "amongst": [ - 15, - 16, - 188, - 199 - ], - "verdant": [ - 15 - ], - "dense": [ - 15, - 264 - ], - "forests": [ - 15, - 16, - 264 - ], - "those": [ - 15, - 35, - 45, - 48, - 71, - 73, - 115, - 121, - 122, - 144, - 168, - 189, - 191, - 206, - 234 - ], - "seethed": [ - 15 - ], - "lion": [ - 16, - 20 - ], - "eljonson": [ - 16, - 20 - ], - "call": [ - 16, - 40, - 48, - 53, - 179, - 280 - ], - "when": [ - 16, - 17, - 19, - 23, - 34, - 42, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 56, - 57, - 59, - 60, - 65, - 67, - 76, - 77, - 78, - 83, - 84, - 87, - 90, - 95, - 131, - 144, - 151, - 152, - 154, - 157, - 163, - 164, - 165, - 179, - 184, - 196, - 232, - 248, - 262, - 280, - 283 - ], - "primarchs": [ - 16, - 19, - 179, - 180, - 248 - ], - "were": [ - 16, - 20, - 233, - 272 - ], - "scattered": [ - 16 - ], - "across": [ - 16, - 35, - 85, - 109, - 167, - 185, - 197, - 287 - ], - "jonson": [ - 16 - ], - "came": [ - 16, - 74 - ], - "growing": [ - 16, - 268 - ], - "maturity": [ - 16 - ], - "beast": [ - 16 - ], - "haunted": [ - 16 - ], - "laying": [ - 16 - ], - "eyes": [ - 16 - ], - "another": [ - 16, - 48, - 61, - 82, - 128, - 143, - 196 - ], - "until": [ - 16, - 56, - 63, - 68, - 82, - 86, - 126, - 144, - 175, - 177, - 178, - 282 - ], - "young": [ - 16 - ], - "adult": [ - 16 - ], - "having": [ - 16, - 76, - 122, - 143, - 180, - 202 - ], - "proved": [ - 16 - ], - "himself": [ - 16, - 62, - 72, - 109, - 116, - 142, - 196, - 202, - 211 - ], - "knightly": [ - 16 - ], - "order": [ - 16, - 135, - 147, - 149, - 151 - ], - "defended": [ - 16, - 45 - ], - "peoples": [ - 16, - 214 - ], - "chaos": [ - 16, - 23, - 45, - 57, - 140, - 206, - 214 - ], - "beasts": [ - 16, - 38 - ], - "quickly": [ - 16, - 57, - 134, - 268 - ], - "rose": [ - 16 - ], - "slay": [ - 16, - 19 - ], - "deliver": [ - 16, - 129 - ], - "people": [ - 16, - 100, - 106 - ], - "evil": [ - 16 - ], - "temperamental": [ - 16 - ], - "deathwing": [ - 17 - ], - "company": [ - 17, - 18, - 72 - ], - "terminator": [ - 17, - 76, - 88 - ], - "consists": [ - 17 - ], - "veterans": [ - 17 - ], - "fight": [ - 17, - 196, - 197, - 218 - ], - "dictated": [ - 17 - ], - "battlefield": [ - 17 - ], - "requirements": [ - 17 - ], - "unusual": [ - 17, - 200 - ], - "maintaining": [ - 17, - 136 - ], - "fielded": [ - 17 - ], - "squads": [ - 17, - 264 - ], - "believed": [ - 17 - ], - "divided": [ - 17, - 75, - 131, - 169, - 201, - 207 - ], - "armourequipped": [ - 17 - ], - "assault": [ - 17, - 18, - 20, - 85, - 86, - 141, - 146, - 170, - 213, - 255 - ], - "split": [ - 17, - 59, - 110 - ], - "100strong": [ - 17 - ], - "assigned": [ - 17 - ], - "formed": [ - 17 - ], - "warriors": [ - 17, - 86, - 202, - 215, - 217, - 232, - 259 - ], - "ravenwing": [ - 18 - ], - "name": [ - 18, - 28, - 42, - 83, - 91, - 96, - 249, - 250, - 252, - 254, - 256, - 257 - ], - "second": [ - 18, - 59, - 82, - 109, - 110 - ], - "instead": [ - 18, - 39, - 48, - 50, - 90, - 151, - 156, - 186, - 268 - ], - "usual": [ - 18 - ], - "green": [ - 18, - 269 - ], - "panoply": [ - 18 - ], - "ravenwings": [ - 18 - ], - "bikes": [ - 18 - ], - "land": [ - 18, - 49, - 56, - 264 - ], - "speeders": [ - 18 - ], - "painted": [ - 18, - 202 - ], - "highly": [ - 18, - 200 - ], - "specialised": [ - 18, - 71 - ], - "formation": [ - 18, - 39, - 49, - 166, - 197 - ], - "exceptionally": [ - 18 - ], - "skilled": [ - 18, - 78, - 168, - 170 - ], - "scouting": [ - 18 - ], - "much": [ - 18, - 46, - 89, - 94, - 179, - 283 - ], - "reconnaissance": [ - 18 - ], - "force": [ - 18, - 47, - 121, - 127, - 162, - 206, - 215 - ], - "function": [ - 18, - 80, - 81, - 94, - 140, - 226, - 231 - ], - "vital": [ - 18, - 145, - 154, - 168, - 171, - 280 - ], - "year": [ - 18, - 189 - ], - "mission": [ - 18, - 73, - 133, - 147, - 148, - 164, - 168, - 171, - 188, - 272, - 273, - 280 - ], - "companys": [ - 18 - ], - "highest": [ - 18, - 126, - 201 - ], - "ranked": [ - 18 - ], - "officers": [ - 18, - 167, - 234 - ], - "leman": [ - 19, - 20 - ], - "russ": [ - 19, - 20 - ], - "ancient": [ - 19, - 23, - 46, - 168, - 202, - 205 - ], - "arch": [ - 19 - ], - "lves": [ - 19 - ], - "famous": [ - 19 - ], - "prim": [ - 19 - ], - "tell": [ - 19 - ], - "deed": [ - 19 - ], - "bloody": [ - 19, - 105, - 164, - 205 - ], - "history": [ - 19, - 71, - 276 - ], - "lege": [ - 19 - ], - "discovered": [ - 19, - 271 - ], - "scat": [ - 19 - ], - "tere": [ - 19 - ], - "cast": [ - 19 - ], - "fenris": [ - 19, - 192 - ], - "helpless": [ - 19, - 82, - 157, - 160 - ], - "feed": [ - 19 - ], - "cubs": [ - 19 - ], - "rather": [ - 19, - 49, - 154, - 186, - 215 - ], - "mighty": [ - 19, - 43 - ], - "shewolf": [ - 19 - ], - "hunt": [ - 19, - 38 - ], - "prey": [ - 19 - ], - "conquered": [ - 19 - ], - "tribes": [ - 19 - ], - "course": [ - 20, - 133, - 223 - ], - "battles": [ - 20, - 215, - 273 - ], - "great": [ - 20, - 48, - 58, - 65, - 86, - 116, - 201, - 233 - ], - "subsequent": [ - 20 - ], - "horus": [ - 20 - ], - "became": [ - 20 - ], - "firm": [ - 20, - 198 - ], - "brothers": [ - 20, - 48, - 135, - 264 - ], - "bitter": [ - 20 - ], - "rivals": [ - 20 - ], - "vying": [ - 20 - ], - "while": [ - 20, - 35, - 43, - 79, - 81, - 90, - 95, - 115, - 117, - 119, - 120, - 127, - 128, - 129, - 135, - 138, - 140, - 148, - 149, - 156, - 166, - 170, - 186, - 187, - 198, - 199, - 200 - ], - "glory": [ - 20, - 73, - 146 - ], - "dulan": [ - 20 - ], - "wolves": [ - 20, - 144 - ], - "enemyheld": [ - 20 - ], - "fortress": [ - 20, - 72, - 202, - 204, - 206 - ], - "claimed": [ - 20 - ], - "right": [ - 20, - 158, - 202, - 250, - 252 - ], - "attack": [ - 20, - 39, - 42, - 49, - 51, - 56, - 63, - 78, - 91, - 122, - 133, - 139, - 144, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 161, - 162, - 170, - 207, - 208, - 232, - 233, - 253, - 255, - 282, - 284, - 287 - ], - "tyrant": [ - 20 - ], - "insulted": [ - 20 - ], - "publicly": [ - 20 - ], - "refused": [ - 20 - ], - "started": [ - 20 - ], - "early": [ - 20 - ], - "furious": [ - 20, - 146, - 151, - 213, - 255 - ], - "after": [ - 20, - 36, - 66, - 91, - 109, - 116, - 131, - 151, - 160, - 164, - 175, - 178, - 183, - 271 - ], - "mode.": [ - 21, - 142 - ], - "advances": [ - 21, - 22 - ], - "simple": [ - 21, - 36, - 64, - 89, - 171 - ], - "intermediate": [ - 21 - ], - "trained": [ - 21, - 226, - 246 - ], - "expert": [ - 21 - ], - "agility": [ - 21, - 25, - 26, - 28, - 29, - 31, - 46, - 49, - 51, - 52, - 56, - 63, - 67, - 82, - 90, - 105, - 107, - 126, - 132, - 160, - 161, - 245, - 249, - 282 - ], - "rank": [ - 21, - 22, - 74, - 120, - 130, - 135, - 138, - 139, - 140, - 227, - 256, - 257 - ], - "cost": [ - 21, - 22, - 62, - 89, - 120, - 121, - 144, - 255 - ], - "type": [ - 21, - 22, - 40, - 43, - 80, - 81, - 151, - 163, - 250, - 251, - 252 - ], - "prerequisites": [ - 21, - 22, - 48, - 49, - 50, - 51, - 52, - 53, - 55, - 56, - 57, - 59, - 60, - 61, - 63, - 66, - 67, - 120, - 121 - ], - "cleanse": [ - 21, - 39 - ], - "purify": [ - 21, - 39 - ], - "exotic": [ - 21, - 40, - 218 - ], - "rapid": [ - 22, - 83, - 215 - ], - "reload": [ - 22, - 213, - 220, - 227, - 229, - 267, - 278, - 279 - ], - "storm": [ - 22, - 83, - 116, - 144, - 220, - 221, - 264 - ], - "iron": [ - 22, - 59, - 94, - 119, - 205 - ], - "hardy": [ - 22 - ], - "sharpshooter": [ - 22 - ], - "deadeye": [ - 22 - ], - "shot": [ - 22, - 39, - 43, - 50, - 77, - 78, - 154, - 215, - 268, - 283 - ], - "sound": [ - 22, - 59, - 149 - ], - "constitution": [ - 22, - 57 - ], - "techuse": [ - 22, - 42, - 52, - 79, - 95, - 96 - ], - "reaction": [ - 22, - 56, - 119, - 144, - 151, - 152, - 215 - ], - "vengeance": [ - 22, - 23, - 40, - 48, - 88 - ], - "hatred": [ - 23, - 42, - 97, - 139, - 210 - ], - "forgotten": [ - 23 - ], - "forgiven": [ - 23 - ], - "mortal": [ - 23, - 109 - ], - "expelled": [ - 23 - ], - "exact": [ - 23, - 65 - ], - "bloo": [ - 23 - ], - "tides": [ - 23 - ], - "carry": [ - 23 - ], - "back": [ - 23, - 109, - 118, - 120, - 143, - 162, - 272 - ], - "ther": [ - 23 - ], - "carried": [ - 23, - 95 - ], - "forth": [ - 23, - 89 - ], - "warship": [ - 23 - ], - "time": [ - 23, - 35, - 38, - 69, - 94, - 114, - 130, - 131, - 144, - 177, - 197, - 211, - 233, - 248, - 273, - 279 - ], - "survived": [ - 23 - ], - "encrusted": [ - 23 - ], - "millennia": [ - 23 - ], - "baroque": [ - 23 - ], - "deco": [ - 23 - ], - "wounds": [ - 23, - 66, - 111, - 139, - 210, - 213, - 215, - 217, - 218, - 219, - 220, - 223, - 224, - 226, - 228, - 229, - 231, - 234, - 275 - ], - "fickle": [ - 23 - ], - "ration": [ - 23 - ], - "scarred": [ - 23 - ], - "descend": [ - 23, - 36, - 131 - ], - "unsuspecting": [ - 23 - ], - "worlds": [ - 23, - 77, - 188, - 259 - ], - "plun": [ - 23 - ], - "anywhere": [ - 23, - 200 - ], - "dering": [ - 23 - ], - "razing": [ - 23 - ], - "anything": [ - 23, - 68, - 159, - 177, - 204, - 263 - ], - "retreating": [ - 23, - 232 - ], - "carouse": [ - 24, - 35, - 247 - ], - "interaction": [ - 24, - 25, - 27 - ], - "climb": [ - 24, - 36, - 131, - 210, - 213, - 219, - 226, - 228, - 229, - 234, - 265, - 269 - ], - "command": [ - 24, - 73, - 145, - 206, - 210, - 215, - 224, - 226, - 228, - 263, - 273 - ], - "concealment": [ - 25, - 231, - 265 - ], - "contortionist": [ - 25, - 36 - ], - "dodge": [ - 26, - 63, - 150, - 151, - 152, - 153, - 210, - 215, - 217, - 228, - 231, - 265, - 275, - 282 - ], - "evaluate": [ - 26, - 224, - 226, - 247 - ], - "investigation": [ - 26, - 27, - 28, - 29, - 30, - 37 - ], - "gamble": [ - 27, - 247 - ], - "inquiry": [ - 27, - 52 - ], - "intimidate": [ - 27, - 210, - 226, - 228 - ], - "logic": [ - 27, - 55, - 224 - ], - "search": [ - 28, - 247 - ], - "silent": [ - 28, - 231, - 265, - 275 - ], - "swim": [ - 28, - 213, - 219, - 226, - 229 - ], - "advanced": [ - 28, - 33, - 37, - 38, - 86, - 125, - 138, - 215, - 223 - ], - "descriptor": [ - 28 - ], - "acrobatics": [ - 28, - 217, - 247, - 265, - 275 - ], - "chemuse": [ - 28 - ], - "crafting": [ - 28, - 29, - 32 - ], - "ciphers†": [ - 29 - ], - "demolition": [ - 29 - ], - "drive": [ - 29, - 86, - 195, - 275 - ], - "operator": [ - 29, - 31 - ], - "interrogation": [ - 29, - 43, - 171 - ], - "literacy": [ - 30, - 210, - 223, - 224, - 234, - 275 - ], - "lore": [ - 30, - 37, - 52, - 58, - 210, - 215, - 218, - 223, - 224, - 226, - 228, - 229, - 234, - 247, - 275 - ], - "common": [ - 30, - 33, - 36, - 37, - 52, - 58, - 76, - 84, - 89, - 188, - 215, - 218, - 223, - 224, - 226, - 228, - 229, - 234, - 275 - ], - "forbidden": [ - 30, - 37, - 210, - 247, - 259, - 275 - ], - "scholastic": [ - 30, - 37, - 58, - 226, - 275 - ], - "performer†": [ - 31 - ], - "pilot": [ - 31, - 33, - 51, - 275, - 279 - ], - "tracking": [ - 32, - 38 - ], - "trade": [ - 32, - 205, - 229, - 231, - 234 - ], - "wrangling": [ - 33, - 38 - ], - "denotes": [ - 33, - 42, - 45 - ], - "require": [ - 33, - 38, - 65, - 152, - 169, - 222 - ], - "specific": [ - 33, - 57, - 90, - 149 - ], - "education": [ - 33 - ], - "groups": [ - 33, - 37, - 53, - 57, - 59, - 61, - 62, - 64, - 75 - ], - "related": [ - 33 - ], - "brevitys": [ - 33 - ], - "attempt": [ - 33, - 48, - 82, - 125, - 151, - 152, - 272 - ], - "regardless": [ - 33, - 97 - ], - "sake": [ - 33 - ], - "listed": [ - 33, - 169, - 187 - ], - "same": [ - 33, - 52, - 61, - 62, - 69, - 88, - 95, - 115, - 126, - 133, - 157 - ], - "entry": [ - 33 - ], - "intrinsic": [ - 33 - ], - "must": [ - 33, - 36, - 53, - 55, - 61, - 64, - 76, - 82, - 90, - 104, - 107, - 109, - 110, - 112, - 114, - 115, - 117, - 133, - 135, - 138, - 140, - 147, - 151, - 152, - 161, - 167, - 170, - 176, - 187, - 195, - 197, - 201, - 211, - 280 - ], - "acquired": [ - 33, - 280 - ], - "separately": [ - 33, - 155 - ], - "thus": [ - 33 - ], - "never": [ - 33, - 73, - 118, - 198 - ], - "able": [ - 33, - 36, - 66, - 109, - 135, - 176, - 182, - 200 - ], - "understand": [ - 33 - ], - "eldar": [ - 33 - ], - "language": [ - 33, - 36, - 61, - 62, - 210, - 213, - 215, - 218, - 223, - 224, - 226, - 229, - 234, - 275 - ], - "without": [ - 33, - 36, - 47, - 79, - 89, - 90, - 130, - 166, - 170, - 201, - 253, - 262, - 270, - 273, - 287 - ], - "personal": [ - 33, - 51, - 186, - 225, - 227 - ], - "using": [ - 33, - 34, - 36, - 46, - 47, - 51, - 56, - 62, - 69, - 76, - 81, - 96, - 119, - 135, - 140, - 143, - 155, - 169, - 177, - 195, - 208, - 274, - 287 - ], - "jump": [ - 33, - 51, - 150, - 269, - 277 - ], - "previous": [ - 33 - ], - "instruction": [ - 33 - ], - "pack": [ - 33, - 51, - 277 - ], - "thunderhawk": [ - 33, - 262 - ], - "gunship": [ - 33 - ], - "fall": [ - 33, - 195 - ], - "awareness": [ - 34, - 59, - 60, - 85, - 96, - 210, - 213, - 215, - 217, - 218, - 219, - 224, - 226, - 228, - 229, - 231, - 232, - 234, - 247, - 248, - 253, - 265, - 275 - ], - "encompasses": [ - 34 - ], - "subconscious": [ - 34, - 51 - ], - "react": [ - 34, - 84 - ], - "conscious": [ - 34, - 233 - ], - "mind": [ - 34, - 43, - 97, - 98, - 114, - 115, - 121, - 122, - 178, - 185, - 189 - ], - "perceive": [ - 34, - 69 - ], - "threatssuch": [ - 34 - ], - "ambushes": [ - 34 - ], - "traps": [ - 34, - 95 - ], - "cleverly": [ - 34 - ], - "hidden": [ - 34, - 37, - 127 - ], - "objectsor": [ - 34 - ], - "slight": [ - 34 - ], - "changes": [ - 34, - 110 - ], - "environmentsuch": [ - 34 - ], - "faint": [ - 34 - ], - "vibration": [ - 34 - ], - "squiggoth": [ - 34 - ], - "smell": [ - 34, - 59, - 97 - ], - "daemonhost": [ - 34 - ], - "against": [ - 34, - 59, - 75, - 76, - 84, - 109, - 110, - 121, - 122, - 128, - 155, - 157, - 196, - 198, - 199, - 200, - 206, - 207, - 208, - 218, - 226, - 283, - 285, - 286 - ], - "opponent": [ - 34, - 36, - 150, - 151, - 157, - 282, - 285 - ], - "always": [ - 34, - 46, - 60, - 69, - 139, - 163, - 165, - 170, - 171, - 172 - ], - "opposed": [ - 34, - 36, - 119, - 120, - 121, - 122, - 128, - 150 - ], - "includes": [ - 34, - 64, - 69 - ], - "noticing": [ - 34 - ], - "spotting": [ - 34 - ], - "involving": [ - 34, - 58 - ], - "anothers": [ - 34 - ], - "actions": [ - 34, - 46, - 49, - 79, - 103, - 117, - 135, - 140, - 149, - 152, - 160, - 175, - 176, - 253 - ], - "environmental": [ - 34 - ], - "factors": [ - 34, - 172 - ], - "standard": [ - 34, - 44, - 45, - 96, - 130, - 144, - 155 - ], - "perceiving": [ - 34 - ], - "trace": [ - 34 - ], - "scents": [ - 34 - ], - "motion": [ - 34 - ], - "similar": [ - 34, - 35, - 269 - ], - "free": [ - 34, - 39, - 42, - 82, - 134, - 143, - 144, - 148, - 169, - 222, - 255 - ], - "resist": [ - 35, - 43, - 126, - 128, - 146, - 248 - ], - "effects": [ - 35, - 63, - 67, - 80, - 90, - 95, - 122, - 139, - 143, - 144, - 161, - 182, - 183, - 187, - 199, - 256, - 257 - ], - "alcohol": [ - 35 - ], - "narcotics": [ - 35 - ], - "frequent": [ - 35 - ], - "imbibers": [ - 35 - ], - "build": [ - 35 - ], - "quite": [ - 35 - ], - "tolerance": [ - 35 - ], - "alcohols": [ - 35 - ], - "drugs": [ - 35 - ], - "remaining": [ - 35, - 48, - 60, - 66 - ], - "clearheaded": [ - 35 - ], - "lucid": [ - 35 - ], - "find": [ - 35, - 171, - 270 - ], - "judgement": [ - 35 - ], - "capabilities": [ - 35 - ], - "diminished": [ - 35 - ], - "makes": [ - 35, - 38, - 51, - 64, - 132, - 176 - ], - "whenever": [ - 35, - 66, - 68, - 144 - ], - "intoxicants": [ - 35 - ], - "naturally": [ - 35 - ], - "requires": [ - 35, - 131, - 132, - 222, - 271 - ], - "imbibing": [ - 35 - ], - "truly": [ - 35 - ], - "prodigious": [ - 35 - ], - "amounts": [ - 35, - 65 - ], - "toxicity": [ - 35 - ], - "otherwise": [ - 35, - 81, - 135, - 157, - 175 - ], - "intoxicant": [ - 35 - ], - "make": [ - 35, - 36, - 46, - 50, - 55, - 62, - 69, - 82, - 89, - 96, - 102, - 105, - 107, - 109, - 110, - 112, - 114, - 115, - 128, - 131, - 132, - 144, - 151, - 158, - 161, - 183, - 198, - 208, - 222, - 232 - ], - "failure": [ - 35, - 129, - 132, - 168, - 186, - 187, - 270, - 272 - ], - "indicates": [ - 35, - 163, - 270 - ], - "fatigue": [ - 35, - 42, - 43, - 81, - 130, - 159, - 160, - 161, - 162, - 248, - 285 - ], - "side": [ - 35, - 196 - ], - "ascend": [ - 36 - ], - "ropes": [ - 36 - ], - "pipes": [ - 36 - ], - "scaffolding": [ - 36 - ], - "natural": [ - 36, - 62, - 68, - 163, - 220, - 231, - 268, - 275 - ], - "manmade": [ - 36 - ], - "walls": [ - 36, - 96, - 206 - ], - "ladders": [ - 36 - ], - "easily": [ - 36, - 140 - ], - "ascended": [ - 36 - ], - "climbs": [ - 36 - ], - "ready": [ - 36, - 200, - 262 - ], - "handholds": [ - 36 - ], - "poor": [ - 36, - 89, - 234 - ], - "climbing": [ - 36, - 119, - 131, - 132, - 265 - ], - "conditions": [ - 36, - 60 - ], - "condition": [ - 36, - 132 - ], - "surface": [ - 36, - 98, - 126, - 204, - 228, - 275 - ], - "item": [ - 36, - 44, - 45, - 63 - ], - "hear": [ - 36, - 55, - 85, - 109 - ], - "characterthough": [ - 36 - ], - "could": [ - 36, - 187, - 189, - 190 - ], - "escape": [ - 36, - 50, - 131, - 150, - 282 - ], - "grapple": [ - 36, - 150, - 151, - 282 - ], - "done": [ - 36, - 264 - ], - "remotely": [ - 36 - ], - "pictcasterand": [ - 36 - ], - "speak": [ - 36, - 61, - 210, - 213, - 215, - 218, - 223, - 224, - 226, - 229, - 234, - 275 - ], - "grappled": [ - 36, - 150, - 282 - ], - "combat": [ - 36, - 39, - 47, - 49, - 50, - 63, - 67, - 87, - 133, - 134, - 139, - 140, - 141, - 149, - 151, - 152, - 153, - 155, - 156, - 157, - 159, - 160, - 162, - 166, - 170, - 181, - 187, - 210, - 215, - 229, - 272, - 276 - ], - "action": [ - 36, - 39, - 40, - 42, - 47, - 48, - 51, - 52, - 53, - 56, - 59, - 64, - 78, - 114, - 119, - 120, - 121, - 122, - 134, - 143, - 144, - 150, - 155, - 177, - 208, - 226, - 255, - 282, - 283 - ], - "commands": [ - 36, - 233 - ], - "adeptus": [ - 37, - 40, - 45, - 48, - 51, - 57, - 67, - 72, - 77, - 84, - 88, - 89, - 165, - 166, - 197, - 198, - 205, - 233, - 275 - ], - "arbites": [ - 37, - 57 - ], - "astartes": [ - 37, - 40, - 45, - 48, - 51, - 57, - 67, - 72, - 77, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 95, - 96, - 146, - 165, - 166, - 197, - 198, - 200, - 210, - 253, - 275, - 276, - 277, - 282, - 283 - ], - "mechanicus": [ - 37, - 40, - 42, - 43, - 46, - 52, - 53, - 55, - 57, - 60, - 61, - 66, - 205, - 233 - ], - "administratum": [ - 37, - 57 - ], - "ecclesiarchy": [ - 37, - 57 - ], - "imperial": [ - 37, - 57, - 84, - 138, - 166, - 171, - 196, - 197, - 204, - 205, - 226, - 227, - 234, - 267, - 270 - ], - "creed": [ - 37 - ], - "guard": [ - 37, - 57, - 197, - 200, - 226, - 227, - 270 - ], - "navy": [ - 37, - 57 - ], - "tech": [ - 37, - 42, - 110 - ], - "allows": [ - 37, - 47, - 89, - 95, - 198 - ], - "recall": [ - 37, - 65, - 126 - ], - "general": [ - 37, - 262, - 273 - ], - "information": [ - 37, - 55, - 65, - 85, - 148, - 168 - ], - "procedures": [ - 37 - ], - "divisions": [ - 37 - ], - "traditions": [ - 37 - ], - "famed": [ - 37, - 75, - 205, - 287 - ], - "superstitions": [ - 37 - ], - "organisation": [ - 37, - 57, - 117, - 200, - 226 - ], - "archeotech": [ - 37, - 264 - ], - "library": [ - 37 - ], - "daemonology": [ - 37 - ], - "differs": [ - 37 - ], - "represents": [ - 37, - 145, - 166, - 197 - ], - "inquisition": [ - 37, - 57, - 117, - 166, - 201 - ], - "mutants": [ - 37, - 57 - ], - "psykers": [ - 37, - 57, - 110, - 113, - 114, - 116, - 122, - 139, - 210 - ], - "traitor": [ - 37, - 128 - ], - "legions": [ - 37 - ], - "scholarly": [ - 37 - ], - "learning": [ - 37, - 197 - ], - "involves": [ - 37 - ], - "xenos": [ - 37, - 57, - 59, - 61, - 71, - 91, - 131, - 140, - 168, - 203, - 247, - 275 - ], - "proscribed": [ - 37, - 205 - ], - "deals": [ - 37, - 51, - 76, - 155 - ], - "follow": [ - 38, - 59, - 218 - ], - "signs": [ - 38, - 96, - 204, - 205 - ], - "left": [ - 38, - 72, - 91, - 160, - 250, - 252 - ], - "quarry": [ - 38, - 280 - ], - "allowing": [ - 38, - 88, - 166 - ], - "down": [ - 38, - 60, - 85, - 107, - 125, - 145, - 172, - 200, - 232, - 262, - 285 - ], - "tame": [ - 38 - ], - "train": [ - 38 - ], - "potentially": [ - 38 - ], - "ride": [ - 38 - ], - "animals": [ - 38, - 99 - ], - "obvious": [ - 38 - ], - "tracks": [ - 38 - ], - "encounters": [ - 38, - 167, - 187, - 206 - ], - "travels": [ - 38 - ], - "spinehounds": [ - 38 - ], - "warhorse": [ - 38 - ], - "considered": [ - 38, - 46, - 82, - 151, - 163, - 167, - 179, - 234 - ], - "instances": [ - 38, - 130 - ], - "where": [ - 38, - 49, - 56, - 59, - 63, - 66, - 125, - 166, - 172, - 179, - 183, - 187 - ], - "breeds": [ - 38 - ], - "taming": [ - 38 - ], - "extended": [ - 38, - 271 - ], - "tests": [ - 38, - 43, - 52, - 56, - 58, - 60, - 61, - 62, - 63, - 67, - 79, - 85, - 96, - 123, - 129, - 146, - 147, - 154, - 157, - 158, - 162, - 173, - 175, - 176, - 177, - 178, - 179, - 187, - 232, - 248, - 253 - ], - "elements": [ - 38, - 196 - ], - "eroded": [ - 38 - ], - "duration": [ - 38 - ], - "determined": [ - 38, - 129 - ], - "temper": [ - 38 - ], - "environment": [ - 38, - 130 - ], - "seeing": [ - 38 - ], - "out": [ - 39 - ], - "regain": [ - 39, - 176 - ], - "cohesion.": [ - 39, - 63 - ], - "catfall": [ - 39 - ], - "reduce": [ - 39, - 67, - 77 - ], - "falling": [ - 39, - 109, - 112, - 113 - ], - "damage": [ - 39, - 42, - 43, - 49, - 57, - 66, - 67, - 68, - 76, - 77, - 82, - 87, - 90, - 95, - 109, - 110, - 113, - 114, - 116, - 117, - 118, - 133, - 134, - 136, - 139, - 144, - 149, - 151, - 153, - 155, - 156, - 157, - 158, - 160, - 161, - 163, - 164, - 207, - 211, - 268, - 272, - 285, - 286, - 287 - ], - "chem": [ - 39 - ], - "geld": [ - 39 - ], - "immune": [ - 39, - 40, - 41, - 185, - 253 - ], - "seduction": [ - 39 - ], - "resistant": [ - 39, - 186 - ], - "basic": [ - 39, - 41, - 58, - 62, - 78, - 89, - 125, - 197, - 221, - 224, - 229, - 247, - 253, - 275 - ], - "flame": [ - 39, - 122, - 271, - 282 - ], - "increases": [ - 39, - 69 - ], - "flamer": [ - 39, - 53, - 90 - ], - "initiative": [ - 39, - 42, - 49, - 51, - 63, - 126, - 149 - ], - "opponents": [ - 39, - 50, - 56, - 67, - 211 - ], - "outnumbering": [ - 39, - 50, - 63 - ], - "master": [ - 39, - 44, - 76, - 149, - 165, - 166, - 167, - 168, - 172, - 180, - 197, - 206, - 210, - 222, - 223 - ], - "concealed": [ - 39 - ], - "cavity": [ - 39 - ], - "compartment": [ - 39 - ], - "person": [ - 39, - 165, - 168, - 285 - ], - "counter": [ - 39 - ], - "successful": [ - 39, - 42, - 52, - 53, - 54, - 65, - 82, - 95, - 139, - 144, - 152, - 155, - 179, - 183, - 248 - ], - "parry": [ - 39, - 119, - 145, - 150, - 152, - 153, - 282 - ], - "crack": [ - 39, - 111 - ], - "deal": [ - 39, - 43, - 262 - ], - "critical": [ - 39, - 49, - 66, - 80, - 95, - 149, - 158, - 160, - 161, - 163 - ], - "crippling": [ - 39, - 121, - 210 - ], - "strike": [ - 39, - 63, - 66, - 88, - 122, - 144, - 145, - 162, - 210, - 253, - 269, - 271 - ], - "chance": [ - 40, - 118, - 152, - 154 - ], - "fury.": [ - 40 - ], - "exemplar": [ - 40 - ], - "exchange": [ - 40 - ], - "fate": [ - 40, - 48, - 117, - 123, - 130, - 148, - 163, - 203 - ], - "point": [ - 40, - 48, - 52, - 53, - 59, - 66, - 74, - 97, - 104, - 122, - 130, - 136, - 156, - 163, - 211, - 232, - 286 - ], - "proficiency": [ - 40, - 43 - ], - "twice": [ - 40, - 42, - 83, - 150, - 157, - 163, - 164, - 287 - ], - "psychic": [ - 40, - 43, - 62, - 97, - 111, - 114, - 116, - 120, - 121, - 122, - 128, - 146, - 150, - 163, - 182, - 183, - 189, - 207, - 253 - ], - "phenomena": [ - 40, - 146 - ], - "favoured": [ - 40, - 84, - 165 - ], - "result": [ - 40, - 66, - 121, - 126, - 140, - 148, - 153, - 163, - 186, - 187, - 189, - 269, - 272, - 286 - ], - "fearless": [ - 40, - 217, - 231 - ], - "fear": [ - 40, - 67, - 103, - 109, - 110, - 120, - 128, - 165, - 166, - 172, - 173, - 175, - 176, - 178, - 179, - 181, - 182, - 183, - 184, - 186, - 187, - 213, - 220 - ], - "pinning": [ - 40, - 41, - 43 - ], - "feedback": [ - 40, - 55 - ], - "screech": [ - 40, - 55 - ], - "radius": [ - 40, - 55, - 122, - 285 - ], - "lose": [ - 40, - 132, - 137, - 142 - ], - "ferric": [ - 40, - 53 - ], - "lure": [ - 40, - 53 - ], - "1kgwp": [ - 40 - ], - "metal": [ - 40, - 53, - 89, - 286 - ], - "objects": [ - 40, - 53, - 100, - 117 - ], - "summons": [ - 40, - 53, - 122 - ], - "2kgwp": [ - 40 - ], - "pistols": [ - 41, - 52 - ], - "weapons.": [ - 41 - ], - "last": [ - 41, - 63, - 68, - 75, - 151, - 202, - 232 - ], - "standing": [ - 41, - 47, - 154, - 233 - ], - "nerves": [ - 41, - 43, - 253 - ], - "steel": [ - 41, - 43, - 67, - 253 - ], - "improves": [ - 42 - ], - "cover.": [ - 42 - ], - "leap": [ - 42, - 150 - ], - "light": [ - 42, - 56, - 100, - 108, - 205, - 286 - ], - "sleeper": [ - 42 - ], - "count": [ - 42, - 122, - 138, - 153 - ], - "awake": [ - 42, - 60, - 248 - ], - "even": [ - 42, - 60, - 64, - 71, - 78, - 141, - 168, - 171, - 178, - 180, - 185, - 272 - ], - "asleep": [ - 42, - 60 - ], - "lightning": [ - 42, - 88, - 144, - 275, - 276 - ], - "three": [ - 42, - 69, - 145, - 156, - 157, - 160, - 232, - 265, - 271 - ], - "reflexes": [ - 42, - 275 - ], - "litany": [ - 42, - 60 - ], - "hate": [ - 42 - ], - "extend": [ - 42 - ], - "allies": [ - 42, - 157, - 269 - ], - "logis": [ - 42 - ], - "luminen": [ - 42 - ], - "blast": [ - 42, - 55, - 116, - 160, - 221, - 270, - 271, - 279, - 285, - 286, - 287 - ], - "1d10wp": [ - 42 - ], - "energy": [ - 42, - 60, - 82, - 88, - 111, - 116, - 119, - 120, - 160, - 189 - ], - "bolt": [ - 42, - 83, - 84, - 85, - 90, - 276, - 277 - ], - "causes": [ - 42, - 49, - 68, - 161, - 207, - 286 - ], - "powercharge": [ - 42 - ], - "continued": [ - 42 - ], - "test.": [ - 43, - 53, - 54, - 130 - ], - "mechadendrite": [ - 43, - 61 - ], - "enter": [ - 43, - 130, - 134, - 248 - ], - "trance": [ - 43 - ], - "remove": [ - 43, - 91, - 130 - ], - "meditation": [ - 43, - 215 - ], - "melee": [ - 43, - 49, - 51, - 63, - 75, - 76, - 80, - 81, - 87, - 92, - 93, - 119, - 122, - 144, - 150, - 152, - 153, - 154, - 155, - 157, - 208, - 213, - 224, - 229, - 268, - 271, - 275, - 282, - 283, - 285 - ], - "powers": [ - 43, - 97, - 111, - 113, - 116, - 120, - 121, - 163, - 207, - 253 - ], - "mental": [ - 43, - 65 - ], - "rage": [ - 43 - ], - "frenzy": [ - 43, - 177 - ], - "throes": [ - 43 - ], - "mimic": [ - 43, - 61 - ], - "copy": [ - 43, - 61 - ], - "voices": [ - 43, - 182 - ], - "reroll": [ - 43, - 67, - 126, - 130, - 146, - 147, - 248 - ], - "failed": [ - 43, - 67, - 129, - 131, - 187, - 248, - 286 - ], - "avoid": [ - 43, - 67, - 105, - 151, - 169 - ], - "orthoproxy": [ - 43 - ], - "paranoia": [ - 43 - ], - "alert": [ - 43, - 60 - ], - "danger": [ - 43, - 49, - 67, - 68, - 167, - 176 - ], - "one": [ - 44, - 45 - ], - "requisition": [ - 44, - 45, - 70, - 72, - 76, - 89, - 169, - 170, - 264, - 280 - ], - "becomes": [ - 44, - 45, - 67, - 80, - 97, - 102, - 117 - ], - "signature": [ - 44, - 45, - 73 - ], - "wargear": [ - 44, - 45, - 71 - ], - "issue": [ - 44, - 45 - ], - "benefit": [ - 44, - 135, - 142, - 143, - 146 - ], - "hero": [ - 45, - 92, - 93, - 94 - ], - "descriptions": [ - 45 - ], - "details": [ - 45, - 152, - 154, - 287 - ], - "exclusive": [ - 45 - ], - "battlebrothers": [ - 45, - 48, - 67, - 73, - 94, - 125, - 130, - 135, - 136, - 138, - 139, - 140, - 141, - 154, - 166, - 170, - 171, - 181, - 186, - 187, - 208, - 223, - 262, - 266, - 268, - 273, - 280, - 287 - ], - "realm": [ - 45, - 188, - 214 - ], - "sword": [ - 45, - 87, - 92 - ], - "strokes": [ - 45 - ], - "roar": [ - 45 - ], - "found": [ - 45, - 95, - 169, - 234 - ], - "outside": [ - 45, - 181 - ], - "guns": [ - 45, - 52, - 86 - ], - "million": [ - 45, - 188 - ], - "thunder": [ - 45, - 87 - ], - "angry": [ - 45 - ], - "vile": [ - 45, - 198, - 259 - ], - "detailed": [ - 45, - 65, - 121 - ], - "gods": [ - 45 - ], - "pass": [ - 45, - 63 - ], - "prove": [ - 45 - ], - "enough": [ - 45, - 129, - 130, - 214 - ], - "here": [ - 45, - 75, - 148, - 269 - ], - "prerequisites:": [ - 46, - 47, - 49, - 50, - 51, - 52, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 64, - 65, - 66 - ], - "ambidexterity": [ - 46 - ], - "sufficient": [ - 46, - 198 - ], - "hands": [ - 46, - 72, - 78, - 84 - ], - "distinction": [ - 46 - ], - "autosanguine": [ - 46 - ], - "moot": [ - 46 - ], - "hand": [ - 46, - 50, - 53, - 86, - 89, - 154, - 155, - 178, - 185, - 200, - 215 - ], - "equally": [ - 46, - 169 - ], - "technology": [ - 46, - 58, - 71, - 79, - 80, - 81, - 88, - 91, - 195, - 214, - 287 - ], - "flows": [ - 46 - ], - "task": [ - 46, - 72, - 200 - ], - "penalty": [ - 46, - 47, - 50, - 56, - 62, - 79, - 80, - 85, - 131, - 155, - 161, - 173, - 175, - 176, - 177, - 178, - 211, - 253 - ], - "miniscule": [ - 46 - ], - "machines": [ - 46, - 91 - ], - "repair": [ - 46, - 95 - ], - "minor": [ - 46, - 79, - 182, - 272 - ], - "injuries": [ - 46 - ], - "speed": [ - 46, - 51, - 56, - 83, - 163, - 210 - ], - "healing": [ - 46, - 57, - 163 - ], - "applying": [ - 46, - 139 - ], - "combined": [ - 46, - 140 - ], - "twoweapon": [ - 46, - 155, - 231 - ], - "wielder": [ - 46, - 52, - 155, - 231 - ], - "lightly": [ - 46, - 57, - 163, - 164 - ], - "damaged": [ - 46, - 57, - 163, - 164, - 280, - 287 - ], - "heals": [ - 46 - ], - "making": [ - 46, - 50, - 145, - 151, - 197 - ], - "increased": [ - 46, - 90, - 207, - 217 - ], - "rate": [ - 46, - 83, - 85, - 131, - 132 - ], - "berserk": [ - 47, - 213 - ], - "whereas": [ - 47 - ], - "weaker": [ - 47 - ], - "sent": [ - 47 - ], - "flying": [ - 47, - 108 - ], - "learned": [ - 47, - 56, - 61, - 62 - ], - "whole": [ - 47, - 185 - ], - "heavy": [ - 47, - 76, - 89, - 170, - 221, - 279, - 283, - 286, - 287 - ], - "physique": [ - 47 - ], - "momentum": [ - 47 - ], - "blows": [ - 47, - 49, - 56 - ], - "remain": [ - 47, - 48, - 81, - 204 - ], - "fire": [ - 47, - 51, - 52, - 56, - 59, - 83, - 86, - 90, - 122, - 141, - 143, - 146, - 147, - 215, - 217, - 218, - 253, - 255, - 283, - 285 - ], - "charges": [ - 47, - 255 - ], - "semiauto": [ - 47 - ], - "burst": [ - 47, - 82, - 90, - 150, - 156, - 216, - 282 - ], - "auto": [ - 47, - 150, - 156 - ], - "bracing": [ - 47, - 89 - ], - "uses": [ - 47, - 78, - 86, - 116, - 141 - ], - "failing": [ - 47, - 187 - ], - "brace": [ - 47 - ], - "+10.": [ - 48 - ], - "binary": [ - 48 - ], - "chatter": [ - 48 - ], - "optimised": [ - 48 - ], - "technalingua": [ - 48 - ], - "falls": [ - 48, - 114, - 136, - 138, - 179 - ], - "controlling": [ - 48 - ], - "servitors": [ - 48 - ], - "receives": [ - 48 - ], - "inspire": [ - 48, - 128 - ], - "deeds": [ - 48, - 75, - 94, - 198, - 287 - ], - "revenge": [ - 48 - ], - "instruct": [ - 48 - ], - "program": [ - 48 - ], - "communicate": [ - 48 - ], - "fallen": [ - 48 - ], - "comrade": [ - 48 - ], - "member": [ - 48, - 137, - 141, - 211 - ], - "killed": [ - 48, - 163, - 273 - ], - "taken": [ - 48, - 134, - 156, - 163, - 165, - 269, - 271, - 286, - 287 - ], - "battlebrother": [ - 48, - 51, - 63, - 67, - 72, - 125, - 133, - 135, - 136, - 139, - 140, - 141, - 143, - 144, - 164, - 186 - ], - "spend": [ - 48, - 53, - 56, - 114, - 140 - ], - "blademaster": [ - 48 - ], - "precisely": [ - 49 - ], - "harm": [ - 49 - ], - "cutting": [ - 49, - 77 - ], - "seams": [ - 49 - ], - "hammering": [ - 49 - ], - "weak": [ - 49, - 66 - ], - "directed": [ - 49 - ], - "comrades": [ - 49 - ], - "prepare": [ - 49 - ], - "planning": [ - 49 - ], - "contingencies": [ - 49 - ], - "attacked": [ - 49, - 208 - ], - "rolling": [ - 49, - 51, - 157 - ], - "individual": [ - 49, - 122 - ], - "focus": [ - 49, - 150, - 170 - ], - "close": [ - 49, - 50, - 63, - 67, - 85, - 86, - 208, - 232 - ], - "seems": [ - 50 - ], - "everywhere": [ - 50 - ], - "keeping": [ - 50, - 141, - 167, - 233, - 273 - ], - "seem": [ - 50 - ], - "possible": [ - 50, - 55, - 68, - 141, - 143, - 222, - 270 - ], - "fighting": [ - 50, - 63, - 71, - 140, - 154, - 198, - 218, - 267 - ], - "handtohand": [ - 50 - ], - "rocksteady": [ - 50 - ], - "hawklike": [ - 50 - ], - "eyesight": [ - 50 - ], - "dreaded": [ - 50 - ], - "marksman": [ - 50 - ], - "target": [ - 50, - 52, - 56, - 61, - 77, - 78, - 82, - 83, - 90, - 121, - 145, - 152, - 156, - 157, - 161, - 162, - 171, - 208, - 255, - 283, - 286 - ], - "precise": [ - 50 - ], - "crosshairs": [ - 50 - ], - "called": [ - 50, - 197, - 253 - ], - "consciously": [ - 51 - ], - "recognise": [ - 51 - ], - "above": [ - 51, - 139, - 179, - 196 - ], - "proddings": [ - 51 - ], - "reacts": [ - 51, - 82 - ], - "preternaturally": [ - 51 - ], - "sharp": [ - 51, - 220, - 284 - ], - "giving": [ - 51, - 147 - ], - "edge": [ - 51 - ], - "mere": [ - 51, - 72, - 86 - ], - "descending": [ - 51 - ], - "trails": [ - 51 - ], - "cannot": [ - 51, - 61, - 102, - 113, - 125, - 135, - 152, - 174, - 198, - 264, - 279 - ], - "match": [ - 51 - ], - "come": [ - 51, - 133, - 178, - 205 - ], - "ruin": [ - 51 - ], - "ending": [ - 51 - ], - "place": [ - 51, - 166, - 168, - 172 - ], - "40,": [ - 52, - 62, - 278 - ], - "two-weapon": [ - 52 - ], - "electro": [ - 52 - ], - "graft": [ - 52 - ], - "shots": [ - 52, - 83, - 85, - 253 - ], - "exactly": [ - 52 - ], - "armed": [ - 52, - 64, - 155, - 207, - 222 - ], - "access": [ - 52, - 75, - 121, - 135 - ], - "data": [ - 52 - ], - "ports": [ - 52 - ], - "simultaneously": [ - 52 - ], - "commune": [ - 52 - ], - "machine": [ - 52, - 63, - 64, - 66, - 110, - 119, - 166, - 217, - 230, - 231, - 274, - 279, - 286 - ], - "spirits": [ - 52, - 110, - 287 - ], - "single": [ - 52, - 59, - 78, - 89, - 121, - 134, - 141, - 153, - 177, - 208 - ], - "made": [ - 52, - 56, - 59, - 85, - 91, - 152, - 154, - 155, - 157, - 272 - ], - "whilst": [ - 52, - 155 - ], - "connected": [ - 52 - ], - "hits": [ - 52, - 56, - 77, - 78, - 83, - 156, - 207, - 286 - ], - "port": [ - 52 - ], - "firing": [ - 52, - 59, - 78, - 79, - 83, - 152, - 177, - 255, - 287 - ], - "unsecured": [ - 53 - ], - "object": [ - 53, - 90, - 175 - ], - "summon": [ - 53 - ], - "kilograms": [ - 53 - ], - "distant": [ - 53 - ], - "succeed": [ - 53, - 90, - 126, - 157 - ], - "enact": [ - 53, - 64, - 201 - ], - "rite": [ - 53, - 64 - ], - "universal": [ - 53, - 64, - 91 - ], - "sight": [ - 53, - 59, - 68, - 69, - 88, - 89, - 100, - 138, - 220, - 231, - 253 - ], - "flaming": [ - 53 - ], - "streams": [ - 53 - ], - "promethium": [ - 53 - ], - "brings": [ - 53, - 60, - 189, - 190 - ], - "explorers": [ - 53 - ], - "dread": [ - 53 - ], - "foes": [ - 53, - 78, - 86, - 122, - 144, - 148, - 171, - 198, - 206 - ], - "mastered": [ - 53 - ], - "wide": [ - 53 - ], - "variety": [ - 53, - 222 - ], - "analysis": [ - 55 - ], - "tarot": [ - 55 - ], - "bones": [ - 55, - 60 - ], - "claim": [ - 55 - ], - "superstitious": [ - 55 - ], - "masses": [ - 55 - ], - "careful": [ - 55, - 148 - ], - "consideration": [ - 55 - ], - "consequences": [ - 55 - ], - "scramble": [ - 55, - 131 - ], - "synthesizers": [ - 55 - ], - "causing": [ - 55, - 63, - 107 - ], - "examination": [ - 55 - ], - "evidence": [ - 55 - ], - "hideous": [ - 55, - 184 - ], - "noise": [ - 55, - 161 - ], - "shocks": [ - 55 - ], - "distracts": [ - 55, - 255 - ], - "identify": [ - 55, - 126 - ], - "best": [ - 55, - 170, - 179, - 286 - ], - "path": [ - 55, - 63, - 68, - 147, - 218 - ], - "success": [ - 55, - 83, - 114, - 125, - 126, - 129, - 130, - 132, - 147, - 150, - 153, - 168, - 272, - 284 - ], - "spending": [ - 55 - ], - "minutes": [ - 55, - 68, - 232 - ], - "unprotected": [ - 55, - 108, - 186 - ], - "30meter": [ - 55 - ], - "studying": [ - 55 - ], - "analysing": [ - 55 - ], - "problem": [ - 55 - ], - "feet": [ - 56, - 148 - ], - "dodges": [ - 56 - ], - "weaves": [ - 56 - ], - "moves": [ - 56 - ], - "long": [ - 56, - 64, - 73, - 132, - 136, - 143, - 162, - 164, - 196, - 214, - 248 - ], - "line": [ - 56, - 68, - 100, - 158, - 160 - ], - "performs": [ - 56, - 72, - 122 - ], - "martial": [ - 56, - 218 - ], - "prowess": [ - 56, - 75 - ], - "allow": [ - 56, - 61, - 164, - 268 - ], - "lesser": [ - 56, - 66, - 170, - 186, - 234 - ], - "combatants": [ - 56 - ], - "continues": [ - 56, - 184 - ], - "successfully": [ - 56, - 176 - ], - "start": [ - 56, - 136, - 138, - 142, - 143, - 144 - ], - "turn": [ - 56, - 82, - 136, - 138, - 140, - 142, - 144, - 149, - 151, - 177, - 183, - 184, - 186, - 206, - 208 - ], - "good": [ - 57, - 77, - 128, - 154, - 164, - 165, - 279 - ], - "reputation": [ - 57, - 75, - 287 - ], - "rebounds": [ - 57 - ], - "shock": [ - 57, - 64, - 134, - 174, - 182, - 183, - 187 - ], - "peer": [ - 57 - ], - "injury": [ - 57, - 149 - ], - "undergoing": [ - 57 - ], - "medical": [ - 57 - ], - "treatment": [ - 57 - ], - "astra": [ - 57 - ], - "telepathica": [ - 57 - ], - "injures": [ - 57 - ], - "recovers": [ - 57 - ], - "adepta": [ - 57 - ], - "sororitas": [ - 57 - ], - "titanicus": [ - 57 - ], - "astropaths": [ - 57, - 189 - ], - "chartist": [ - 57 - ], - "captains": [ - 57 - ], - "navigators": [ - 57 - ], - "officio": [ - 57 - ], - "assassinorum": [ - 57 - ], - "planetary": [ - 57, - 197 - ], - "governors": [ - 57 - ], - "schola": [ - 57 - ], - "progenium": [ - 57 - ], - "scholastica": [ - 57 - ], - "psykana": [ - 57 - ], - "respected": [ - 57, - 73, - 75, - 76, - 84, - 87 - ], - "social": [ - 57 - ], - "infused": [ - 58 - ], - "wealth": [ - 58 - ], - "punishing": [ - 58, - 282 - ], - "noetic": [ - 58 - ], - "techniques": [ - 58, - 61, - 62, - 95 - ], - "arcane": [ - 58, - 188 - ], - "methods": [ - 58 - ], - "kept": [ - 58, - 273 - ], - "guardians": [ - 58 - ], - "treats": [ - 58, - 62 - ], - "also": [ - 58, - 78, - 95, - 104, - 133, - 134, - 137, - 139, - 140, - 141, - 143, - 148, - 166, - 169, - 187, - 191, - 205, - 269 - ], - "already": [ - 58, - 143, - 271 - ], - "possesses": [ - 58, - 62, - 86 - ], - "peripheral": [ - 59 - ], - "vision": [ - 59, - 92 - ], - "situational": [ - 59 - ], - "directions": [ - 59 - ], - "targets": [ - 59, - 61, - 77, - 121, - 154, - 157, - 161, - 162, - 170, - 171, - 255, - 282 - ], - "need": [ - 59, - 171 - ], - "fewer": [ - 59 - ], - "apart": [ - 59 - ], - "jaws": [ - 59 - ], - "hell": [ - 59, - 205, - 210, - 270 - ], - "discipline": [ - 59, - 62, - 218 - ], - "inspires": [ - 59 - ], - "followers": [ - 59 - ], - "heightened": [ - 59, - 210, - 253 - ], - "vortices": [ - 59 - ], - "taste": [ - 59, - 248 - ], - "touch": [ - 59, - 64, - 84, - 187 - ], - "boarding": [ - 59 - ], - "corsairs": [ - 59 - ], - "genetics": [ - 59 - ], - "augmetics": [ - 59 - ], - "slightest": [ - 60 - ], - "change": [ - 60 - ], - "disturbance": [ - 60 - ], - "sleep": [ - 60 - ], - "slumber": [ - 60 - ], - "assumed": [ - 60 - ], - "omnissiah": [ - 60 - ], - "augmetic": [ - 60, - 233 - ], - "conduits": [ - 60 - ], - "purposes": [ - 60, - 171 - ], - "parallel": [ - 60 - ], - "arms": [ - 60, - 75, - 77, - 140, - 149, - 213, - 216, - 218, - 220, - 276 - ], - "reciting": [ - 60 - ], - "proper": [ - 60, - 61, - 64 - ], - "surprise": [ - 60 - ], - "unfortunately": [ - 60, - 66, - 280 - ], - "deep": [ - 60, - 72, - 91, - 121, - 138, - 287 - ], - "channel": [ - 60 - ], - "stored": [ - 60 - ], - "potentia": [ - 60 - ], - "frequently": [ - 60, - 148 - ], - "interrupted": [ - 60 - ], - "resulting": [ - 60 - ], - "lessthancheery": [ - 60 - ], - "coil": [ - 60 - ], - "channels": [ - 60, - 91 - ], - "required": [ - 61, - 89, - 139, - 140, - 167, - 256, - 257 - ], - "influence": [ - 61 - ], - "large": [ - 61, - 76, - 153, - 191, - 285 - ], - "audiences": [ - 61 - ], - "fellowshipbased": [ - 61 - ], - "synthesisers": [ - 61 - ], - "innate": [ - 61, - 62 - ], - "accurately": [ - 61 - ], - "voice": [ - 61 - ], - "study": [ - 61 - ], - "patterns": [ - 61, - 255 - ], - "intended": [ - 61, - 206, - 223 - ], - "least": [ - 61, - 122, - 132, - 136, - 137, - 145, - 171, - 279 - ], - "hour": [ - 61, - 114, - 131, - 232 - ], - "imitation": [ - 61 - ], - "difference": [ - 61, - 168 - ], - "physiology": [ - 61, - 68 - ], - "servoarm": [ - 61 - ], - "utility": [ - 61 - ], - "subtle": [ - 61 - ], - "complexities": [ - 61 - ], - "fel": [ - 62 - ], - "derive": [ - 62 - ], - "meaning": [ - 62 - ], - "unknown": [ - 62, - 182 - ], - "languages": [ - 62 - ], - "understood": [ - 62 - ], - "intuitive": [ - 62 - ], - "grasp": [ - 62, - 84 - ], - "development": [ - 62 - ], - "technique": [ - 62 - ], - "selected": [ - 62, - 259 - ], - "simplistic": [ - 62 - ], - "translation": [ - 62 - ], - "equal": [ - 62, - 67, - 68, - 78, - 119, - 120, - 140, - 163, - 164, - 207, - 285, - 287 - ], - "brother.": [ - 63 - ], - "guardian": [ - 63 - ], - "spirit": [ - 63, - 64, - 279 - ], - "aids": [ - 63 - ], - "chooses": [ - 63, - 137, - 142 - ], - "thwarting": [ - 63 - ], - "stalwart": [ - 63 - ], - "defence": [ - 63, - 65, - 170 - ], - "rendered": [ - 63, - 115 - ], - "incapable": [ - 63 - ], - "faith": [ - 63, - 67, - 134, - 198, - 226 - ], - "gear": [ - 63, - 73, - 132, - 169, - 211, - 216, - 217, - 218, - 223, - 224, - 225, - 227, - 229, - 230, - 233, - 269, - 277 - ], - "bolsters": [ - 63 - ], - "morale": [ - 63, - 133 - ], - "step": [ - 63, - 145 - ], - "aside": [ - 63 - ], - "sure": [ - 63, - 196 - ], - "sway": [ - 63, - 191 - ], - "degree": [ - 63, - 83, - 130, - 150, - 187 - ], - "thin": [ - 63, - 98 - ], - "ease": [ - 64, - 222 - ], - "practice": [ - 64, - 88, - 202, - 218 - ], - "ritual": [ - 64, - 189 - ], - "appease": [ - 64 - ], - "clear": [ - 64, - 126, - 147 - ], - "stoppages": [ - 64 - ], - "knock": [ - 64, - 150 - ], - "unjam": [ - 64 - ], - "perform": [ - 64, - 149, - 151, - 259 - ], - "mastery": [ - 64, - 125 - ], - "balance": [ - 64, - 126 - ], - "spin": [ - 64 - ], - "weight": [ - 64, - 166 - ], - "thrown": [ - 64, - 112 - ], - "formidable": [ - 64 - ], - "distance": [ - 64, - 85, - 86, - 135, - 208, - 268 - ], - "knife": [ - 64, - 87, - 229, - 276 - ], - "primitive": [ - 64, - 79, - 80, - 81, - 89, - 213, - 223, - 224, - 229, - 266, - 269, - 275 - ], - "chain": [ - 64, - 277 - ], - "conditioning": [ - 65 - ], - "augmentation": [ - 65 - ], - "enables": [ - 65 - ], - "record": [ - 65, - 73 - ], - "effectively": [ - 65, - 101 - ], - "granting": [ - 65 - ], - "perfect": [ - 65 - ], - "memory": [ - 65, - 100, - 185 - ], - "automatically": [ - 65, - 68, - 82, - 116, - 157, - 287 - ], - "remember": [ - 65 - ], - "trivial": [ - 65, - 100, - 272 - ], - "facts": [ - 65 - ], - "pieces": [ - 65, - 122 - ], - "might": [ - 65, - 120, - 141, - 188 - ], - "feasibly": [ - 65 - ], - "picked": [ - 65 - ], - "past": [ - 65 - ], - "dealing": [ - 65, - 82, - 162, - 273 - ], - "complex": [ - 65 - ], - "obscure": [ - 65 - ], - "layout": [ - 65 - ], - "network": [ - 65 - ], - "shrug": [ - 66 - ], - "fell": [ - 66 - ], - "halve": [ - 66 - ], - "rounding": [ - 66 - ], - "agamemnon": [ - 66 - ], - "takes": [ - 66, - 103, - 116, - 117, - 161, - 162, - 177, - 211, - 273 - ], - "grievous": [ - 66 - ], - "wound": [ - 66 - ], - "tyranid": [ - 66, - 220, - 232, - 233 - ], - "reduction": [ - 66, - 287 - ], - "flesh": [ - 66, - 81, - 178 - ], - "scything": [ - 66, - 220 - ], - "talon": [ - 66 - ], - "tough": [ - 66 - ], - "going": [ - 66, - 130 - ], - "undergone": [ - 66 - ], - "significant": [ - 66, - 166 - ], - "bionic": [ - 66 - ], - "replacement": [ - 66 - ], - "since": [ - 66, - 134, - 143, - 188, - 195 - ], - "character’s": [ - 67 - ], - "bonus.": [ - 67, - 164, - 222, - 233 - ], - "unshakeable": [ - 67 - ], - "confidence": [ - 67, - 129 - ], - "whirlwind": [ - 67 - ], - "facing": [ - 67 - ], - "massed": [ - 67 - ], - "moving": [ - 67 - ], - "hacking": [ - 67 - ], - "gutting": [ - 67 - ], - "beheading": [ - 67 - ], - "ceaseless": [ - 67 - ], - "fury": [ - 67, - 82, - 83, - 84, - 144, - 147, - 262, - 264, - 273, - 276 - ], - "attacking": [ - 67, - 156, - 208, - 232, - 285, - 287 - ], - "enemy": [ - 67, - 85, - 86, - 122, - 127, - 141, - 146, - 150, - 153, - 168, - 171, - 172, - 206, - 222, - 255, - 259 - ], - "horde": [ - 67, - 207, - 208, - 213, - 214, - 229, - 232, - 266, - 286 - ], - "doubles": [ - 67, - 83 - ], - "wall": [ - 67, - 131 - ], - "dealt": [ - 67, - 207 - ], - "hordes": [ - 67, - 206, - 207, - 208, - 214, - 282, - 283 - ], - "magnitude": [ - 67, - 207, - 265 - ], - "x10": [ - 68 - ], - "metres.": [ - 68 - ], - "stampede": [ - 68 - ], - "creature": [ - 68, - 69, - 109, - 121, - 178, - 220 - ], - "fails": [ - 68, - 138, - 184, - 187, - 211 - ], - "stampedes": [ - 68 - ], - "charging": [ - 68 - ], - "straight": [ - 68 - ], - "forwards": [ - 68 - ], - "overrunning": [ - 68 - ], - "source": [ - 68, - 176, - 187 - ], - "escaped": [ - 68 - ], - "crushed": [ - 68 - ], - "hoof": [ - 68 - ], - "taking": [ - 68, - 73, - 211, - 262 - ], - "1d5sb": [ - 68 - ], - "doesnt": [ - 68, - 74 - ], - "stampeding": [ - 68 - ], - "lasts": [ - 68, - 116, - 178 - ], - "longer": [ - 68, - 137 - ], - "visible": [ - 68, - 89, - 115 - ], - "1d10": [ - 68, - 78, - 81, - 82, - 95, - 109, - 112, - 114, - 116, - 207, - 221, - 268, - 285, - 286 - ], - "whichever": [ - 68 - ], - "occurs": [ - 68, - 82, - 126, - 134, - 145, - 232 - ], - "strange": [ - 68 - ], - "gained": [ - 69 - ], - "multiple": [ - 69, - 155, - 208, - 220 - ], - "previously": [ - 69 - ], - "hearing": [ - 69, - 253 - ], - "organs": [ - 69, - 80 - ], - "fine": [ - 69 - ], - "hairs": [ - 69 - ], - "apply": [ - 69, - 153, - 154 - ], - "disturbing": [ - 69 - ], - "aware": [ - 69, - 151, - 152 - ], - "whats": [ - 69 - ], - "multiplier": [ - 69, - 76 - ], - "selection": [ - 69 - ], - "range": [ - 69, - 83, - 86, - 89, - 90, - 91, - 96, - 115, - 119, - 120, - 121, - 122, - 135, - 137, - 138, - 141, - 142, - 143, - 144, - 156, - 196, - 211 - ], - "usually": [ - 69, - 163, - 165, - 170, - 171, - 187 - ], - "multiplies": [ - 69 - ], - "selections": [ - 69 - ], - "renown": [ - 71, - 73, - 74, - 74, - 76, - 83, - 96, - 146, - 167, - 272, - 273 - ], - "craftsmanship": [ - 71, - 76, - 285 - ], - "relics": [ - 71, - 91, - 92 - ], - "trappings": [ - 71 - ], - "cybernetics": [ - 71, - 79 - ], - "resources": [ - 71, - 169 - ], - "exceed": [ - 71 - ], - "traditional": [ - 71, - 87, - 88, - 89 - ], - "watch": [ - 71, - 72, - 200, - 202, - 204, - 279, - 280 - ], - "fortresss": [ - 71 - ], - "armoury": [ - 71, - 72, - 73, - 75, - 87, - 89, - 92 - ], - "sources": [ - 71, - 77, - 187 - ], - "equipment": [ - 71, - 169, - 234, - 264 - ], - "forged": [ - 71 - ], - "deathwatchs": [ - 71, - 72, - 85 - ], - "artificers": [ - 71, - 77 - ], - "tithes": [ - 71, - 196 - ], - "sworn": [ - 71, - 74 - ], - "caches": [ - 71 - ], - "revealed": [ - 71 - ], - "cryptic": [ - 71 - ], - "omega": [ - 71 - ], - "vault": [ - 71 - ], - "captured": [ - 71 - ], - "during": [ - 71, - 131, - 133, - 141, - 149, - 153, - 177, - 232 - ], - "thousands": [ - 71 - ], - "bolter": [ - 71, - 75, - 85, - 86, - 141, - 146, - 255 - ], - "twelve": [ - 71 - ], - "alien": [ - 71, - 198, - 259 - ], - "passed": [ - 71, - 129 - ], - "live": [ - 72 - ], - "theirs": [ - 72 - ], - "sergeant": [ - 72, - 223 - ], - "caelicus": [ - 72 - ], - "scouts": [ - 72 - ], - "induction": [ - 72 - ], - "10th": [ - 72 - ], - "prelude": [ - 72 - ], - "instrument": [ - 72 - ], - "safeguard": [ - 72 - ], - "humanity": [ - 72, - 75, - 195, - 198 - ], - "maxim": [ - 72 - ], - "ravens": [ - 72, - 172 - ], - "godemperors": [ - 72 - ], - "stead": [ - 72 - ], - "sacred": [ - 72 - ], - "assailed": [ - 72 - ], - "corner": [ - 72 - ], - "manner": [ - 72, - 191 - ], - "hough": [ - 72 - ], - "tools": [ - 72 - ], - "fill": [ - 72, - 108 - ], - "faces": [ - 72, - 202, - 218 - ], - "chambers": [ - 72 - ], - "beneath": [ - 72, - 202, - 265 - ], - "brother": [ - 73, - 164, - 262, - 268 - ], - "acquire": [ - 73 - ], - "backup": [ - 73, - 170 - ], - "secondary": [ - 73, - 155, - 170, - 171, - 248 - ], - "ships": [ - 73 - ], - "admirable": [ - 73 - ], - "indeed": [ - 73, - 199 - ], - "calculations": [ - 73 - ], - "blessing": [ - 73 - ], - "rejoin": [ - 73 - ], - "forget": [ - 73, - 100 - ], - "bravery": [ - 73, - 75 - ], - "sought": [ - 73 - ], - "fame": [ - 73 - ], - "remembered": [ - 73 - ], - "infamy": [ - 73 - ], - "gideon": [ - 73 - ], - "apothecary": [ - 73, - 146 - ], - "aeldan": [ - 73 - ], - "pellas": [ - 73 - ], - "thunders": [ - 73 - ], - "word": [ - 73 - ], - "dispatched": [ - 73, - 171 - ], - "inquisitor": [ - 73 - ], - "rating": [ - 74, - 103, - 122, - 207 - ], - "initiated": [ - 74 - ], - "recently": [ - 74, - 280 - ], - "genuine": [ - 74 - ], - "article": [ - 74 - ], - "0-19": [ - 75 - ], - "oaths": [ - 75, - 146 - ], - "duty": [ - 75, - 201, - 259 - ], - "cursed": [ - 75 - ], - "caught": [ - 75, - 233 - ], - "proven": [ - 75, - 94, - 191 - ], - "show": [ - 75 - ], - "easy": [ - 75, - 105, - 156 - ], - "repeatedly": [ - 75 - ], - "words": [ - 75 - ], - "edwin": [ - 75 - ], - "dice": [ - 75, - 126, - 153, - 286 - ], - "metallican": [ - 75 - ], - "dealer": [ - 75 - ], - "distinguished": [ - 75, - 76, - 87, - 96 - ], - "earned": [ - 75 - ], - "impressive": [ - 75 - ], - "victories": [ - 75 - ], - "dizzying": [ - 75 - ], - "spectrum": [ - 75 - ], - "safeguarding": [ - 75 - ], - "armaments": [ - 75 - ], - "precedes": [ - 75, - 287 - ], - "containing": [ - 75, - 232 - ], - "plethora": [ - 75 - ], - "known": [ - 75, - 86, - 117, - 139, - 149, - 204, - 205, - 259, - 273, - 287 - ], - "5–3:": [ - 76 - ], - "costs": [ - 76 - ], - "upgrade": [ - 76, - 89 - ], - "requirement": [ - 76 - ], - "mounted": [ - 76 - ], - "counts": [ - 76, - 217 - ], - "powerful": [ - 76, - 84, - 119, - 206, - 210 - ], - "manportable": [ - 76 - ], - "fired": [ - 76, - 279 - ], - "penetration": [ - 76, - 77, - 90, - 95, - 122 - ], - "fields": [ - 76 - ], - "appropriate": [ - 76, - 153, - 223, - 231, - 282 - ], - "cover": [ - 76, - 120, - 141, - 154, - 155, - 156, - 171, - 204 - ], - "platform": [ - 76 - ], - "clip": [ - 76, - 83, - 85, - 91, - 213, - 220, - 229, - 249, - 250, - 252, - 266, - 276, - 277, - 278, - 279 - ], - "roundscharges": [ - 76 - ], - "holds": [ - 76, - 198 - ], - "vehicle": [ - 76, - 85, - 95, - 264 - ], - "(penetration):": [ - 77 - ], - "how": [ - 77 - ], - "blow": [ - 77, - 162, - 198, - 210 - ], - "less": [ - 77, - 79, - 163, - 164, - 269 - ], - "counting": [ - 77 - ], - "protection": [ - 77, - 89, - 155 - ], - "then": [ - 77, - 84, - 154, - 163, - 169, - 171, - 264, - 265 - ], - "work": [ - 77 - ], - "forges": [ - 77 - ], - "draws": [ - 77 - ], - "vast": [ - 77, - 189, - 200, - 210, - 226 - ], - "countless": [ - 77 - ], - "forge": [ - 77, - 205 - ], - "labour": [ - 77, - 89, - 91 - ], - "supply": [ - 77 - ], - "ories": [ - 77 - ], - "felling": [ - 78, - 86, - 93 - ], - "(x)": [ - 78 - ], - "respond": [ - 78 - ], - "superbly": [ - 78 - ], - "grant": [ - 78 - ], - "puncture": [ - 78 - ], - "mangle": [ - 78 - ], - "capable": [ - 78, - 198, - 222 - ], - "firers": [ - 78 - ], - "toppling": [ - 78 - ], - "mightiest": [ - 78 - ], - "aiming": [ - 78 - ], - "ignores": [ - 78 - ], - "accurate": [ - 78, - 283 - ], - "parenthesis": [ - 78 - ], - "instance": [ - 78 - ], - "extra": [ - 78, - 81, - 130, - 286 - ], - "field": [ - 79, - 87, - 88, - 119, - 216, - 227, - 286 - ], - "insignificant": [ - 79 - ], - "noticeable": [ - 79 - ], - "nearby": [ - 79, - 96, - 195 - ], - "disruption": [ - 79 - ], - "utilising": [ - 79 - ], - "including": [ - 79, - 90, - 102, - 106, - 109, - 110, - 115, - 116, - 248, - 269 - ], - "physical": [ - 79, - 133 - ], - "attempted": [ - 79, - 85 - ], - "wearing": [ - 79, - 88 - ], - "employing": [ - 79 - ], - "base": [ - 79, - 80, - 145, - 148, - 172, - 270, - 271 - ], - "anyone": [ - 79, - 80, - 90, - 104, - 116 - ], - "reduced": [ - 79, - 80, - 111, - 137, - 149 - ], - "major": [ - 79, - 183, - 232 - ], - "41-60": [ - 80 - ], - "technological": [ - 80, - 81, - 89 - ], - "components": [ - 80, - 81, - 89 - ], - "analogous": [ - 80, - 81 - ], - "zone": [ - 80, - 81 - ], - "affected": [ - 80, - 115, - 121, - 285 - ], - "area": [ - 80, - 90, - 95, - 101, - 106, - 109, - 110, - 116, - 117, - 207, - 211, - 234 - ], - "completely": [ - 80 - ], - "ceases": [ - 80, - 109 - ], - "unpowered": [ - 80 - ], - "cybernetic": [ - 80 - ], - "replacements": [ - 80 - ], - "internal": [ - 80, - 230 - ], - "61-80": [ - 81 - ], - "dead": [ - 81, - 163, - 176, - 183, - 185, - 266 - ], - "prolonged": [ - 81 - ], - "reliable": [ - 81, - 229, - 285 - ], - "tearing": [ - 81, - 83, - 87, - 94, - 178, - 220, - 221, - 276, - 279 - ], - "tried": [ - 81 - ], - "seldom": [ - 81 - ], - "vicious": [ - 81, - 131 - ], - "devices": [ - 81, - 94, - 110 - ], - "exploding": [ - 81 - ], - "lodged": [ - 81 - ], - "fail": [ - 81, - 126, - 272 - ], - "jams": [ - 81, - 147 - ], - "inside": [ - 81 - ], - "victim": [ - 81 - ], - "fastmoving": [ - 81 - ], - "jagged": [ - 81 - ], - "jammed": [ - 81 - ], - "misses": [ - 81 - ], - "teeth": [ - 81 - ], - "bone": [ - 81, - 222 - ], - "parry.": [ - 82, - 284 - ], - "snare": [ - 82, - 221 - ], - "entangle": [ - 82 - ], - "volatile": [ - 82, - 93 - ], - "potential": [ - 82 - ], - "immobilised": [ - 82 - ], - "violently": [ - 82, - 84 - ], - "solid": [ - 82, - 117 - ], - "rolled": [ - 82, - 151 - ], - "bonds": [ - 82, - 133 - ], - "wriggle": [ - 82 - ], - "escapes": [ - 82 - ], - "further": [ - 82, - 116, - 272, - 273 - ], - "245).": [ - 83 - ], - "unleashes": [ - 83, - 86 - ], - "often": [ - 83, - 95, - 133, - 145, - 200, - 202 - ], - "doublebarrelled": [ - 83 - ], - "inflicted": [ - 83, - 144 - ], - "amount": [ - 83, - 134, - 140, - 153, - 155, - 164, - 169 - ], - "ammunition": [ - 83, - 84, - 85, - 220, - 221 - ], - "expended": [ - 83 - ], - "fully": [ - 83, - 156 - ], - "automatic": [ - 83, - 179, - 233 - ], - "yields": [ - 83 - ], - "maximum": [ - 83, - 207 - ], - "class": [ - 83, - 91, - 152, - 249, - 250, - 252 - ], - "pistol": [ - 83, - 86, - 93, - 152, - 155, - 213, - 224, - 229, - 233, - 276, - 277, - 282 - ], - "2d105": [ - 83, - 87, - 276 - ], - "soundstrike": [ - 84, - 283 - ], - "auxiliary": [ - 84, - 285 - ], - "grenade": [ - 84, - 91, - 285, - 287 - ], - "launcher": [ - 84, - 283 - ], - "varies": [ - 84, - 150, - 197 - ], - "mans": [ - 84 - ], - "exceeds": [ - 84, - 222 - ], - "citizens": [ - 84 - ], - "picture": [ - 84 - ], - "grave": [ - 84 - ], - "religious": [ - 84 - ], - "taboos": [ - 84 - ], - "exist": [ - 84, - 167, - 168 - ], - "think": [ - 84, - 148 - ], - "profile": [ - 84, - 92 - ], - "daring": [ - 84 - ], - "meant": [ - 84 - ], - "flexible": [ - 84, - 200 - ], - "grip": [ - 84 - ], - "unworthy": [ - 84 - ], - "its": [ - 85, - 166 - ], - "smaller": [ - 85 - ], - "slower": [ - 85 - ], - "fire.": [ - 85 - ], - "ideal": [ - 85, - 130, - 131, - 168 - ], - "needing": [ - 85 - ], - "stalkerpattern": [ - 85 - ], - "quarters": [ - 85, - 86 - ], - "specialists": [ - 85 - ], - "boltgun": [ - 85, - 149 - ], - "types": [ - 85, - 222 - ], - "stalker": [ - 85 - ], - "rounds": [ - 85, - 90, - 95, - 109, - 111, - 114, - 115, - 116, - 162, - 176, - 177, - 178, - 268 - ], - "section": [ - 85, - 223 - ], - "combining": [ - 85 - ], - "godwyn": [ - 85 - ], - "pattern": [ - 85 - ], - "backbone": [ - 85 - ], - "combiweapon": [ - 85 - ], - "arsenal": [ - 85 - ], - "vary": [ - 85 - ], - "combiweapons": [ - 85 - ], - "actually": [ - 85 - ], - "blast(2)": [ - 86 - ], - "qualities.": [ - 86 - ], - "witness": [ - 86 - ], - "ruthless": [ - 86 - ], - "efficiency": [ - 86 - ], - "attest": [ - 86 - ], - "digital": [ - 86 - ], - "threat": [ - 86, - 200 - ], - "raining": [ - 86, - 183 - ], - "digiweapons": [ - 86 - ], - "commonly": [ - 86 - ], - "codex": [ - 86, - 96, - 200, - 275 - ], - "lays": [ - 86 - ], - "tactical": [ - 86, - 146, - 153, - 255 - ], - "miniaturised": [ - 86 - ], - "engage": [ - 86, - 157 - ], - "mistake": [ - 86 - ], - "ornamentation": [ - 86 - ], - "digiweapon": [ - 86 - ], - "excel": [ - 86 - ], - "firepower": [ - 86 - ], - "fullsized": [ - 86 - ], - "ranking": [ - 86 - ], - "1d108": [ - 87, - 92, - 230, - 268 - ], - "unbalanced": [ - 87, - 223 - ], - "fist": [ - 87 - ], - "unwieldy": [ - 87 - ], - "1d106": [ - 87, - 220, - 221 - ], - "balanced": [ - 87, - 93, - 268, - 283 - ], - "concussive": [ - 87, - 162 - ], - "hammer": [ - 87, - 210 - ], - "omnissian": [ - 87 - ], - "astartespattern": [ - 87 - ], - "2d106": [ - 87 - ], - "chainfists": [ - 87 - ], - "fists": [ - 87 - ], - "double": [ - 87, - 95, - 233, - 285 - ], - "wielders": [ - 87 - ], - "adding": [ - 87, - 187 - ], - "techmarines": [ - 87, - 89 - ], - "entrusted": [ - 87 - ], - "1d102": [ - 87 - ], - "††††": [ - 88 - ], - "description": [ - 88, - 119, - 120, - 121, - 122 - ], - "chainfist": [ - 88 - ], - "replaces": [ - 88 - ], - "glove": [ - 88 - ], - "imposes": [ - 88, - 160 - ], - "project": [ - 88 - ], - "disruptive": [ - 88 - ], - "along": [ - 88 - ], - "manual": [ - 88 - ], - "dexterity": [ - 88 - ], - "claw": [ - 88 - ], - "blade": [ - 88, - 93, - 213, - 269 - ], - "slice": [ - 88 - ], - "explosive": [ - 88, - 90, - 158, - 285 - ], - "impact": [ - 88, - 161, - 204, - 286 - ], - "theory": [ - 88 - ], - "upgraded": [ - 88 - ], - "given": [ - 88, - 196, - 198, - 210 - ], - "necessary": [ - 88, - 271 - ], - "claws": [ - 88, - 131, - 220, - 222, - 275 - ], - "though": [ - 88, - 96, - 133, - 141, - 148, - 185 - ], - "covers": [ - 89, - 98, - 155 - ], - "install": [ - 89 - ], - "prefer": [ - 89, - 214 - ], - "upgrades": [ - 89 - ], - "themselves": [ - 89, - 94, - 171, - 226 - ], - "doing": [ - 89, - 131, - 165, - 176, - 205 - ], - "decrease": [ - 89, - 90 - ], - "beyond": [ - 89, - 168, - 191 - ], - "wartorn": [ - 89, - 262 - ], - "unthinkable": [ - 89 - ], - "venture": [ - 89, - 259 - ], - "swords": [ - 89 - ], - "serfs": [ - 89 - ], - "technologically": [ - 89 - ], - "sophisticated": [ - 89, - 95 - ], - "blades": [ - 89 - ], - "mounting": [ - 89 - ], - "employed": [ - 89 - ], - "damage.": [ - 90, - 146 - ], - "dragonfire": [ - 90 - ], - "shells": [ - 90, - 134 - ], - "replace": [ - 90 - ], - "main": [ - 90, - 169, - 271 - ], - "airreactive": [ - 90 - ], - "concentrate": [ - 90 - ], - "detonates": [ - 90 - ], - "payload": [ - 90 - ], - "combusts": [ - 90 - ], - "offering": [ - 90 - ], - "saturation": [ - 90 - ], - "kraken": [ - 90 - ], - "comparable": [ - 90 - ], - "superior": [ - 90 - ], - "propellants": [ - 90 - ], - "sacrificing": [ - 90 - ], - "ultradense": [ - 90 - ], - "adamantine": [ - 90 - ], - "catch": [ - 90, - 265 - ], - "firer": [ - 90 - ], - "composition": [ - 90 - ], - "improved": [ - 90, - 220, - 275 - ], - "roll.": [ - 91 - ], - "unmentioned": [ - 91 - ], - "dioctal": [ - 91 - ], - "sacellum": [ - 91 - ], - "sits": [ - 91 - ], - "vormos": [ - 91 - ], - "surrounded": [ - 91, - 185, - 211 - ], - "mysterious": [ - 91, - 202 - ], - "aquilatopped": [ - 91 - ], - "monolith": [ - 91 - ], - "elaborate": [ - 91 - ], - "rites": [ - 91 - ], - "consecration": [ - 91 - ], - "sanctuary": [ - 91 - ], - "corruptio": [ - 91 - ], - "brought": [ - 91 - ], - "isolate": [ - 91 - ], - "knowled": [ - 91 - ], - "trapped": [ - 91 - ], - "compliance": [ - 91 - ], - "laws": [ - 91 - ], - "items": [ - 91, - 169 - ], - "masking": [ - 91 - ], - "screen": [ - 91 - ], - "quietly": [ - 91 - ], - "circulation": [ - 91 - ], - "declared": [ - 91 - ], - "technosanctus": [ - 91 - ], - "verifida": [ - 91 - ], - "crucible": [ - 91, - 280 - ], - "tearing,": [ - 92, - 221 - ], - "remorseless": [ - 92, - 94 - ], - "crusader": [ - 92, - 94 - ], - "sanctified": [ - 92 - ], - "chalice": [ - 92 - ], - "blast(1),": [ - 93 - ], - "deathroar": [ - 93 - ], - "2d1013": [ - 93 - ], - "frost": [ - 93, - 98 - ], - "1d1011": [ - 93, - 276 - ], - "field,": [ - 94 - ], - "helm": [ - 94 - ], - "varthion": [ - 94 - ], - "levin": [ - 94 - ], - "shield": [ - 94 - ], - "halo": [ - 94 - ], - "exceedingly": [ - 94 - ], - "rare": [ - 94, - 199 - ], - "again": [ - 94, - 118, - 184, - 279 - ], - "artificer": [ - 94 - ], - "trinity": [ - 94 - ], - "crafted": [ - 94 - ], - "mark": [ - 94, - 168, - 203, - 204 - ], - "valour": [ - 94 - ], - "protective": [ - 94 - ], - "devicea": [ - 94 - ], - "suit": [ - 94, - 216, - 231, - 280 - ], - "gilded": [ - 94 - ], - "detestations": [ - 94 - ], - "should": [ - 94, - 126, - 148, - 154, - 169, - 179, - 201, - 214, - 217, - 222, - 234, - 264, - 273 - ], - "understated": [ - 94 - ], - "4d10": [ - 95, - 104, - 117 - ], - "pain": [ - 95, - 108, - 162 - ], - "suppressant": [ - 95 - ], - "demolitions": [ - 95, - 270 - ], - "planting": [ - 95 - ], - "mines": [ - 95, - 96 - ], - "chemical": [ - 95 - ], - "trigger": [ - 95 - ], - "timedelays": [ - 95 - ], - "injectors": [ - 95 - ], - "ignore": [ - 95, - 147, - 264 - ], - "booby": [ - 95 - ], - "particularly": [ - 95, - 234 - ], - "effective": [ - 95, - 283 - ], - "doses": [ - 95 - ], - "nartheciums": [ - 95 - ], - "vulnerable": [ - 95 - ], - "underside": [ - 95 - ], - "cluster": [ - 95, - 96 - ], - "sacraments": [ - 95 - ], - "renewal": [ - 95 - ], - "refill": [ - 95 - ], - "routine": [ - 95, - 107, - 112, - 157, - 232 - ], - "signum": [ - 95, - 96 - ], - "req": [ - 96 - ], - "biological": [ - 96 - ], - "auspex": [ - 96 - ], - "spot": [ - 96 - ], - "detectable": [ - 96 - ], - "link": [ - 96, - 253 - ], - "alone": [ - 96 - ], - "invisible": [ - 96 - ], - "gases": [ - 96 - ], - "biosigns": [ - 96 - ], - "ambient": [ - 96 - ], - "targeter": [ - 96 - ], - "radiation": [ - 96 - ], - "50cm": [ - 96 - ], - "thick": [ - 96 - ], - "certain": [ - 96, - 134, - 137, - 191 - ], - "shielding": [ - 96 - ], - "materials": [ - 96 - ], - "cartograph": [ - 96 - ], - "block": [ - 96, - 197 - ], - "scanner": [ - 96, - 216 - ], - "combi": [ - 96 - ], - "tool": [ - 96, - 166 - ], - "01-03": [ - 97 - ], - "doom": [ - 97, - 116, - 218 - ], - "befall": [ - 97 - ], - "0405": [ - 97 - ], - "echo": [ - 97 - ], - "seconds": [ - 97, - 100 - ], - "noises": [ - 97 - ], - "cause": [ - 97, - 100 - ], - "sinister": [ - 97 - ], - "echoes": [ - 97 - ], - "0608": [ - 97 - ], - "unholy": [ - 97, - 198, - 210, - 211, - 213 - ], - "stench": [ - 97 - ], - "psyker": [ - 97, - 99, - 100, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 122, - 189 - ], - "permeated": [ - 97 - ], - "bizarre": [ - 97 - ], - "insanity": [ - 97, - 110, - 114, - 115, - 179, - 185, - 186, - 187, - 248 - ], - "inherent": [ - 97 - ], - "phobias": [ - 97 - ], - "suspicions": [ - 97 - ], - "surge": [ - 97 - ], - "09–11": [ - 98 - ], - "wave": [ - 98 - ], - "negative": [ - 98 - ], - "emotion": [ - 98 - ], - "hoarfrost": [ - 98 - ], - "temperature": [ - 98, - 126 - ], - "plummets": [ - 98 - ], - "instant": [ - 98 - ], - "coating": [ - 98 - ], - "everything": [ - 98, - 109, - 117 - ], - "3d10": [ - 98, - 101, - 104, - 105, - 108, - 112, - 117, - 118 - ], - "12–14": [ - 99 - ], - "aura": [ - 99, - 211 - ], - "taint": [ - 99, - 115, - 199 - ], - "1d100": [ - 99, - 110, - 115 - ], - "spooked": [ - 99 - ], - "agitated": [ - 99 - ], - "15–17": [ - 100 - ], - "psyniscience": [ - 100 - ], - "pinpoint": [ - 100 - ], - "worm": [ - 100, - 121 - ], - "something": [ - 100, - 118, - 170, - 272 - ], - "spoilage": [ - 100 - ], - "food": [ - 100 - ], - "drink": [ - 100 - ], - "5d10": [ - 100, - 102, - 106, - 107, - 110 - ], - "haunting": [ - 100 - ], - "breeze": [ - 100 - ], - "winds": [ - 100, - 104, - 204 - ], - "whip": [ - 100 - ], - "blowing": [ - 100 - ], - "guttering": [ - 100 - ], - "24–26": [ - 101 - ], - "fires": [ - 101, - 156, - 255 - ], - "veil": [ - 101, - 115, - 168 - ], - "moment": [ - 101, - 103, - 151, - 233 - ], - "remainder": [ - 101 - ], - "27–29": [ - 102 - ], - "plunged": [ - 102 - ], - "immediate": [ - 102, - 109 - ], - "distorted": [ - 102 - ], - "reflections": [ - 102 - ], - "mirrors": [ - 102 - ], - "reflective": [ - 102 - ], - "surfaces": [ - 102 - ], - "distort": [ - 102 - ], - "shatter": [ - 102 - ], - "breath": [ - 102 - ], - "leech": [ - 102 - ], - "everyone": [ - 102, - 106, - 109, - 110, - 111, - 117, - 186 - ], - "short": [ - 102, - 108, - 200 - ], - "33–35": [ - 103 - ], - "daemonic": [ - 103, - 168, - 186 - ], - "mask": [ - 103 - ], - "fleeting": [ - 103 - ], - "appearance": [ - 103, - 110, - 226 - ], - "36–38": [ - 104 - ], - "corruption": [ - 104, - 114, - 117, - 187 - ], - "decay": [ - 104 - ], - "plant": [ - 104 - ], - "withers": [ - 104 - ], - "dies": [ - 104, - 136, - 164, - 184 - ], - "spectral": [ - 104, - 182 - ], - "gale": [ - 104 - ], - "howling": [ - 104, - 108 - ], - "erupt": [ - 104 - ], - "42–44": [ - 105 - ], - "knocked": [ - 105, - 107, - 111, - 116, - 161, - 178 - ], - "ground": [ - 105, - 106, - 112, - 114, - 116, - 146, - 150, - 170, - 178, - 255, - 275, - 285 - ], - "tears": [ - 105 - ], - "weeps": [ - 105 - ], - "stone": [ - 105 - ], - "wood": [ - 105, - 286 - ], - "pictures": [ - 105 - ], - "45–47": [ - 106 - ], - "statues": [ - 106, - 182 - ], - "appear": [ - 106, - 255 - ], - "crying": [ - 106 - ], - "earth": [ - 106, - 109, - 195, - 214 - ], - "protests": [ - 106 - ], - "suddenly": [ - 106, - 184 - ], - "shakes": [ - 106 - ], - "48–50": [ - 107 - ], - "discharge": [ - 107 - ], - "static": [ - 107 - ], - "electricity": [ - 107 - ], - "fills": [ - 107, - 161 - ], - "hair": [ - 107 - ], - "51–53": [ - 108 - ], - "electrics": [ - 108 - ], - "illuminated": [ - 108 - ], - "eldritch": [ - 108 - ], - "ghosts": [ - 108 - ], - "ghostly": [ - 108 - ], - "apparitions": [ - 108 - ], - "54–56": [ - 109 - ], - "moments": [ - 109, - 184 - ], - "upwards": [ - 109 - ], - "rises": [ - 109 - ], - "gravity": [ - 109 - ], - "briefly": [ - 109 - ], - "crashes": [ - 109 - ], - "banshee": [ - 109 - ], - "howl": [ - 109, - 118 - ], - "shrill": [ - 109 - ], - "keening": [ - 109 - ], - "rings": [ - 109 - ], - "shattering": [ - 109 - ], - "glass": [ - 109 - ], - "forcing": [ - 109, - 148, - 159 - ], - "challenging": [ - 109, - 132, - 161, - 211, - 270 - ], - "deafened": [ - 109 - ], - "furies": [ - 109 - ], - "63–65": [ - 110 - ], - "protects": [ - 110 - ], - "unless": [ - 110, - 135, - 152, - 174 - ], - "warded": [ - 110, - 117 - ], - "shadow": [ - 110, - 220, - 270, - 272, - 274 - ], - "mercifully": [ - 110 - ], - "glimpse": [ - 110, - 265, - 266 - ], - "difficult": [ - 110, - 114, - 132, - 148 - ], - "scorn": [ - 110 - ], - "reject": [ - 110 - ], - "youre": [ - 110 - ], - "unwarded": [ - 110 - ], - "malfunction": [ - 110 - ], - "momentarily": [ - 110 - ], - "06-09": [ - 111 - ], - "stunned": [ - 111, - 112, - 162 - ], - "concussion": [ - 111 - ], - "unconscious": [ - 111, - 136, - 157, - 176, - 178 - ], - "10–13": [ - 112 - ], - "psyblast": [ - 112 - ], - "explosion": [ - 112 - ], - "14–18": [ - 113 - ], - "soul": [ - 113, - 120, - 189, - 205 - ], - "sear": [ - 113 - ], - "courses": [ - 113 - ], - "scorching": [ - 113 - ], - "19–24": [ - 114 - ], - "locked": [ - 114 - ], - "cages": [ - 114 - ], - "ethereal": [ - 114 - ], - "prison": [ - 114 - ], - "catatonic": [ - 114, - 115, - 178, - 179 - ], - "state": [ - 114 - ], - "thereafter": [ - 114 - ], - "freed": [ - 114 - ], - "restored": [ - 114, - 233 - ], - "chronological": [ - 114 - ], - "incontinence": [ - 114 - ], - "warps": [ - 114 - ], - "winks": [ - 114 - ], - "existence": [ - 114, - 116, - 118, - 167 - ], - "reappears": [ - 114 - ], - "minute": [ - 114 - ], - "narrative": [ - 114, - 130, - 131 - ], - "permanent": [ - 114 - ], - "mirror": [ - 114 - ], - "56–58": [ - 115 - ], - "swap": [ - 115 - ], - "host": [ - 115, - 198 - ], - "slain": [ - 115 - ], - "ends": [ - 115 - ], - "immediately": [ - 115, - 118, - 142, - 143, - 144, - 187, - 217 - ], - "experience": [ - 115, - 117, - 121, - 166 - ], - "wanders": [ - 115 - ], - "journey": [ - 115 - ], - "rending": [ - 115, - 117, - 220, - 222 - ], - "vibrates": [ - 115 - ], - "images": [ - 115 - ], - "cackling": [ - 115 - ], - "kaleidoscopic": [ - 115 - ], - "sentient": [ - 115 - ], - "68–72": [ - 116 - ], - "invoke": [ - 116 - ], - "perils": [ - 116, - 117 - ], - "cataclysmic": [ - 116 - ], - "overloads": [ - 116 - ], - "arcing": [ - 116 - ], - "bolts": [ - 116 - ], - "1d105": [ - 116, - 221, - 266 - ], - "hours": [ - 116, - 119, - 178, - 179, - 282 - ], - "event": [ - 116 - ], - "hole": [ - 116 - ], - "vortex": [ - 116 - ], - "springs": [ - 116 - ], - "83–86": [ - 117 - ], - "complications": [ - 117, - 148 - ], - "caused": [ - 117, - 207 - ], - "receive": [ - 117, - 189, - 264, - 282 - ], - "visit": [ - 117 - ], - "adjust": [ - 117, - 172 - ], - "checks": [ - 117 - ], - "serving": [ - 117, - 164 - ], - "conduit": [ - 117 - ], - "blasphemous": [ - 117 - ], - "forces": [ - 117, - 148, - 198, - 200 - ], - "reality": [ - 117, - 187 - ], - "quake": [ - 117 - ], - "buckles": [ - 117 - ], - "sundered": [ - 117 - ], - "alternately": [ - 117 - ], - "burn": [ - 117, - 122, - 130, - 160 - ], - "freeze": [ - 117 - ], - "untouchables": [ - 118 - ], - "rolled.": [ - 118 - ], - "coming": [ - 118, - 167 - ], - "curdling": [ - 118 - ], - "daemon": [ - 118, - 210, - 211 - ], - "prince": [ - 118, - 211 - ], - "xiii": [ - 118, - 206, - 207, - 217, - 219, - 221, - 223, - 229 - ], - "adversaries": [ - 118, - 206, - 207, - 217, - 219, - 221, - 223, - 229 - ], - "rips": [ - 118 - ], - "detests": [ - 118 - ], - "trains": [ - 118 - ], - "fool": [ - 118 - ], - "unwittingly": [ - 118 - ], - "summoned": [ - 118 - ], - "destruction": [ - 118 - ], - "send": [ - 118, - 148 - ], - "irrevocably": [ - 118 - ], - "destroyed": [ - 118, - 201, - 217, - 270 - ], - "sucked": [ - 118 - ], - "screaming": [ - 118, - 171 - ], - "seen": [ - 118, - 206 - ], - "consumed": [ - 118 - ], - "utterly": [ - 118 - ], - "hellfire": [ - 118, - 122 - ], - "rule": [ - 118 - ], - "appears": [ - 118, - 265 - ], - "recovery": [ - 119, - 171 - ], - "may": [ - 119 - ], - "again.": [ - 119 - ], - "self": [ - 119, - 120, - 121, - 122 - ], - "sustained": [ - 119, - 120, - 121, - 122, - 131, - 142, - 143, - 144, - 255, - 271 - ], - "sheathes": [ - 119 - ], - "impenetrable": [ - 119 - ], - "ward": [ - 119 - ], - "prevents": [ - 119 - ], - "wielding": [ - 119 - ], - "curse": [ - 119, - 179, - 180, - 248 - ], - "protect": [ - 120 - ], - "normal.": [ - 120 - ], - "boil": [ - 120 - ], - "sprouts": [ - 120 - ], - "pair": [ - 120 - ], - "lance": [ - 120 - ], - "bear": [ - 120 - ], - "flyer": [ - 120, - 275 - ], - "shackle": [ - 120 - ], - "fear.": [ - 121, - 187, - 198 - ], - "librarians": [ - 121 - ], - "purchased": [ - 121 - ], - "provided": [ - 121 - ], - "meets": [ - 121 - ], - "driving": [ - 121 - ], - "barrier": [ - 121 - ], - "seed": [ - 121 - ], - "remorse": [ - 121 - ], - "indecision": [ - 121 - ], - "guilt": [ - 121 - ], - "deadly": [ - 122, - 198, - 221 - ], - "smash": [ - 122 - ], - "torrent": [ - 122, - 162 - ], - "char": [ - 122 - ], - "pick": [ - 122 - ], - "engulf": [ - 122 - ], - "cloud": [ - 122 - ], - "break": [ - 123, - 141 - ], - "free.": [ - 123 - ], - "likely": [ - 125, - 196, - 273 - ], - "occur": [ - 125, - 179 - ], - "untrained": [ - 125 - ], - "cases": [ - 125, - 134 - ], - "governing": [ - 125 - ], - "halved": [ - 125 - ], - "improve": [ - 125 - ], - "chances": [ - 125 - ], - "despite": [ - 125, - 265 - ], - "push": [ - 126, - 145 - ], - "grox": [ - 126 - ], - "degrees": [ - 126, - 129, - 132, - 153, - 181, - 270, - 272, - 284 - ], - "wins": [ - 126, - 150 - ], - "poison": [ - 126, - 248 - ], - "disease": [ - 126 - ], - "tolerate": [ - 126 - ], - "extremes": [ - 126 - ], - "stave": [ - 126 - ], - "hunger": [ - 126 - ], - "lowest": [ - 126 - ], - "mutation": [ - 126 - ], - "parties": [ - 126 - ], - "maintain": [ - 126, - 134 - ], - "stalemate": [ - 126, - 272 - ], - "nothing": [ - 126, - 149, - 177, - 178, - 218 - ], - "happens": [ - 126 - ], - "narrow": [ - 126 - ], - "navigate": [ - 126 - ], - "treacherous": [ - 126, - 191 - ], - "winner": [ - 126, - 129 - ], - "terrain": [ - 126 - ], - "familiar": [ - 127 - ], - "solve": [ - 127 - ], - "puzzle": [ - 127 - ], - "locate": [ - 127 - ], - "ulfric": [ - 127, - 129 - ], - "trying": [ - 127, - 162 - ], - "open": [ - 127, - 129 - ], - "bunker": [ - 127, - 129, - 266 - ], - "door": [ - 127, - 128, - 129 - ], - "terrified": [ - 127 - ], - "gauge": [ - 128 - ], - "persons": [ - 128 - ], - "attitude": [ - 128 - ], - "guardsmen": [ - 128, - 129, - 226, - 234, - 262, - 267, - 273 - ], - "hold": [ - 128, - 170, - 269 - ], - "closed": [ - 128 - ], - "decides": [ - 128, - 142 - ], - "torture": [ - 128 - ], - "ulfrics": [ - 128 - ], - "impression": [ - 128 - ], - "collective": [ - 128 - ], - "passing": [ - 129 - ], - "compared": [ - 129 - ], - "guardsmens": [ - 129 - ], - "flinging": [ - 129 - ], - "storms": [ - 129, - 134 - ], - "traitors": [ - 129 - ], - "whether": [ - 129, - 144, - 208, - 272 - ], - "succeeded": [ - 129 - ], - "sometimes": [ - 129, - 130, - 170, - 171 - ], - "useful": [ - 129 - ], - "badly": [ - 129 - ], - "burning": [ - 130, - 139, - 163 - ], - "situations": [ - 130, - 148, - 172, - 179, - 190 - ], - "fast": [ - 130, - 151, - 176, - 259 - ], - "travel": [ - 130, - 195, - 205 - ], - "save": [ - 130, - 163 - ], - "speeds": [ - 130 - ], - "leisurely": [ - 130 - ], - "pace": [ - 130, - 131 - ], - "permanently": [ - 130 - ], - "circumstances": [ - 130, - 137, - 172 - ], - "running": [ - 131, - 165, - 268 - ], - "explorations": [ - 131 - ], - "tiring": [ - 131 - ], - "triples": [ - 131 - ], - "wants": [ - 131 - ], - "crevasse": [ - 131 - ], - "rooftop": [ - 131 - ], - "sniper": [ - 131 - ], - "position": [ - 131 - ], - "shinny": [ - 131 - ], - "tree": [ - 131 - ], - "cumulative": [ - 131 - ], - "sustain": [ - 131 - ], - "modifiers": [ - 132, - 153 - ], - "abseiling": [ - 132 - ], - "kind": [ - 132, - 133, - 166 - ], - "difficulty": [ - 132, - 148, - 156, - 168, - 171, - 172 - ], - "drop": [ - 132, - 159, - 262 - ], - "harness": [ - 132 - ], - "rope": [ - 132 - ], - "smoke": [ - 132 - ], - "ordinary": [ - 132, - 157, - 189, - 285 - ], - "descends": [ - 132, - 232 - ], - "shallow": [ - 132 - ], - "water": [ - 132, - 204 - ], - "descent": [ - 132 - ], - "five": [ - 132, - 208 - ], - "snow": [ - 132, - 287 - ], - "gripif": [ - 132 - ], - "underbrush": [ - 132 - ], - "recovering": [ - 133 - ], - "lost": [ - 133, - 139, - 202 - ], - "resource": [ - 133 - ], - "wisely": [ - 133 - ], - "kill": [ - 133, - 134, - 138, - 168, - 169, - 232, - 262 - ], - "typically": [ - 133 - ], - "capacities": [ - 133 - ], - "handful": [ - 133 - ], - "disposal": [ - 133 - ], - "connect": [ - 133 - ], - "recovered": [ - 133 - ], - "comes": [ - 133, - 280 - ], - "restoring": [ - 133 - ], - "killteams": [ - 133, - 134, - 167, - 169, - 170, - 171, - 232 - ], - "pool": [ - 133, - 169 - ], - "strengthening": [ - 133 - ], - "challenges": [ - 134, - 147, - 259 - ], - "soon": [ - 134 - ], - "activate": [ - 134 - ], - "relies": [ - 134 - ], - "confusion": [ - 134 - ], - "limits": [ - 134 - ], - "stresses": [ - 134 - ], - "trust": [ - 134 - ], - "roundadditional": [ - 134 - ], - "explosions": [ - 134 - ], - "leaders": [ - 134 - ], - "artillery": [ - 134 - ], - "reason": [ - 134 - ], - "battle-brother": [ - 135, - 169 - ], - "ability.": [ - 135 - ], - "visual": [ - 135, - 138, - 153 - ], - "means": [ - 135, - 142, - 169, - 196, - 200, - 211, - 253, - 271 - ], - "default": [ - 135 - ], - "indicated": [ - 135, - 140, - 153 - ], - "linked": [ - 135, - 217 - ], - "maintained": [ - 136 - ], - "activating": [ - 136 - ], - "reduces": [ - 136, - 155 - ], - "kinds": [ - 136 - ], - "drops": [ - 136, - 177 - ], - "modeand": [ - 136 - ], - "returns": [ - 136, - 178 - ], - "modeat": [ - 136 - ], - "his": [ - 137, - 164 - ], - "kill-team’s": [ - 137 - ], - "return": [ - 137, - 142, - 262, - 263, - 273 - ], - "(see": [ - 138 - ], - "212).": [ - 138 - ], - "palarius": [ - 138, - 141 - ], - "ahead": [ - 138 - ], - "hunting": [ - 138, - 269 - ], - "boss": [ - 138 - ], - "ruins": [ - 138, - 259 - ], - "chapel": [ - 138 - ], - "unexpectedly": [ - 138 - ], - "weakened": [ - 138 - ], - "floor": [ - 138 - ], - "cellar": [ - 138 - ], - "contact": [ - 138 - ], - "reverts": [ - 138 - ], - "losing": [ - 138, - 142 - ], - "currently": [ - 138 - ], - "active": [ - 138, - 140, - 214 - ], - "removed": [ - 139, - 181 - ], - "leaves": [ - 139, - 266 - ], - "location": [ - 139, - 163, - 168, - 179, - 232, - 271, - 285 - ], - "choice": [ - 139, - 268 - ], - "involuntarily": [ - 139 - ], - "fanatical": [ - 139 - ], - "improvement": [ - 139 - ], - "temporary": [ - 139 - ], - "increase": [ - 139, - 148, - 169 - ], - "witches": [ - 139 - ], - "spawn": [ - 139, - 187 - ], - "finest": [ - 140 - ], - "heretic": [ - 140 - ], - "superiority": [ - 140 - ], - "activated": [ - 140, - 273 - ], - "genetic": [ - 140, - 199 - ], - "heritage": [ - 140 - ], - "potent": [ - 140 - ], - "indomitable": [ - 140 - ], - "largely": [ - 140 - ], - "tactics": [ - 140 - ], - "bond": [ - 140 - ], - "between": [ - 140, - 168, - 268 - ], - "track": [ - 141, - 153, - 179, - 280 - ], - "andrews": [ - 141, - 142, - 143 - ], - "rush": [ - 141 - ], - "later": [ - 141, - 159 - ], - "apparent": [ - 141 - ], - "numerous": [ - 141 - ], - "neither": [ - 141, - 188 - ], - "andrew": [ - 142 - ], - "damiens": [ - 142, - 143 - ], - "benefiting": [ - 142, - 143 - ], - "damien": [ - 142 - ], - "continue": [ - 142, - 164 - ], - "sustaining": [ - 142, - 143 - ], - "jims": [ - 142 - ], - "joining": [ - 143 - ], - "join": [ - 143, - 214, - 259 - ], - "turns": [ - 143, - 149 - ], - "abilitys": [ - 143 - ], - "switched": [ - 143 - ], - "suppression": [ - 144, - 196, - 253 - ], - "tooth": [ - 144 - ], - "nail": [ - 144 - ], - "holy": [ - 144 - ], - "lives": [ - 144, - 164, - 188, - 195, - 198, - 226, - 262 - ], - "hearts": [ - 144, - 198 - ], - "wardens": [ - 144 - ], - "awaiting": [ - 144 - ], - "unleashed": [ - 144 - ], - "tests.": [ - 145 - ], - "overview": [ - 145 - ], - "broken": [ - 145 - ], - "broad": [ - 145 - ], - "steps": [ - 145 - ], - "forward": [ - 145, - 255 - ], - "centre": [ - 145, - 269 - ], - "heavily": [ - 145, - 170, - 287 - ], - "shielded": [ - 145 - ], - "orbital": [ - 145 - ], - "front": [ - 145 - ], - "lines": [ - 145, - 259 - ], - "stygian": [ - 145 - ], - "division": [ - 145 - ], - "suggests": [ - 145, - 268 - ], - "preparation": [ - 145 - ], - "socalled": [ - 145 - ], - "ethereals": [ - 145 - ], - "coordinating": [ - 145 - ], - "initial": [ - 145, - 183 - ], - "downtime": [ - 145 - ], - "actual": [ - 145 - ], - "operations": [ - 145 - ], - "players": [ - 145, - 147, - 148, - 153, - 154, - 164, - 165, - 166, - 167, - 169, - 180, - 264 - ], - "preparing": [ - 145 - ], - "recommendation": [ - 145 - ], - "deploy": [ - 145 - ], - "available": [ - 145, - 169, - 196 - ], - "spacing": [ - 146, - 255 - ], - "regroup": [ - 146 - ], - "soak": [ - 146 - ], - "oath": [ - 146, - 147, - 256 - ], - "prerequisite": [ - 146 - ], - "strongpoint": [ - 146 - ], - "objective": [ - 146, - 147, - 168, - 169, - 170, - 171, - 262, - 263 - ], - "confirm": [ - 147 - ], - "tank": [ - 147, - 255 - ], - "buster": [ - 147, - 255 - ], - "execution": [ - 147 - ], - "dropped": [ - 147 - ], - "destroying": [ - 147, - 283 - ], - "wicked": [ - 147 - ], - "remembrances": [ - 147 - ], - "grand": [ - 147 - ], - "objectives": [ - 147, - 166, - 167, - 168, - 169, - 170, - 171, - 264 - ], - "achieve": [ - 147 - ], - "completed": [ - 147 - ], - "quantifying": [ - 147 - ], - "bad": [ - 148 - ], - "adapt": [ - 148 - ], - "plain": [ - 148 - ], - "wrong": [ - 148 - ], - "commanders": [ - 148, - 206, - 214 - ], - "decisions": [ - 148 - ], - "unfounded": [ - 148 - ], - "rewards": [ - 148, - 273 - ], - "soldiers": [ - 148, - 265 - ], - "ignorance": [ - 148 - ], - "typical": [ - 148 - ], - "kill-team": [ - 149 - ], - "has": [ - 149 - ], - "encounter": [ - 149, - 174, - 175, - 176, - 177, - 178 - ], - "overlap": [ - 149 - ], - "slightly": [ - 149 - ], - "resolved": [ - 149, - 170 - ], - "hargoth": [ - 149 - ], - "beset": [ - 149 - ], - "sides": [ - 149, - 232 - ], - "dodged": [ - 150 - ], - "parried.": [ - 150 - ], - "concentration": [ - 150, - 282 - ], - "halffull": [ - 150, - 282 - ], - "guarded": [ - 150, - 282 - ], - "vertically": [ - 150 - ], - "horizontally": [ - 150 - ], - "knockdown": [ - 150 - ], - "manoeuvre": [ - 150, - 264 - ], - "meter": [ - 150 - ], - "inflicting": [ - 151 - ], - "grappling": [ - 151 - ], - "subtype": [ - 151 - ], - "abstractions": [ - 151 - ], - "succeeds": [ - 151 - ], - "reactions": [ - 152 - ], - "attacker": [ - 152 - ], - "engaged": [ - 152, - 155 - ], - "negate": [ - 152 - ], - "resolving": [ - 152 - ], - "spray": [ - 152 - ], - "pray": [ - 152 - ], - "sidebar": [ - 152 - ], - "(but": [ - 153 - ], - "reactions,": [ - 153 - ], - "below).": [ - 153 - ], - "finally": [ - 153, - 264 - ], - "involved": [ - 153, - 272 - ], - "maps": [ - 153 - ], - "attackers": [ - 153 - ], - "optional": [ - 153 - ], - "minimum": [ - 153 - ], - "combats": [ - 153 - ], - "want": [ - 153, - 270, - 273 - ], - "inflicts": [ - 153, - 268 - ], - "help": [ - 153 - ], - "keep": [ - 153 - ], - "positions": [ - 153 - ], - "noted": [ - 154 - ], - "surviving": [ - 154 - ], - "firefight": [ - 154 - ], - "sheets": [ - 154 - ], - "knows": [ - 154, - 198 - ], - "draw": [ - 154, - 253 - ], - "partly": [ - 154, - 233 - ], - "reasonably": [ - 154 - ], - "damaging": [ - 155, - 270 - ], - "therefore": [ - 155 - ], - "invulnerable": [ - 155 - ], - "destroy": [ - 155 - ], - "afforded": [ - 155 - ], - "excess": [ - 155 - ], - "resolve": [ - 155 - ], - "testing": [ - 155 - ], - "pistol.": [ - 156 - ], - "modifier": [ - 156, - 179 - ], - "myrdor": [ - 156, - 159, - 160, - 164 - ], - "small": [ - 156, - 188 - ], - "pile": [ - 156 - ], - "sandbags": [ - 156, - 287 - ], - "surprised": [ - 156 - ], - "servitor": [ - 156, - 228 - ], - "blasts": [ - 156 - ], - "twin": [ - 156, - 205 - ], - "autoguns": [ - 156 - ], - "unaware": [ - 156 - ], - "shooting": [ - 156, - 283, - 286 - ], - "massive": [ - 156 - ], - "fortunately": [ - 156 - ], - "struck": [ - 156, - 163 - ], - "legs": [ - 156, - 213, - 216, - 218, - 276 - ], - "absorbed": [ - 156 - ], - "blank": [ - 156 - ], - "ganging": [ - 157 - ], - "advantage": [ - 157 - ], - "outnumber": [ - 157, - 268 - ], - "sleeping": [ - 157 - ], - "zero": [ - 158, - 159, - 160 - ], - "consults": [ - 158, - 160 - ], - "effectsarm": [ - 159 - ], - "says": [ - 159 - ], - "myrdors": [ - 159 - ], - "fractured": [ - 159 - ], - "collapses": [ - 159 - ], - "holding": [ - 159, - 177, - 191 - ], - "unconsciousness": [ - 159 - ], - "dies.": [ - 160 - ], - "lasgun": [ - 160, - 197, - 229 - ], - "accounting": [ - 160 - ], - "paralysed": [ - 160 - ], - "suffered": [ - 160, - 163, - 164 - ], - "slips": [ - 160 - ], - "dreamless": [ - 160 - ], - "coma": [ - 160 - ], - "treated": [ - 160 - ], - "effectsleg": [ - 160 - ], - "determines": [ - 160, - 172 - ], - "horrific": [ - 160, - 179 - ], - "bereft": [ - 160 - ], - "(+0)": [ - 161 - ], - "down.": [ - 161 - ], - "ringing": [ - 161 - ], - "round.": [ - 162 - ], - "nose": [ - 162 - ], - "explodes": [ - 162 - ], - "blinding": [ - 162 - ], - "staggers": [ - 162 - ], - "sends": [ - 162 - ], - "reeling": [ - 162, - 174 - ], - "snapped": [ - 162 - ], - "leaving": [ - 162 - ], - "staggering": [ - 162 - ], - "mindnumbing": [ - 162 - ], - "slams": [ - 162 - ], - "fracturing": [ - 162 - ], - "skull": [ - 162 - ], - "opening": [ - 162, - 168 - ], - "few": [ - 163 - ], - "can": [ - 163 - ], - "recovery.": [ - 163 - ], - "accrued": [ - 163 - ], - "depending": [ - 163, - 264 - ], - "removes": [ - 163 - ], - "seepage": [ - 163 - ], - "vain": [ - 164 - ], - "service": [ - 164, - 197, - 198, - 202, - 214 - ], - "discretion": [ - 164, - 207 - ], - "option": [ - 164 - ], - "heroic": [ - 164 - ], - "sacrifice": [ - 164 - ], - "options": [ - 164, - 222 - ], - "wish": [ - 164 - ], - "sell": [ - 164 - ], - "damnation": [ - 165, - 172 - ], - "organising": [ - 165 - ], - "needs": [ - 165, - 262 - ], - "nominated": [ - 165 - ], - "volunteers": [ - 165 - ], - "enthusiastic": [ - 165 - ], - "decided": [ - 165 - ], - "together": [ - 165, - 218 - ], - "session": [ - 165 - ], - "organised": [ - 165, - 200 - ], - "own": [ - 166 - ], - "confusion.": [ - 166 - ], - "military": [ - 166, - 167 - ], - "mantle": [ - 166 - ], - "envoys": [ - 166 - ], - "emissaries": [ - 166 - ], - "assassins": [ - 166, - 269 - ], - "offer": [ - 166, - 214 - ], - "guide": [ - 166 - ], - "fearsome": [ - 166 - ], - "complete": [ - 166, - 178 - ], - "rigid": [ - 166 - ], - "structure": [ - 166 - ], - "resorting": [ - 166 - ], - "chainswords": [ - 166 - ], - "orders": [ - 167, - 262 - ], - "issions": [ - 167 - ], - "staple": [ - 167 - ], - "basis": [ - 167 - ], - "defining": [ - 167 - ], - "adventures": [ - 167 - ], - "guidelines": [ - 167, - 181 - ], - "fashioning": [ - 167 - ], - "scenarios": [ - 167 - ], - "capture": [ - 167, - 171 - ], - "excitement": [ - 167 - ], - "clearly": [ - 167 - ], - "parameters": [ - 167 - ], - "completion": [ - 168 - ], - "(requisition).": [ - 168 - ], - "markers": [ - 168, - 169 - ], - "protecting": [ - 168 - ], - "blazing": [ - 168 - ], - "resolute": [ - 168 - ], - "recon": [ - 168 - ], - "gathering": [ - 168 - ], - "novice": [ - 168, - 170 - ], - "revolve": [ - 168 - ], - "procuring": [ - 168 - ], - "veteran": [ - 168, - 170, - 262 - ], - "stronghold": [ - 168 - ], - "code": [ - 168 - ], - "device": [ - 168 - ], - "greatest": [ - 168 - ], - "mankind": [ - 168, - 188, - 195, - 206, - 226 - ], - "immaterium": [ - 168 - ], - "watching": [ - 168 - ], - "waiting": [ - 168, - 262 - ], - "among": [ - 169, - 233 - ], - "relevant": [ - 169, - 223, - 224 - ], - "sections": [ - 169 - ], - "shared": [ - 169 - ], - "themes": [ - 169 - ], - "below": [ - 169, - 268 - ], - "exhaustive": [ - 169 - ], - "purchase": [ - 169 - ], - "collectively": [ - 169 - ], - "stock": [ - 169 - ], - "stealth": [ - 169, - 216 - ], - "9–4:": [ - 170 - ], - "strangers": [ - 170 - ], - "objectivedifficulty": [ - 170 - ], - "embark": [ - 170 - ], - "laden": [ - 170 - ], - "primary": [ - 170, - 171 - ], - "violence": [ - 170 - ], - "application": [ - 170 - ], - "firepowerfortunately": [ - 170 - ], - "tertiary": [ - 170, - 171, - 262, - 263 - ], - "spades": [ - 170 - ], - "outnumbered": [ - 170, - 283 - ], - "systems": [ - 170, - 195, - 215 - ], - "elimination": [ - 170, - 171 - ], - "sending": [ - 171 - ], - "assassin": [ - 171 - ], - "exterminating": [ - 171 - ], - "focused": [ - 171 - ], - "killing": [ - 171, - 210, - 253, - 273 - ], - "graded": [ - 171 - ], - "rescue": [ - 171, - 262 - ], - "agent": [ - 171 - ], - "deadliness": [ - 171 - ], - "recover": [ - 171, - 174 - ], - "artefact": [ - 171, - 180 - ], - "commander": [ - 171, - 196, - 200, - 202, - 218 - ], - "exterminate": [ - 171 - ], - "almost": [ - 171, - 186, - 200, - 271, - 280 - ], - "include": [ - 172, - 187, - 190, - 270 - ], - "atmosphere": [ - 172, - 204 - ], - "situation": [ - 172, - 187, - 190 - ], - "npcs": [ - 172, - 279 - ], - "factor": [ - 172 - ], - "disposition": [ - 172 - ], - "toward": [ - 172 - ], - "characterhow": [ - 172 - ], - "regards": [ - 172 - ], - "feelings": [ - 172 - ], - "lack": [ - 172 - ], - "displays": [ - 172 - ], - "captain": [ - 172, - 279 - ], - "davian": [ - 172 - ], - "thule": [ - 172 - ], - "demands": [ - 172 - ], - "dispositions": [ - 172 - ], - "01–20": [ - 173 - ], - "grips": [ - 173, - 176 - ], - "shake": [ - 173, - 182 - ], - "tremble": [ - 173 - ], - "21–40": [ - 174 - ], - "wits": [ - 174 - ], - "snapping": [ - 174, - 175, - 182 - ], - "backs": [ - 174 - ], - "away": [ - 174, - 176, - 202, - 271 - ], - "thing": [ - 174, - 199 - ], - "confronts": [ - 174 - ], - "willingly": [ - 174 - ], - "approach": [ - 174, - 232 - ], - "41–60": [ - 175 - ], - "frozen": [ - 175 - ], - "terror": [ - 175, - 181, - 192 - ], - "snaps": [ - 175, - 178 - ], - "61–80": [ - 176 - ], - "panic": [ - 176 - ], - "flee": [ - 176 - ], - "prevented": [ - 176 - ], - "snap": [ - 176, - 183 - ], - "fainting": [ - 176 - ], - "keels": [ - 176 - ], - "remains": [ - 176, - 264 - ], - "regains": [ - 176, - 183 - ], - "consciousness": [ - 176 - ], - "101–120": [ - 177 - ], - "shaken": [ - 177 - ], - "totally": [ - 177 - ], - "overcome": [ - 177 - ], - "screams": [ - 177 - ], - "vomits": [ - 177 - ], - "uncontrollably": [ - 177 - ], - "afterward": [ - 177 - ], - "laughs": [ - 177 - ], - "hysterically": [ - 177 - ], - "randomly": [ - 177 - ], - "near": [ - 177 - ], - "manic": [ - 177 - ], - "wildly": [ - 177 - ], - "131–140": [ - 178 - ], - "whatever": [ - 178, - 196, - 198, - 272 - ], - "crumples": [ - 178 - ], - "1d51": [ - 178 - ], - "sobbing": [ - 178 - ], - "babbling": [ - 178 - ], - "mess": [ - 178 - ], - "roused": [ - 178 - ], - "stops": [ - 178 - ], - "171+": [ - 179 - ], - "trauma": [ - 179 - ], - "noncombat": [ - 179, - 187 - ], - "61–90": [ - 180 - ], - "–20": [ - 180 - ], - "junctures": [ - 180 - ], - "weaken": [ - 180 - ], - "alliessuch": [ - 180 - ], - "inquisitorial": [ - 180 - ], - "91–99": [ - 181 - ], - "–30": [ - 181 - ], - "agents": [ - 181 - ], - "refuse": [ - 181 - ], - "accompany": [ - 181 - ], - "building": [ - 181, - 197 - ], - "chamber": [ - 181 - ], - "1-disturbing": [ - 182 - ], - "(0):": [ - 182 - ], - "viewing": [ - 182 - ], - "scene": [ - 182 - ], - "gruesome": [ - 182 - ], - "murder": [ - 182 - ], - "supernatural": [ - 182, - 183 - ], - "phenomenastrange": [ - 182 - ], - "lights": [ - 182 - ], - "weeping": [ - 182 - ], - "2-frightening": [ - 183 - ], - "(–10):": [ - 183 - ], - "meeting": [ - 183 - ], - "someone": [ - 183 - ], - "worn": [ - 183 - ], - "specified": [ - 183 - ], - "buried": [ - 183 - ], - "alive": [ - 183, - 204, - 233 - ], - "phenomenathe": [ - 183 - ], - "skies": [ - 183 - ], - "painting": [ - 183 - ], - "forming": [ - 183 - ], - "shrieking": [ - 183 - ], - "mouths": [ - 183 - ], - "shrugs": [ - 183 - ], - "3-horrifying": [ - 184 - ], - "(–20):": [ - 184 - ], - "sudden,": [ - 184 - ], - "shocking,": [ - 184 - ], - "inexplicable": [ - 184 - ], - "shuttle": [ - 184 - ], - "vomiting": [ - 184 - ], - "maggots": [ - 184 - ], - "revelation": [ - 185 - ], - "(finding": [ - 185 - ], - "yourself": [ - 185 - ], - "covered": [ - 185 - ], - "blood,": [ - 185 - ], - "meat": [ - 185 - ], - "cleaver": [ - 185 - ], - "rising": [ - 185 - ], - "hardened": [ - 185, - 198, - 220 - ], - "planet": [ - 185, - 191, - 264, - 271 - ], - "worst": [ - 185 - ], - "horrors": [ - 185 - ], - "4-terrifying": [ - 186 - ], - "(–30):": [ - 186 - ], - "experiencing": [ - 186 - ], - "full-": [ - 186 - ], - "raving": [ - 186 - ], - "lunatics": [ - 186 - ], - "scale": [ - 186 - ], - "incursion": [ - 186 - ], - "discovering": [ - 186 - ], - "murderous": [ - 186 - ], - "villains": [ - 186 - ], - "psychoconditioned": [ - 186 - ], - "responsible": [ - 186 - ], - "deaths": [ - 186 - ], - "millions": [ - 186, - 265 - ], - "staring": [ - 186 - ], - "brain": [ - 186 - ], - "suppresses": [ - 186 - ], - "discounts": [ - 186 - ], - "delusions": [ - 186 - ], - "attuned": [ - 186 - ], - "conflict": [ - 186, - 196, - 268 - ], - "facilities": [ - 186 - ], - "belief": [ - 186 - ], - "unreal": [ - 186 - ], - "intangible": [ - 186 - ], - "heightening": [ - 186 - ], - "unlike": [ - 186 - ], - "real": [ - 186 - ], - "flaws": [ - 186 - ], - "inherited": [ - 186 - ], - "else": [ - 186, - 259 - ], - "risk": [ - 187, - 268 - ], - "tainted": [ - 187 - ], - "applied": [ - 187, - 201 - ], - "loyal": [ - 188 - ], - "slave": [ - 188 - ], - "learns": [ - 188 - ], - "love": [ - 188 - ], - "lash": [ - 188 - ], - "look": [ - 188 - ], - "behold": [ - 188 - ], - "saying": [ - 188 - ], - "menials": [ - 188 - ], - "scriveners": [ - 188 - ], - "domain": [ - 188 - ], - "sacrificed": [ - 188 - ], - "spoken": [ - 188 - ], - "moved": [ - 188 - ], - "ascension": [ - 188 - ], - "mechanism": [ - 188, - 270 - ], - "golden": [ - 188 - ], - "lord": [ - 188 - ], - "skalaras": [ - 188 - ], - "high": [ - 188, - 196, - 224, - 226, - 234 - ], - "tribune": [ - 188 - ], - "censorial": [ - 188 - ], - "throne": [ - 188 - ], - "material": [ - 188 - ], - "binding": [ - 189 - ], - "transmit": [ - 189 - ], - "message": [ - 189, - 214 - ], - "distances": [ - 189 - ], - "tele": [ - 189 - ], - "pathic": [ - 189 - ], - "combines": [ - 189 - ], - "ofgain": [ - 189 - ], - "trai": [ - 189 - ], - "ning": [ - 189 - ], - "culminating": [ - 189 - ], - "ritu": [ - 189 - ], - "transferredclos": [ - 189 - ], - "greatness": [ - 189 - ], - "astropath": [ - 189 - ], - "transference": [ - 189 - ], - "traumat": [ - 189 - ], - "exterminatus": [ - 190 - ], - "espread": [ - 190 - ], - "uisi": [ - 190 - ], - "prevalent": [ - 190 - ], - "collusio": [ - 190 - ], - "occasion": [ - 190 - ], - "planindi": [ - 190 - ], - "etwide": [ - 190 - ], - "poss": [ - 190 - ], - "ibility": [ - 190 - ], - "solu": [ - 190 - ], - "tion": [ - 190 - ], - "rede": [ - 190 - ], - "vidu": [ - 190 - ], - "serve": [ - 190, - 215 - ], - "indi": [ - 190, - 201 - ], - "heretical": [ - 190, - 191 - ], - "prea": [ - 190 - ], - "inte": [ - 190 - ], - "rven": [ - 190 - ], - "grow": [ - 190 - ], - "extent": [ - 190 - ], - "strengthen": [ - 191 - ], - "sub": [ - 191 - ], - "vers": [ - 191 - ], - "ive": [ - 191 - ], - "cau": [ - 191 - ], - "ation": [ - 191 - ], - "segment": [ - 191 - ], - "population": [ - 191 - ], - "salv": [ - 191 - ], - "alarming": [ - 191 - ], - "overtly": [ - 191 - ], - "cove": [ - 191 - ], - "rtly": [ - 191 - ], - "crib": [ - 191 - ], - "spre": [ - 191 - ], - "resp": [ - 191 - ], - "onse": [ - 191 - ], - "worship": [ - 191 - ], - "pros": [ - 191 - ], - "system": [ - 191, - 195, - 204, - 217 - ], - "htheo": [ - 191 - ], - "aggressive": [ - 191 - ], - "populace": [ - 191 - ], - "erfu": [ - 191 - ], - "exam": [ - 191 - ], - "tact": [ - 191 - ], - "versive": [ - 191 - ], - "discouraging": [ - 191 - ], - "thre": [ - 191, - 201 - ], - "serv": [ - 191 - ], - "designs": [ - 191 - ], - "leaning": [ - 191 - ], - "contemplat": [ - 191 - ], - "erminatus": [ - 191 - ], - "eradication": [ - 191 - ], - "segementum": [ - 192, - 193, - 194 - ], - "obscurus": [ - 192 - ], - "baal": [ - 192 - ], - "cadia": [ - 192 - ], - "elysia": [ - 192 - ], - "darkhold": [ - 192 - ], - "preyspire": [ - 192 - ], - "hydraphur": [ - 192 - ], - "armageddon": [ - 192 - ], - "solar": [ - 192, - 195 - ], - "maelstrom": [ - 192 - ], - "bellicas": [ - 192 - ], - "terra": [ - 192, - 195 - ], - "ryza": [ - 192 - ], - "xenax": [ - 192 - ], - "ultima": [ - 193 - ], - "pacificus": [ - 193 - ], - "necromunda": [ - 193 - ], - "catachan": [ - 193 - ], - "macharia": [ - 193 - ], - "chogoris": [ - 193 - ], - "schindelgheist": [ - 193 - ], - "tallarn": [ - 193 - ], - "luther": [ - 193 - ], - "mcintyre": [ - 193 - ], - "solstice": [ - 193 - ], - "estus": [ - 193 - ], - "tempestus": [ - 194 - ], - "gryphonne": [ - 194 - ], - "rynns": [ - 194 - ], - "veiled": [ - 194 - ], - "ages": [ - 195 - ], - "millenniathe": [ - 195 - ], - "dominates": [ - 195 - ], - "civilisations": [ - 195 - ], - "colonised": [ - 195 - ], - "mars": [ - 195 - ], - "moons": [ - 195 - ], - "jupiter": [ - 195 - ], - "saturn": [ - 195 - ], - "neptune": [ - 195 - ], - "15th": [ - 195 - ], - "18th": [ - 195 - ], - "colonise": [ - 195 - ], - "sublight": [ - 195 - ], - "spacecraft": [ - 195, - 275 - ], - "reached": [ - 195 - ], - "colonies": [ - 195 - ], - "survive": [ - 195, - 214 - ], - "independent": [ - 195, - 215 - ], - "states": [ - 195 - ], - "separated": [ - 195 - ], - "generations": [ - 195 - ], - "22nd": [ - 195 - ], - "invention": [ - 195 - ], - "accelerates": [ - 195 - ], - "colonisation": [ - 195 - ], - "federations": [ - 195 - ], - "suppressions": [ - 196 - ], - "value": [ - 196, - 287 - ], - "city": [ - 196 - ], - "punitive": [ - 196 - ], - "launched": [ - 196 - ], - "strategic": [ - 196 - ], - "deny": [ - 196 - ], - "ranging": [ - 196 - ], - "security": [ - 196 - ], - "surrounding": [ - 196, - 232 - ], - "fought": [ - 196 - ], - "bombardment": [ - 196 - ], - "unleashing": [ - 196 - ], - "ordnance": [ - 196 - ], - "insurgent": [ - 196 - ], - "battleships": [ - 196 - ], - "orbit": [ - 196, - 262 - ], - "armies": [ - 196, - 197 - ], - "decide": [ - 196 - ], - "withheld": [ - 196 - ], - "possession": [ - 196 - ], - "succour": [ - 196 - ], - "chine": [ - 197 - ], - "militias": [ - 197 - ], - "inducteecadet": [ - 197 - ], - "fieldstrip": [ - 197 - ], - "myriad": [ - 197 - ], - "warzones": [ - 197 - ], - "accomplished": [ - 197, - 272 - ], - "regiment": [ - 197 - ], - "enormously": [ - 197 - ], - "consist": [ - 197 - ], - "redoubtable": [ - 197 - ], - "infantry": [ - 197, - 223, - 285 - ], - "fundaments": [ - 197 - ], - "verse": [ - 197 - ], - "abomination": [ - 198 - ], - "impervious": [ - 198 - ], - "attentions": [ - 198 - ], - "microbial": [ - 198 - ], - "recorded": [ - 198 - ], - "celebrated": [ - 198, - 199 - ], - "seek": [ - 198, - 259 - ], - "laurels": [ - 198 - ], - "purest": [ - 199 - ], - "impurit": [ - 199 - ], - "inherit": [ - 199 - ], - "othecaries": [ - 199 - ], - "uence": [ - 199 - ], - "afflicted": [ - 199 - ], - "conseq": [ - 199 - ], - "irst": [ - 199 - ], - "constantly": [ - 199 - ], - "arded": [ - 199 - ], - "ions": [ - 199 - ], - "counted": [ - 200 - ], - "bears": [ - 200 - ], - "resemblance": [ - 200 - ], - "regular": [ - 200 - ], - "mobile": [ - 200, - 233 - ], - "deployed": [ - 200 - ], - "focuses": [ - 200 - ], - "tailor": [ - 200 - ], - "fortresses": [ - 200 - ], - "empires": [ - 200 - ], - "oppose": [ - 200 - ], - "nighunstoppable": [ - 200 - ], - "invasions": [ - 200 - ], - "periodically": [ - 200 - ], - "unleash": [ - 200 - ], - "radicals": [ - 201 - ], - "puritans": [ - 201 - ], - "institution": [ - 201 - ], - "ntless": [ - 201 - ], - "viduals": [ - 201 - ], - "empowered": [ - 201 - ], - "ennia": [ - 201 - ], - "sees": [ - 201 - ], - "mill": [ - 201 - ], - "adherents": [ - 201 - ], - "beliefs": [ - 201 - ], - "doctrines": [ - 201 - ], - "emerged": [ - 201 - ], - "according": [ - 201 - ], - "opposite": [ - 201, - 272 - ], - "camps": [ - 201 - ], - "factions": [ - 201 - ], - "broadly": [ - 201 - ], - "eriu": [ - 201 - ], - "mercy": [ - 201 - ], - "regardle": [ - 201 - ], - "believe": [ - 201 - ], - "extermin": [ - 201 - ], - "shields": [ - 202 - ], - "bearing": [ - 202 - ], - "iconography": [ - 202 - ], - "entirely": [ - 202 - ], - "presen": [ - 202 - ], - "tradition": [ - 202 - ], - "pressed": [ - 202 - ], - "explain": [ - 202 - ], - "stio": [ - 202 - ], - "rarely": [ - 202 - ], - "shroud": [ - 202 - ], - "symbols": [ - 202 - ], - "hoods": [ - 202 - ], - "hide": [ - 202, - 266, - 269 - ], - "chapte": [ - 202 - ], - "disaster": [ - 202 - ], - "catechism": [ - 203 - ], - "unclean": [ - 203 - ], - "impure": [ - 203 - ], - "abhorred": [ - 203 - ], - "reviled": [ - 203 - ], - "hunted": [ - 203 - ], - "purged": [ - 203 - ], - "cleansed": [ - 203 - ], - "extract": [ - 203 - ], - "third": [ - 203 - ], - "book": [ - 203 - ], - "gate": [ - 203 - ], - "domains": [ - 203 - ], - "achilus": [ - 203 - ], - "disturb": [ - 204 - ], - "plains": [ - 204 - ], - "grey": [ - 204, - 234 - ], - "dust": [ - 204 - ], - "stellar": [ - 204 - ], - "debris": [ - 204 - ], - "planets": [ - 204, - 264, - 269 - ], - "footprints": [ - 204 - ], - "craters": [ - 204 - ], - "meteorites": [ - 204 - ], - "othe": [ - 204 - ], - "impressed": [ - 204 - ], - "survey": [ - 204 - ], - "teams": [ - 204 - ], - "ventured": [ - 204 - ], - "touched": [ - 204 - ], - "lain": [ - 204 - ], - "sixt": [ - 204 - ], - "plan": [ - 204 - ], - "tres": [ - 204 - ], - "records": [ - 204 - ], - "navigator": [ - 204 - ], - "circling": [ - 204 - ], - "ship": [ - 204, - 262, - 264, - 271 - ], - "erioch": [ - 204, - 264, - 273, - 279 - ], - "unle": [ - 204 - ], - "placed": [ - 204 - ], - "hadex": [ - 205 - ], - "anomaly": [ - 205 - ], - "charon": [ - 205 - ], - "profiteth": [ - 205 - ], - "loses": [ - 205 - ], - "dance": [ - 205 - ], - "terran": [ - 205 - ], - "proverb": [ - 205 - ], - "pleasure": [ - 205 - ], - "drown": [ - 205 - ], - "infernal": [ - 205 - ], - "night": [ - 205 - ], - "debased": [ - 205 - ], - "renegades": [ - 205 - ], - "banquet": [ - 205 - ], - "malfi": [ - 205 - ], - "barter": [ - 205, - 224, - 247 - ], - "samech": [ - 205 - ], - "outpost": [ - 205, - 262, - 268 - ], - "cellebos": [ - 205 - ], - "warzone": [ - 205 - ], - "exists": [ - 205 - ], - "aspects": [ - 205 - ], - "malefic": [ - 205 - ], - "sector": [ - 205 - ], - "tyranids": [ - 206 - ], - "nonplayer": [ - 206, - 223, - 279 - ], - "devastatingly": [ - 206 - ], - "cunning": [ - 206 - ], - "presence": [ - 206, - 268 - ], - "rabble": [ - 206 - ], - "reckoned": [ - 206 - ], - "tier": [ - 206 - ], - "terrifying": [ - 206 - ], - "built": [ - 206 - ], - "stood": [ - 206 - ], - "antagonists": [ - 206, - 274 - ], - "looked": [ - 206 - ], - "d10s": [ - 207 - ], - "affects": [ - 207 - ], - "proximity": [ - 208 - ], - "adjacent": [ - 208 - ], - "arbiter": [ - 208 - ], - "(18)": [ - 209 - ], - "(12)": [ - 209 - ], - "awaits": [ - 209, - 264 - ], - "price": [ - 209 - ], - "blindness": [ - 209 - ], - "proclamation": [ - 210 - ], - "khazant": [ - 210 - ], - "delivered": [ - 210 - ], - "apostle": [ - 210 - ], - "bellephrades": [ - 210 - ], - "princes": [ - 210 - ], - "incredibly": [ - 210 - ], - "entities": [ - 210 - ], - "nightmarish": [ - 210 - ], - "essence": [ - 210 - ], - "immortal": [ - 210 - ], - "scrutiny": [ - 210, - 224, - 226, - 247 - ], - "stuff": [ - 210 - ], - "embodied": [ - 210 - ], - "concentrated": [ - 210 - ], - "gothic": [ - 210, - 213, - 215, - 223, - 224, - 226, - 229, - 234 - ], - "tongue": [ - 210, - 213, - 223, - 247 - ], - "ambidextrous": [ - 210, - 215, - 231, - 253 - ], - "crushing": [ - 210, - 222 - ], - "loyalist": [ - 210 - ], - "preternatural": [ - 210 - ], - "pen": [ - 211, - 225 - ], - "felling,": [ - 211 - ], - "unwieldy).": [ - 211 - ], - "none": [ - 211, - 223, - 224, - 234, - 269 - ], - "despair": [ - 211 - ], - "saps": [ - 211 - ], - "finds": [ - 211 - ], - "imposed": [ - 211 - ], - "account": [ - 211 - ], - "survival": [ - 213, - 223, - 229, - 275 - ], - "soaked": [ - 213 - ], - "tide": [ - 213 - ], - "resistance": [ - 213, - 253 - ], - "flak": [ - 213, - 229 - ], - "robes": [ - 213, - 224 - ], - "brazen": [ - 213 - ], - "monoedged": [ - 213 - ], - "1d103": [ - 213, - 229 - ], - "autopistol": [ - 213 - ], - "s61d102": [ - 213 - ], - "gear:": [ - 214, - 268 - ], - "respirator,": [ - 214 - ], - "reloads": [ - 214, - 229, - 277 - ], - "autopistol.": [ - 214 - ], - "militia": [ - 214, - 222 - ], - "eventually": [ - 214 - ], - "allowed": [ - 214 - ], - "retire": [ - 214 - ], - "council": [ - 214 - ], - "advisors": [ - 214 - ], - "politics": [ - 214 - ], - "honourable": [ - 214 - ], - "peace": [ - 214 - ], - "product": [ - 214 - ], - "caste": [ - 214 - ], - "await": [ - 214 - ], - "(10)": [ - 215, - 215, - 275 - ], - "desirable": [ - 215 - ], - "carnage": [ - 215 - ], - "handto": [ - 215 - ], - "acrobatic": [ - 215 - ], - "empire": [ - 215, - 218 - ], - "preferring": [ - 215 - ], - "kroot": [ - 215, - 262, - 266, - 268, - 269 - ], - "weaponry": [ - 215, - 223 - ], - "authority": [ - 215 - ], - "dual": [ - 215 - ], - "brute": [ - 215 - ], - "targeting": [ - 215 - ], - "sprint": [ - 215 - ], - "autostabilised": [ - 215, - 231 - ], - "darksight": [ - 215, - 231 - ], - "flier": [ - 215, - 217, - 231 - ], - "enormous": [ - 215, - 220, - 283 - ], - "battlesuit": [ - 215 - ], - "(x2).": [ - 216, - 230, - 266, - 276 - ], - "xv15": [ - 216 - ], - "cannon": [ - 216, - 221 - ], - "incorporating": [ - 216 - ], - "generator": [ - 216 - ], - "microbead": [ - 216, - 217, - 218 - ], - "pulse": [ - 217, - 218, - 268 - ], - "carbine": [ - 217, - 218 - ], - "integrated": [ - 217 - ], - "drill": [ - 217, - 218 - ], - "carbines": [ - 217 - ], - "twinlinked": [ - 217, - 279, - 287 - ], - "builtin": [ - 217, - 253 - ], - "receiving": [ - 217 - ], - "instructions": [ - 217 - ], - "networked": [ - 217 - ], - "drone": [ - 217 - ], - "squadron": [ - 217 - ], - "statistics": [ - 217, - 234 - ], - "recalculated": [ - 217 - ], - "troops": [ - 217 - ], - "tauva": [ - 218 - ], - "courage": [ - 218 - ], - "withdrawal": [ - 218 - ], - "victorious": [ - 218 - ], - "rifle": [ - 218, - 266, - 268 - ], - "photovisor": [ - 218 - ], - "shadowsun": [ - 218 - ], - "wild": [ - 218 - ], - "talents:": [ - 220 - ], - "fearless,": [ - 220 - ], - "attack.": [ - 220 - ], - "horrifying": [ - 220 - ], - "talons": [ - 220 - ], - "synapse": [ - 220 - ], - "reinforced": [ - 220, - 222 - ], - "chitin": [ - 220, - 275 - ], - "1d1014": [ - 220 - ], - "1d1012": [ - 220 - ], - "razor": [ - 220, - 284 - ], - "devourer": [ - 220, - 221 - ], - "living": [ - 220, - 221 - ], - "spitter": [ - 220 - ], - "(10),": [ - 221 - ], - "snare,": [ - 221 - ], - "barbed": [ - 221 - ], - "strangler": [ - 221 - ], - "stranglethorn": [ - 221 - ], - "deathspitter": [ - 221 - ], - "fleshborer": [ - 221 - ], - "toxic": [ - 221, - 248, - 286 - ], - "venom": [ - 221 - ], - "100m": [ - 221, - 229 - ], - "3d105": [ - 221 - ], - "4d1010": [ - 221 - ], - "victim’s": [ - 222 - ], - "diamond": [ - 222 - ], - "hard": [ - 222 - ], - "growths": [ - 222 - ], - "ceramite": [ - 222 - ], - "ripping": [ - 222 - ], - "thickest": [ - 222 - ], - "frightening": [ - 222 - ], - "modifying": [ - 222 - ], - "presented": [ - 222, - 223, - 279 - ], - "modified": [ - 222 - ], - "variations": [ - 222 - ], - "profiles": [ - 222, - 223 - ], - "adjustments": [ - 222 - ], - "renegade": [ - 222 - ], - "are": [ - 223 - ], - "imperium!”": [ - 223 - ], - "hektor": [ - 223 - ], - "voss": [ - 223 - ], - "hyrkan": [ - 223 - ], - "outworld": [ - 223 - ], - "ridge": [ - 223 - ], - "local": [ - 223 - ], - "entries": [ - 223 - ], - "daily": [ - 223 - ], - "occupation": [ - 223 - ], - "encountered": [ - 223 - ], - "improvised": [ - 223 - ], - "1d101": [ - 223 - ], - "pertinent": [ - 224 - ], - "office": [ - 224 - ], - "seal": [ - 224 - ], - "serfdom": [ - 224 - ], - "balanced,": [ - 225, - 277 - ], - "tearing).": [ - 225, - 277 - ], - "commlink": [ - 225, - 227 - ], - "respirator": [ - 225, - 229 - ], - "guardsman": [ - 226 - ], - "expanded": [ - 226 - ], - "chiefly": [ - 226 - ], - "disciplined": [ - 226, - 229 - ], - "mass": [ - 226 - ], - "soldiery": [ - 226 - ], - "numbers": [ - 226, - 285 - ], - "chief": [ - 226 - ], - "uniform": [ - 226 - ], - "tactica": [ - 226 - ], - "imperialis": [ - 226 - ], - "equipped": [ - 226 - ], - "motivated": [ - 226 - ], - "15;": [ - 227 - ], - "full;": [ - 227 - ], - "reliable).": [ - 227 - ], - "medals": [ - 227 - ], - "dataslate": [ - 227, - 234 - ], - "encrypted": [ - 227, - 233 - ], - "officer": [ - 227 - ], - "navigation": [ - 228, - 275 - ], - "monotask": [ - 228 - ], - "eriochpattern": [ - 228 - ], - "1d56": [ - 229 - ], - "sticks": [ - 229 - ], - "infantrymans": [ - 229 - ], - "uplifting": [ - 229 - ], - "primer": [ - 229 - ], - "servofist": [ - 230, - 231 - ], - "servoskull": [ - 230 - ], - "technomat": [ - 231, - 234 - ], - "plus": [ - 231 - ], - "armament": [ - 231 - ], - "per10": [ - 231 - ], - "armourplated": [ - 231 - ], - "servofists": [ - 231 - ], - "sturdy": [ - 231 - ], - "puny": [ - 231, - 286 - ], - "51-70": [ - 232 - ], - "interior": [ - 232 - ], - "shrikes": [ - 232 - ], - "sweep": [ - 232 - ], - "exterior": [ - 232 - ], - "hormagaunts": [ - 232 - ], - "splinter": [ - 232 - ], - "swarm": [ - 232 - ], - "current": [ - 232, - 233, - 248 - ], - "detect": [ - 232, - 248 - ], - "arrives": [ - 232 - ], - "comprises": [ - 232 - ], - "termagants": [ - 232 - ], - "brood": [ - 232 - ], - "countdown": [ - 232 - ], - "towards": [ - 232, - 269 - ], - "extraction": [ - 232 - ], - "†includes": [ - 233 - ], - "datacore": [ - 233 - ], - "chained": [ - 233 - ], - "belt": [ - 233 - ], - "spare": [ - 233 - ], - "flask": [ - 233 - ], - "ists": [ - 233 - ], - "inferno": [ - 233 - ], - "cipher": [ - 233 - ], - "keys": [ - 233 - ], - "portable": [ - 233 - ], - "bioauspex": [ - 233 - ], - "vyakais": [ - 233 - ], - "machineparts": [ - 233 - ], - "magos": [ - 233 - ], - "vyakai": [ - 233 - ], - "programmed": [ - 233 - ], - "mechanisms": [ - 233 - ], - "biologis": [ - 233 - ], - "repute": [ - 233 - ], - "health": [ - 233 - ], - "marked": [ - 233 - ], - "fellows": [ - 233 - ], - "tantalus": [ - 233 - ], - "opportunity": [ - 233, - 255 - ], - "sanders": [ - 234 - ], - "pyroclast": [ - 234 - ], - "insulated": [ - 234 - ], - "bodyglove": [ - 234 - ], - "adepts": [ - 234 - ], - "gamma9": [ - 234 - ], - "portrayed": [ - 234 - ], - "robe": [ - 234 - ], - "pocket": [ - 234 - ], - "tabulator": [ - 234 - ], - "encoder": [ - 234 - ], - "exhausted": [ - 234 - ], - "desperate": [ - 234 - ], - "index": [ - 235, - 238, - 241, - 245, - 249, - 256, - 258 - ], - "roleplay": [ - 241 - ], - "+20%": [ - 247 - ], - "blather": [ - 247 - ], - "_______________________": [ - 247, - 248 - ], - "______________________________________": [ - 248 - ], - "heartossmodulabiscopea": [ - 248 - ], - "suspended": [ - 248 - ], - "animation": [ - 248 - ], - "_________________________": [ - 248 - ], - "oolotic": [ - 248 - ], - "kidney": [ - 248 - ], - "poisons": [ - 248 - ], - "toxins": [ - 248 - ], - "neuroglottis": [ - 248 - ], - "toxin": [ - 248 - ], - "periods": [ - 248 - ], - "additions": [ - 249 - ], - "(31-70)": [ - 251 - ], - "servoaugmented": [ - 253 - ], - "musculature": [ - 253 - ], - "autosenses": [ - 253 - ], - "photon": [ - 253 - ], - "flash": [ - 253 - ], - "stun": [ - 253 - ], - "grenades": [ - 253, - 268 - ], - "____________________________": [ - 253 - ], - "bulging": [ - 253 - ], - "biceps": [ - 253 - ], - "magboots": [ - 253 - ], - "nutrient": [ - 253 - ], - "recycling": [ - 253 - ], - "operate": [ - 253 - ], - "weeks": [ - 253 - ], - "resupply": [ - 253 - ], - "recoil": [ - 253 - ], - "1handed": [ - 253 - ], - "quick": [ - 253 - ], - "(pg": [ - 255 - ], - "219)": [ - 255 - ], - "concentrates": [ - 255 - ], - "suppressing": [ - 255 - ], - "crosses": [ - 255 - ], - "concert": [ - 255 - ], - "rushes": [ - 255 - ], - "unison": [ - 255 - ], - "defensive": [ - 255 - ], - "stances": [ - 255 - ], - "designation:": [ - 256 - ], - "cohesion:": [ - 257 - ], - "supreme": [ - 259 - ], - "genetically": [ - 259 - ], - "enhanced": [ - 259 - ], - "engineered": [ - 259 - ], - "ultimate": [ - 259 - ], - "stronger": [ - 259 - ], - "tougherand": [ - 259 - ], - "deadlierthan": [ - 259 - ], - "alienhunters": [ - 259 - ], - "accomplish": [ - 259 - ], - "confront": [ - 259 - ], - "possesseschallenges": [ - 259 - ], - "defeat": [ - 259, - 262, - 263 - ], - "isbn:\b978-1-58994-778-8": [ - 260 - ], - "wwwfantasyflightgamescom": [ - 260, - 281 - ], - "(novice": [ - 262 - ], - "objective,": [ - 262, - 263, - 264 - ], - "requisition)": [ - 262, - 263, - 264 - ], - "spear": [ - 262, - 263, - 264, - 273 - ], - "greatly": [ - 262 - ], - "idle": [ - 262, - 273 - ], - "jaresh": [ - 262 - ], - "included": [ - 262 - ], - "calculation": [ - 262 - ], - "beacon": [ - 262, - 273 - ], - "signal": [ - 262 - ], - "retrieval": [ - 262 - ], - "crazed": [ - 262, - 273 - ], - "dane": [ - 262, - 268, - 274 - ], - "pilots": [ - 262 - ], - "epsilon": [ - 262, - 273 - ], - "explicit": [ - 262 - ], - "depart": [ - 262 - ], - "feral": [ - 262 - ], - "extremely": [ - 263 - ], - "persuasion": [ - 263 - ], - "convince": [ - 263 - ], - "except": [ - 263, - 268 - ], - "(veteran": [ - 264 - ], - "modify": [ - 264 - ], - "starting": [ - 264 - ], - "evaluations": [ - 264 - ], - "requisitioned": [ - 264 - ], - "issued": [ - 264 - ], - "speeder": [ - 264 - ], - "transport": [ - 264, - 271 - ], - "larger": [ - 264 - ], - "custody": [ - 264 - ], - "luminators": [ - 264 - ], - "oathtaking": [ - 264 - ], - "custom": [ - 264 - ], - "departure": [ - 264 - ], - "hunterclass": [ - 264 - ], - "frigate": [ - 264 - ], - "kilometrelong": [ - 264 - ], - "(8)": [ - 265, - 265, - 275 - ], - "aerofoil": [ - 265 - ], - "cuts": [ - 265 - ], - "dimensional": [ - 265 - ], - "projection": [ - 265 - ], - "clouds": [ - 265 - ], - "northeast": [ - 265, - 269 - ], - "continent": [ - 265, - 269 - ], - "hives": [ - 265 - ], - "battleravaged": [ - 265 - ], - "rockscapes": [ - 265 - ], - "baraban": [ - 265 - ], - "strikingly": [ - 265 - ], - "untouched": [ - 265 - ], - "warring": [ - 265 - ], - "canopy": [ - 265 - ], - "rippling": [ - 265 - ], - "blue": [ - 265 - ], - "ocean": [ - 265 - ], - "bordering": [ - 265 - ], - "landmasss": [ - 265 - ], - "collage": [ - 265 - ], - "blanket": [ - 265 - ], - "autumn": [ - 265 - ], - "colours": [ - 265 - ], - "surrounds": [ - 265 - ], - "(x2),": [ - 266 - ], - "obscuring": [ - 266 - ], - "branches": [ - 266 - ], - "110m": [ - 266 - ], - "shattered": [ - 266 - ], - "frantic": [ - 266 - ], - "full),": [ - 267 - ], - "beak": [ - 267, - 268, - 269 - ], - "(1d5+8": [ - 267 - ], - "primitive).": [ - 267 - ], - "overwhelming": [ - 267 - ], - "reloads.": [ - 268 - ], - "rifles": [ - 268 - ], - "kroots": [ - 268 - ], - "follows": [ - 268 - ], - "four": [ - 268, - 287 - ], - "frag": [ - 268 - ], - "bursts": [ - 268 - ], - "intervene": [ - 268 - ], - "revealing": [ - 268 - ], - "overrun": [ - 268 - ], - "participate": [ - 268 - ], - "unable": [ - 268 - ], - "(x2)": [ - 269 - ], - "tattered": [ - 269 - ], - "southeast": [ - 269 - ], - "ecology": [ - 269 - ], - "1d1010": [ - 269, - 276 - ], - "trees": [ - 269, - 270 - ], - "summer": [ - 269 - ], - "1d510": [ - 269 - ], - "strongest": [ - 269 - ], - "landmass": [ - 269 - ], - "delirium": [ - 269 - ], - "trellis": [ - 269, - 270, - 271, - 273 - ], - "located": [ - 269 - ], - "hundred": [ - 269 - ], - "kilometres": [ - 269 - ], - "vertical": [ - 269 - ], - "largest": [ - 269 - ], - "installations": [ - 269 - ], - "minus": [ - 270 - ], - "wielder’s": [ - 270 - ], - "minutes.": [ - 270 - ], - "alerting": [ - 270 - ], - "pulverise": [ - 270 - ], - "events": [ - 270 - ], - "transpiring": [ - 270 - ], - "madness": [ - 270, - 272, - 274 - ], - "entwining": [ - 270 - ], - "avenues": [ - 270 - ], - "communication": [ - 270 - ], - "telling": [ - 270 - ], - "general’s": [ - 271 - ], - "carve": [ - 271 - ], - "portion": [ - 271 - ], - "trunks": [ - 271 - ], - "arriving": [ - 271 - ], - "late": [ - 271 - ], - "finding": [ - 271 - ], - "expose": [ - 271 - ], - "successes": [ - 271 - ], - "gone": [ - 271 - ], - "certainly": [ - 271 - ], - "produce": [ - 271 - ], - "melta": [ - 271 - ], - "clash": [ - 271 - ], - "rewards.": [ - 272, - 273 - ], - "operation": [ - 272 - ], - "attempting": [ - 272 - ], - "carries": [ - 272 - ], - "meaningful": [ - 272 - ], - "outcome": [ - 272 - ], - "respectable": [ - 272 - ], - "effort": [ - 272, - 273 - ], - "shade": [ - 272 - ], - "longrange": [ - 273 - ], - "nets": [ - 273 - ], - "rescued": [ - 273 - ], - "worth": [ - 273 - ], - "defeating": [ - 273 - ], - "retrieve": [ - 273 - ], - "sitting": [ - 273 - ], - "mount": [ - 273 - ], - "hollow": [ - 273 - ], - "them,": [ - 274 - ], - "spirit’s": [ - 274 - ], - "skill.": [ - 274 - ], - "vespid": [ - 274, - 275 - ], - "stingwing": [ - 274 - ], - "initiate": [ - 274 - ], - "ciphers": [ - 275 - ], - "runes": [ - 275 - ], - "chainsword": [ - 276 - ], - "demeanours": [ - 277 - ], - "accept": [ - 277 - ], - "studious": [ - 277 - ], - "300m": [ - 277 - ], - "6d1010": [ - 277 - ], - "2full)": [ - 278 - ], - "turbolaser": [ - 278 - ], - "750m": [ - 278 - ], - "4d1030": [ - 278 - ], - "reloaded": [ - 279 - ], - "flight,": [ - 279 - ], - "(6)": [ - 279 - ], - "hellstrike": [ - 279 - ], - "missiles": [ - 279 - ], - "1000m": [ - 279 - ], - "4d106": [ - 279 - ], - "missile": [ - 279, - 283 - ], - "150m": [ - 279 - ], - "3d101": [ - 279 - ], - "2full": [ - 279 - ], - "operated": [ - 279 - ], - "gunships": [ - 279 - ], - "appendix": [ - 279 - ], - "friendly": [ - 279 - ], - "exception": [ - 279 - ], - "servais": [ - 279 - ], - "conflicted": [ - 279 - ], - "matters": [ - 279 - ], - "strategy": [ - 279 - ], - "philosophy": [ - 279 - ], - "personality": [ - 279 - ], - "diametric": [ - 279 - ], - "stack": [ - 280 - ], - "odds": [ - 280 - ], - "favour.": [ - 280 - ], - "negotiate": [ - 280 - ], - "violent": [ - 280 - ], - "mistrust": [ - 280 - ], - "wherever": [ - 280 - ], - "adventure": [ - 280 - ], - "seeds": [ - 280 - ], - "wasteland": [ - 280 - ], - "filled": [ - 280 - ], - "orks": [ - 280 - ], - "transmission": [ - 280 - ], - "farflung": [ - 280 - ], - "station": [ - 280 - ], - "resolviate": [ - 280 - ], - "grace": [ - 280 - ], - "beginnings": [ - 280 - ], - "enslaver": [ - 280 - ], - "plague": [ - 280 - ], - "remote": [ - 280 - ], - "intact": [ - 280 - ], - "crisis": [ - 280 - ], - "central": [ - 280 - ], - "eager": [ - 280 - ], - "learn": [ - 280 - ], - "encroaching": [ - 280 - ], - "cogitator": [ - 280 - ], - "severely": [ - 280 - ], - "quist": [ - 280 - ], - "requests": [ - 280 - ], - "species": [ - 280 - ], - "linkage": [ - 280 - ], - "tarran": [ - 280 - ], - "joins": [ - 280 - ], - "assassination": [ - 280 - ], - "answering": [ - 280 - ], - "isbn:": [ - 281 - ], - "978-1-58994-779-5": [ - 281 - ], - "insigniadeviceslogossymbols": [ - 281 - ], - "infernus": [ - 282 - ], - "2d108": [ - 282 - ], - "raditional": [ - 282 - ], - "hellish": [ - 282 - ], - "†††": [ - 283 - ], - "lascannon": [ - 283 - ], - "tanks": [ - 283 - ], - "250m": [ - 283 - ], - "+10": [ - 284 - ], - "weapon’s": [ - 285 - ], - "penetration.": [ - 285 - ], - "prone": [ - 285 - ], - "mowing": [ - 285 - ], - "recharge": [ - 285 - ], - "everyother": [ - 285 - ], - "higher": [ - 285 - ], - "fatigued": [ - 285 - ], - "individually": [ - 285 - ], - "tearing:": [ - 286 - ], - "flakboard": [ - 286 - ], - "braced": [ - 286, - 287 - ], - "haywire": [ - 286 - ], - "generates": [ - 286 - ], - "troubles": [ - 286 - ], - "(no": [ - 287 - ], - "toughness).": [ - 287 - ], - "correct": [ - 287 - ], - "scatter": [ - 287 - ], - "diagram": [ - 287 - ], - "dodging": [ - 287 - ] - }, - "metadata": { - "totalRules": 288, - "sources": [ - { - "name": "Core Rulebook", - "abbr": "CR" - }, - { - "name": "Game Master's Kit", - "abbr": "GMK" - } - ], - "categories": [ - "general", - "psychic", - "skills", - "talents", - "combat", - "weapons", - "equipment" - ], - "lastUpdated": "2025-08-16T06:04:01.668Z" - } + ] } \ No newline at end of file diff --git a/database/scripts/clean_rules.py b/database/scripts/clean_rules.py new file mode 100644 index 0000000..4f72ebf --- /dev/null +++ b/database/scripts/clean_rules.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 +"""Clean up the rules database: remove duplicates, OCR artifacts, and noise.""" + +import json +import re +import sys +from collections import Counter + +INPUT = "database/rules/rules-database.json" +OUTPUT = "database/rules/rules-database-cleaned.json" + +def is_noise(content): + """Return True if content is likely OCR noise.""" + text = content.strip() + if len(text) < 10: + return True + # Only symbols/whitespace + if re.sub(r'[\s™®©—–‘’“”•‣…​‌‍]', '', text).strip() == "": + return True + # Only page numbers + if re.match(r'^\s*\d+\s*$', text): + return True + # Only index entries + if text.lower() == "index": + return True + return False + +def is_credits(content): + """Return True if content is credits/copyright.""" + text = content.lower() + return any(kw in text for kw in [ + "credits", "designed by", "lead developer", "art direction", + "production manager", "game designer", "game producer", + "publisher", "licensing", "graphic design", + "cover art", "copyright", "game workshop", + "ffg", "fantasy flight games", + ]) + +def is_page_header(content): + """Return True if content looks like a page header/number.""" + text = content.strip() + # Page number lines like "88 —" or "165 115" + if re.match(r'^\d+\s*(—|—\s*\d+)?$', text): + return True + # "GAME?" or "GAME? (p.X" + if re.match(r'^GAME\?\s*\(p\.', text): + return True + return False + +def fix_title(title): + """Fix common OCR title issues.""" + # Remove leading/trailing whitespace and control chars + title = title.strip() + # Remove control characters + title = re.sub(r'[\x00-\x1f\x7f]', '', title).strip() + # Fix "GAME?" -> "GAME" + title = re.sub(r'^GAME\?', 'GAME', title) + # Fix "fellowShip" -> "Fellowship" + title = re.sub(r'^(fel)\s*\(', r'\1 (', title, flags=re.IGNORECASE) + # Fix "balliStiC" -> "Ballistic" + title = re.sub(r'^(balliStiC)\s*Skill', r'Ballistic Skill', title, flags=re.IGNORECASE) + # Fix "perCeption" -> "Perception" + title = re.sub(r'^(perCeption)', r'Perception', title, flags=re.IGNORECASE) + # Fix "ExaMple" -> "Example" + title = re.sub(r'^(exaMple)', r'Example', title, flags=re.IGNORECASE) + # Fix "s" on its own line + if title.strip() == "s": + return None + # Fix "88 —" or "165 115" style page numbers + if re.match(r'^\d+\s*(—|—\s*\d+)?$', title): + return None + # Fix "therefore, and you will know no fear." (p.34, Core Rulebook) + if re.match(r'^.*\(p\.\d+,\s*(Core Rulebook|Game Master\'s Kit)\)\s*$', title): + return None + # Fix "— (p.XX, Source)" + if re.match(r'^—\s*\(p\.\d+,\s*(Core Rulebook|Game Master\'s Kit)\)\s*$', title): + return None + return title + +def dedup_rules(rules): + """Remove duplicate rules, keeping the one with the most content.""" + seen = {} + kept = [] + removed = [] + + for rule in rules: + title = fix_title(rule.get('title', '')) + if title is None: + removed.append(('title_fix_none', rule)) + continue + + key = title.strip().lower() + content = rule.get('content', '') + + if key in seen: + existing = seen[key] + if len(content) > len(existing.get('content', '')): + removed.append(('duplicate', existing)) + seen[key] = rule + else: + removed.append(('duplicate', rule)) + else: + seen[key] = rule + + # Update titles in the kept rules + for rule in seen.values(): + rule['title'] = fix_title(rule.get('title', '')) + + return list(seen.values()), removed + +def main(): + with open(INPUT) as f: + data = json.load(f) + + rules = data['rules'] + print(f"Loaded {len(rules)} rules") + + # Phase 1: Remove noise + noise_rules = [r for r in rules if is_noise(r.get('content', ''))] + credits_rules = [r for r in rules if is_credits(r.get('content', ''))] + header_rules = [r for r in rules if is_page_header(r.get('content', ''))] + + print(f"\nNoise (short/symbols): {len(noise_rules)}") + print(f"Credits/copyright: {len(credits_rules)}") + print(f"Page headers: {len(header_rules)}") + + # Phase 2: Dedup + deduped, dups = dedup_rules(rules) + print(f"\nDuplicates removed: {len(dups)}") + + # Phase 3: Combine noise removal + cleaned = [] + for r in deduped: + content = r.get('content', '') + if is_noise(content) or is_credits(content) or is_page_header(content): + continue + cleaned.append(r) + + print(f"\nFinal count: {len(cleaned)} (was {len(rules)})") + print(f"Removed: {len(rules) - len(cleaned)}") + + # Show what was removed + print("\n--- Removed rules ---") + for reason, r in dups: + print(f" [{reason}] {r.get('title', '?')[:60]}") + for r in noise_rules + credits_rules + header_rules: + if r not in cleaned: + print(f" [noise] {r.get('title', '?')[:60]}") + + # Write output + out = {'rules': cleaned} + with open(OUTPUT, 'w') as f: + json.dump(out, f, indent=2, ensure_ascii=False) + + print(f"\nWrote cleaned rules to {OUTPUT}") + + # Show category breakdown + from collections import Counter + cats = Counter(r.get('category', 'unknown') for r in cleaned) + print("\nCategories:") + for c, n in cats.most_common(): + print(f" {c}: {n}") + +if __name__ == '__main__': + main() diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..074ae03 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,16 @@ +# Generated docs +*.generated.md +*.backup.md + +# Environment files +.env +.env.local + +# IDE files +.idea/ +.vscode/ +*.swp +*.swo + +# Logs +*.log diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 0000000..26c84ef --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,39 @@ +# Changelog + +All notable changes to Deathwatch Roller will be documented in this file. + +## [Unreleased] + +### Added +- New quick reference printable rulesheets +- Expanded bestiary search functionality +- Improved player management interface + +### Changed +- Refactored authentication middleware +- Updated database schema for better indexing +- Improved error messages + +### Fixed +- Resolved login session expiration issue +- Fixed shop filter not working correctly +- Corrected bestiary search results + +## [0.1.0] - 2025-08-16 + +### Added +- Initial release of Deathwatch Roller +- Player management system +- Shop and inventory tracking +- Session tracking features +- Bestiary reference +- Rules database +- GM Kit utilities + +### Changed +- Set up basic project structure +- Implemented authentication system +- Created database schema + +### Fixed +- Initial bug fixes and improvements diff --git a/docs/PROJECT_STRUCTURE.md b/docs/PROJECT_STRUCTURE.md new file mode 100644 index 0000000..a3ec47a --- /dev/null +++ b/docs/PROJECT_STRUCTURE.md @@ -0,0 +1,121 @@ +# Project Structure + +## Directory Layout + +``` +dwroller/ +├── backend/ # Backend API server +│ ├── src/ +│ │ ├── routes/ # API route handlers +│ │ ├── controllers/ # Route controllers +│ │ ├── middleware/ # Auth, validation middleware +│ │ ├── models/ # Data models +│ │ └── utils/ # Helper functions +│ ├── server.js # Express server entry point +│ └── package.json +│ +├── frontend/ # React frontend application +│ ├── src/ +│ │ ├── components/ # React components +│ │ ├── pages/ # Route pages +│ │ ├── hooks/ # Custom React hooks +│ │ └── store/ # State management +│ ├── public/ # Static assets +│ ├── package.json +│ └── vite.config.js +│ +├── data/ # Static data files +│ ├── gamemasters_kit/ # GM tools +│ ├── ocr_rules_*.txt # OCR extracted rules +│ ├── rules_page.png # Rules images +│ └── dwback.png # Background images +│ +├── database/ # Database files +│ ├── backups/ # Database backups +│ ├── MIGRATION_*.md # Migration documentation +│ └── alexei-*.json # Canonical data +│ +├── docs/ # This documentation +│ ├── SUMMARY.md # Table of contents +│ ├── api.md # API documentation +│ ├── developer-guide.md +│ ├── user-guide.md +│ └── ... +│ +├── .env.example # Environment template +├── package.json # Root package.json +└── README.md # Project overview +``` + +## Feature Architecture + +``` +┌─────────────────────────────────────────────────────────┐ +│ Deathwatch Roller │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Frontend │───▶│ API │───▶│ Database │ │ +│ │ (React) │ │ (Express) │ │ (SQLite) │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ - Shop - Auth - Players │ +│ - Bestiary - Sessions - Inventory │ +│ - Rules - Files - Webhooks │ +│ - Sessions - Validation - Backups │ +└─────────────────────────────────────────────────────────┘ +``` + +## Data Flow + +``` +User Request + │ + ▼ +┌───────────┐ +│ Frontend │ +│ (React) │ +└───────────┘ + │ + ├──────────────┬──────────────┐ + ▼ ▼ ▼ +┌─────────┐ ┌─────────┐ ┌─────────┐ +│ Shop │ │ Bestiary│ │ Sessions│ +│ API │ │ API │ │ API │ +└─────────┘ └─────────┘ └─────────┘ + │ │ │ + └──────────────┴──────────────┘ + │ + ▼ + ┌───────────┐ + │ Backend │ + │ (Express) │ + └───────────┘ + │ + ▼ + ┌───────────┐ + │ Database │ + │ (SQLite) │ + └───────────┘ +``` + +## File Organization by Feature + +### Shop/Inventory +- `backend/src/routes/shop/` - Shop API routes +- `backend/src/models/Item/` - Item model +- `backend/src/controllers/shop/` - Shop controller +- `frontend/src/components/Shop/` - Shop UI components + +### Bestiary +- `backend/src/routes/bestiary/` - Bestiary routes +- `backend/src/models/Creature/` - Creature model +- `backend/src/controllers/bestiary/` - Bestiary controller +- `frontend/src/components/Bestiary/` - Bestiary UI + +### Players +- `backend/src/routes/players/` - Player routes +- `backend/src/models/Player/` - Player model +- `backend/src/controllers/players/` - Player controller +- `frontend/src/components/Players/` - Player UI (GM only) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..3a9b6f0 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,52 @@ +# Deathwatch Roller Documentation + +## Overview + +This documentation covers the Deathwatch Roller application - a React-based web app for managing Deathwatch tabletop RPG sessions. + +## Getting Started + +- [Quick Start Guide](./quick-start.md) - Installation and setup +- [User Guide](./user-guide.md) - Features and how to use the app +- [API Documentation](./api.md) - REST API reference +- [Developer Guide](./developer-guide.md) - Contributing to the project +- [Troubleshooting](./troubleshooting.md) - Common issues and solutions +- [Security Guide](./security.md) - Security best practices +- [PM2 Configuration](./pm2.md) - Production deployment + +## Project Structure + +``` +dwroller/ +├── backend/ # Backend API server +├── frontend/ # React frontend application +├── data/ # Static data and assets +├── database/ # Database backups and migrations +└── docs/ # This documentation +``` + +## Key Features + +- **Player Management** - Full CRUD operations for player accounts +- **Requisition Shop** - Browse and purchase items with RP +- **Session Tracking** - Track game sessions and player progress +- **GM Kit** - Game Master tools and utilities +- **Bestiary** - Monster and enemy reference +- **Rules Database** - Searchable rules and mechanics + +## API Endpoints + +| Endpoint | Description | +|----------|-------------| +| `GET /api/players` | Get all players | +| `POST /api/players/gm/*` | GM-only operations | +| `GET /api/shop` | Get shop inventory | +| `GET /api/bestiary` | Get bestiary data | + +## Contributing + +See [Contributing Guide](./contributing.md) for details on how to contribute. + +## License + +MIT License - See [LICENSE](../../LICENSE) for details. diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..0ea13e7 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,407 @@ +# API Documentation + +## Base URL + +``` +http://localhost:5000/api +``` + +## Authentication + +Most endpoints require authentication via session cookies. + +### Session Management + +```bash +# Login (example) +POST /api/auth/login +Content-Type: application/json + +{ + "email": "player@example.com", + "password": "secret" +} +``` + +## Players Endpoints + +### Get All Players + +```bash +GET /api/players +``` + +**Response:** + +```json +[ + { + "id": 1, + "name": "Player One", + "xp": 1500, + "rp": 500, + "renown": 10, + "createdAt": "2025-08-16T10:00:00Z" + } +] +``` + +### Create Player (GM Only) + +```bash +POST /api/players +Authorization: Bearer {gm-token} +``` + +**Request:** + +```json +{ + "name": "New Player", + "xp": 0, + "rp": 100, + "renown": 0 +} +``` + +### Update Player + +```bash +PUT /api/players/:id +Authorization: Bearer {gm-token} +``` + +**Request:** + +```json +{ + "xp": 1600, + "rp": 600 +} +``` + +### Delete Player (GM Only) + +```bash +DELETE /api/players/:id +Authorization: Bearer {gm-token} +``` + +### Reset Password + +```bash +POST /api/players/:id/reset-password +Authorization: Bearer {gm-token} +``` + +## Shop Endpoints + +### Get Shop Inventory + +```bash +GET /api/shop +``` + +**Response:** + +```json +[ + { + "id": 1, + "name": "Blade", + "type": "weapon", + "cost": 100, + "stats": { + "damage": "1d10", + "weight": 3 + } + } +] +``` + +### Purchase Item + +```bash +POST /api/shop/purchase +``` + +**Request:** + +```json +{ + "itemId": 1, + "quantity": 1 +} +``` + +### Get Player Inventory + +```bash +GET /api/inventory +``` + +**Response:** + +```json +[ + { + "itemId": 1, + "item": { + "name": "Blade", + "stats": {...} + }, + "quantity": 1 + } +] +``` + +## Bestiary Endpoints + +### Get All Creatures + +```bash +GET /api/bestiary +``` + +**Response:** + +```json +[ + { + "id": 1, + "name": "Ghoul", + "type": "abomination", + "hp": 45, + "armor": 10, + "weaknesses": ["acid", "piercing"], + "description": "Corrupted abomination..." + } +] +``` + +### Get Creature by ID + +```bash +GET /api/bestiary/:id +``` + +### Search Creatures + +```bash +GET /api/bestiary/search?query=ghoul&type=abomination +``` + +## Rules Endpoints + +### Search Rules + +```bash +GET /api/rules/search?query=damage +``` + +**Response:** + +```json +[ + { + "title": "Damage Mechanics", + "content": "...", + "page": "combat_damage" + } +] +``` + +### Get Rules Page + +```bash +GET /api/rules/page/:pageId +``` + +### Print Rulesheet + +```bash +GET /api/rules/print/quick-reference +``` + +Returns printable HTML for the quick reference. + +## Sessions Endpoints + +### Create Session + +```bash +POST /api/sessions +``` + +**Request:** + +```json +{ + "title": "Session 1", + "date": "2026-04-19", + "notes": "First session", + "location": "The Ruins" +} +``` + +### Get Sessions + +```bash +GET /api/sessions?date=2026-04-19 +``` + +### Get Session by ID + +```bash +GET /api/sessions/:id +``` + +### Update Session + +```bash +PUT /api/sessions/:id +``` + +**Request:** + +```json +{ + "notes": "Updated notes", + "location": "The Ruins" +} +``` + +### Delete Session + +```bash +DELETE /api/sessions/:id +``` + +## Files Endpoints + +### Upload File + +```bash +POST /api/files/upload +Content-Type: multipart/form-data +``` + +**Form Data:** + +- `file`: The file to upload + +### Get File + +```bash +GET /api/files/:filename +``` + +### Delete File + +```bash +DELETE /api/files/:filename +``` + +### List Files + +```bash +GET /api/files +``` + +## Error Handling + +### Standard Responses + +```json +{ + "success": false, + "error": { + "code": "ERROR_CODE", + "message": "Human readable error", + "details": "Additional details" + } +} +``` + +### Common Errors + +| Code | Description | +|------|-------------| +| `UNAUTHORIZED` | Invalid or missing session | +| `FORBIDDEN` | Insufficient permissions | +| `NOT_FOUND` | Resource doesn't exist | +| `VALIDATION_ERROR` | Invalid input data | +| `INTERNAL_ERROR` | Server error | + +### Error Examples + +```json +{ + "success": false, + "error": { + "code": "VALIDATION_ERROR", + "message": "Invalid input", + "details": [ + { + "field": "email", + "message": "Invalid email format" + } + ] + } +} +``` + +## Rate Limiting + +API calls are rate limited: +- **100 requests per minute** per IP +- Headers include: + - `X-RateLimit-Limit: 100` + - `X-RateLimit-Remaining: 99` + +## Webhooks + +Webhooks can be configured for events: +- Player created +- Item purchased +- Session created + +```bash +POST /api/webhooks +``` + +**Request:** + +```json +{ + "url": "https://example.com/webhook", + "events": ["player.created", "item.purchased"], + "secret": "your-webhook-secret" +} +``` + +## Testing with curl + +### Get Players + +```bash +curl http://localhost:5000/api/players +``` + +### Get Shop + +```bash +curl http://localhost:5000/api/shop +``` + +### Get Bestiary + +```bash +curl http://localhost:5000/api/bestiary +``` + +### Search Rules + +```bash +curl "http://localhost:5000/api/rules/search?query=damage" +``` diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 0000000..8372ee3 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,275 @@ +# Contributing Guide + +Thank you for your interest in contributing to Deathwatch Roller! This guide will help you get started. + +## How to Contribute + +### Reporting Bugs + +1. Check if the bug already exists in [issues](https://github.com/alexpolo1/dwroller/issues) +2. Create a new issue with: + - Clear title and description + - Steps to reproduce + - Expected vs actual behavior + - Screenshots if applicable + - Your environment (Node version, OS) + +### Suggesting Features + +1. Check [issues](https://github.com/alexpolo1/dwroller/issues) for similar suggestions +2. Create a feature request issue +3. Include use case and expected behavior + +### Pull Requests + +1. Fork the repository +2. Create a branch (`git checkout -b feature/amazing-feature`) +3. Make your changes +4. Add tests for new functionality +5. Update documentation +6. Commit with descriptive messages +7. Push to your branch +8. Open a pull request + +```bash +git checkout -b feature/amazing-feature +npm install +npm run dev +# Make changes +git add . +git commit -m "feat: add amazing feature" +git push origin feature/amazing-feature +``` + +## Development Workflow + +### Setting Up Your Environment + +```bash +# Clone the repository +git clone https://github.com/alexpolo1/dwroller.git +cd dwroller + +# Install dependencies +npm install + +# Start development servers +npm run dev +``` + +### Code Style + +We follow these style guidelines: + +- **TypeScript**: Use TypeScript for all new code +- **ESLint**: Run `npm run lint` before committing +- **Prettier**: Auto-format with `npm run format` +- **Testing**: Add tests for all new features + +### Commit Guidelines + +Use conventional commits: + +``` +feat: New feature +fix: Bug fix +docs: Documentation +style: Code style changes +refactor: Code refactoring +test: Adding tests +chore: Maintenance tasks +``` + +## Code Review Process + +All PRs go through: + +1. **Initial Review**: Automated checks (lint, tests) +2. **Technical Review**: Code quality, design, performance +3. **Documentation**: Are docs updated? +4. **Approval**: Maintainer approval + +### Review Checklist + +- [ ] Tests pass +- [ ] No lint errors +- [ ] Code follows style guide +- [ ] Documentation updated +- [ ] No security issues +- [ ] Performance considerations + +## Documentation + +Documentation is in the `docs/` folder: + +- `SUMMARY.md` - Table of contents +- `quick-start.md` - Setup guide +- `user-guide.md` - User documentation +- `api.md` - API reference +- `developer-guide.md` - Dev guide + +When adding features: +- Update relevant documentation +- Add code examples +- Include usage instructions + +## Testing + +### Backend Tests + +```bash +# Run all tests +npm test + +# Run with coverage +npm run test:coverage + +# Watch mode +npm run test:watch +``` + +### Frontend Tests + +```bash +# Run tests +cd frontend +npm test + +# Run with coverage +npm run test:coverage +``` + +### E2E Tests + +```bash +# E2E testing (optional) +npm run test:e2e +``` + +## Code Quality + +### Linting + +```bash +# Check for issues +npm run lint + +# Fix automatically fixable issues +npm run lint:fix +``` + +### Formatting + +```bash +# Format code +npm run format +``` + +### Building + +```bash +# Build for production +npm run build + +# Check build +npm run build +``` + +## Release Process + +1. Update `CHANGELOG.md` +2. Bump version in `package.json` +3. Create release branch +4. Tag release +5. Publish to npm (if applicable) + +```bash +npm version patch +git push --follow-tags +``` + +## Performance Guidelines + +- Use indexing for database queries +- Implement caching for static data +- Lazy load heavy components +- Optimize bundle size +- Monitor performance metrics + +### Before/After Example + +```typescript +// ❌ BAD: N+1 query problem +const items = await db.items.findAll(); +items.forEach(item => { + const owner = await db.owners.findOne({ where: { itemId: item.id } }); +}); + +// ✅ GOOD: Use include for eager loading +const items = await db.items.findAll({ + include: [{ model: Owner }] +}); +``` + +## Security Guidelines + +- Never commit secrets or credentials +- Use environment variables for sensitive data +- Review third-party dependencies +- Use prepared statements for SQL +- Implement proper authentication + +### Secrets Management + +```bash +# ✅ GOOD +export SESSION_SECRET=${SESSION_SECRET} + +# ❌ BAD - Never do this +SESSION_SECRET="hardcoded-secret" +``` + +## Accessibility + +Make sure your changes: +- Support keyboard navigation +- Include ARIA labels where needed +- Maintain color contrast +- Support screen readers +- Are responsive + +## Browser Support + +Test on: +- Chrome/Edge (Chromium) +- Firefox +- Safari +- Mobile browsers + +## Performance Benchmarks + +- Initial load: < 2s +- API response: < 200ms +- Bundle size: < 500kb (gzipped) +- Lighthouse score: > 90 + +## Community + +- [GitHub Issues](https://github.com/alexpolo1/dwroller/issues) +- [Pull Requests](https://github.com/alexpolo1/dwroller/pulls) +- Contributing guidelines: `CONTRIBUTING.md` + +## Code of Conduct + +- Be respectful +- Welcome newcomers +- Provide constructive feedback +- Focus on the project + +## License + +By contributing, you agree that your contributions will be licensed under the MIT License. + +## Questions? + +Open an issue or start a discussion on GitHub. diff --git a/docs/developer-guide.md b/docs/developer-guide.md new file mode 100644 index 0000000..2241f7f --- /dev/null +++ b/docs/developer-guide.md @@ -0,0 +1,439 @@ +# Developer Guide + +## Project Structure + +``` +dwroller/ +├── backend/ +│ ├── src/ +│ │ ├── routes/ # API routes +│ │ ├── models/ # Data models +│ │ ├── controllers/ # Route controllers +│ │ ├── middleware/ # Auth, validation +│ │ └── utils/ # Helper functions +│ ├── server.js # Entry point +│ └── package.json +├── frontend/ +│ ├── src/ +│ │ ├── components/ # React components +│ │ ├── pages/ # Route pages +│ │ ├── hooks/ # Custom hooks +│ │ └── store/ # State management +│ ├── public/ # Static assets +│ ├── package.json +│ └── vite.config.js +├── data/ # Static data files +├── database/ # Database files +└── docs/ # Documentation +``` + +## Development Setup + +### Backend + +```bash +cd backend +npm install +npm run dev +``` + +The backend starts on port 5000. + +### Frontend + +```bash +cd frontend +npm install +npm run dev +``` + +The frontend starts on port 3000. + +## Code Style + +### JavaScript/TypeScript + +- Use TypeScript for new code +- Follow Airbnb JavaScript style guide +- Maximum 100 character line length +- Use ESLint for linting + +```typescript +// Example code style +interface Player { + id: number; + name: string; + xp: number; + rp: number; +} + +export class PlayerService { + async getPlayer(id: number): Promise { + const player = await this.repository.findById(id); + return this.transform(player); + } +} +``` + +### React + +- Functional components with hooks +- Use TypeScript for props +- Follow React best practices +- Use Context for global state + +```typescript +// Example React component +interface ShopItemProps { + item: ShopItem; + onPurchase: (itemId: number) => void; +} + +const ShopItem: React.FC = ({ item, onPurchase }) => { + return ( +
+

{item.name}

+

Cost: {item.cost} RP

+ +
+ ); +}; +``` + +## Database + +### Schema + +The database uses SQLite by default. The schema is created automatically on first run. + +Main tables: +- `players` - Player accounts +- `items` - Shop inventory +- `inventory` - Player item ownership +- `sessions` - Game session tracking +- `webhooks` - Webhook configurations + +### Migrations + +Migrations are stored in `backend/migrations/`. + +```bash +# Run migrations +npm run migrate + +# Create new migration +npx knex migrate:make create_new_table +``` + +## API Development + +### Creating a New Endpoint + +```bash +backend/src/routes/new-endpoints.ts +``` + +```typescript +import express, { Request, Response } from 'express'; + +const router = express.Router(); + +// GET /new-endpoint +router.get('/', async (req: Request, res: Response) => { + const data = await getNewData(); + res.json({ success: true, data }); +}); + +export default router; +``` + +Add to `server.js`: + +```typescript +import newEndpoints from './src/routes/new-endpoints'; + +app.use('/api/new', newEndpoints); +``` + +### Adding Authentication + +```typescript +import { requireAuth } from '../middleware/auth'; + +router.get(protectedRoute, requireAuth, async (req, res) => { + // Protected route logic +}); +``` + +## Frontend Development + +### Creating a New Component + +```bash +frontend/src/components/NewComponent.tsx +``` + +```typescript +import React from 'react'; + +interface NewComponentProps { + data: any; + onAction: (action: string) => void; +} + +export const NewComponent: React.FC = ({ + data, + onAction, +}) => { + const handleClick = () => { + onAction('click'); + }; + + return
{data.title}
; +}; +``` + +### State Management + +Use React Context for global state: + +```typescript +// frontend/src/store/PlayerContext.tsx +import React, { createContext, useContext, useState } from 'react'; + +interface PlayerState { + players: Player[]; + addPlayer: (player: Player) => void; +} + +const PlayerContext = createContext(undefined); + +export const PlayerProvider: React.FC<{ children: React.ReactNode }> = ({ + children, +}) => { + const [players, setPlayers] = useState([]); + + const addPlayer = (player: Player) => { + setPlayers((prev) => [...prev, player]); + }; + + return ( + + {children} + + ); +}; +``` + +## Testing + +### Backend Tests + +```bash +backend/src/routes/__tests__/new-endpoints.test.ts +``` + +```typescript +import request from 'supertest'; +import app from '../../../server'; + +describe('New Endpoint', () => { + it('should return 200 for GET', async () => { + const res = await request(app).get('/new-endpoint'); + + expect(res.statusCode).toBe(200); + expect(res.body.success).toBe(true); + }); +}); +``` + +Run tests: + +```bash +npm test +``` + +### Frontend Tests + +```bash +frontend/src/components/__tests__/NewComponent.test.tsx +``` + +```typescript +import { render, screen } from '@testing-library/react'; +import NewComponent from '../NewComponent'; + +describe('NewComponent', () => { + it('renders the title', () => { + render(); + + expect(screen.getByText('Test')).toBeInTheDocument(); + }); +}); +``` + +Run tests: + +```bash +npm test +``` + +## Debugging + +### Backend Debugging + +```bash +# Enable verbose logging +NODE_ENV=development npm run server + +# View logs +tail -f backend.log +``` + +### Frontend Debugging + +```bash +# Open DevTools +npm run dev + +# Check browser console +# Network tab for API calls +``` + +## Deployment + +### Build + +```bash +# Build frontend +npm run build + +# Build backend +cd backend +npm run build +``` + +### PM2 Setup + +```bash +# Start with PM2 +npm run pm2:start + +# View logs +pm2 logs + +# Stop +npm run pm2:stop +``` + +### Production Environment Variables + +```bash +# Create production env +cp .env.example .env.production + +# Set required variables: +# - NODE_ENV=production +# - SESSION_SECRET +# - X_GM_SECRET +# - PORT +``` + +## Performance + +### Optimization Tips + +1. **Database**: Use indexes for frequent queries +2. **Frontend**: Enable code splitting +3. **API**: Implement caching for static data +4. **Images**: Use lazy loading + +### Caching + +```typescript +// Example: Cache shop data +const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes + +async function getShop() { + const cached = getFromCache('shop'); + if (cached) return cached; + + const shop = await db.items.findAll(); + setCache('shop', shop, CACHE_DURATION); + return shop; +} +``` + +## Security + +### Authentication + +All API endpoints use session-based authentication. Implement proper session management: + +```typescript +// Session middleware +import { verifyToken } from '../utils/auth'; + +export const requireAuth = async (req: Request, res: Response, next: NextFunction) => { + const session = req.headers['cookie']; + + if (!session) { + return res.status(401).json({ error: 'Unauthorized' }); + } + + try { + req.user = await verifyToken(session); + next(); + } catch (error) { + return res.status(401).json({ error: 'Invalid session' }); + } +}; +``` + +### API Security + +1. Use HTTPS in production +2. Rate limit API requests +3. Validate all inputs +4. Use prepared statements for SQL +5. Never expose sensitive data + +## Contributing + +### Pull Request Process + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Add tests for new functionality +5. Update documentation +6. Submit a pull request + +### Code Review + +All PRs will be reviewed for: +- Code quality +- Test coverage +- Documentation +- Security +- Performance + +### Commit Messages + +Use conventional commits: + +```bash +feat: add new shop item filter +fix: resolve authentication issue +docs: update API documentation +chore: update dependencies +``` + +## Resources + +- [React Documentation](https://react.dev/) +- [Express.js Documentation](https://expressjs.com/) +- [TypeScript Handbook](https://www.typescriptlang.org/docs/) +- [SQLite Documentation](https://www.sqlite.org/docs.html) diff --git a/docs/pm2.md b/docs/pm2.md new file mode 100644 index 0000000..a4ccc54 --- /dev/null +++ b/docs/pm2.md @@ -0,0 +1,188 @@ +# PM2 Configuration + +This document explains how to use PM2 for managing Deathwatch Roller in production. + +## What is PM2? + +PM2 is a production process manager for Node.js that keeps your application running 24/7. + +## Installation + +```bash +# Install PM2 globally +npm install -g pm2 + +# Initialize PM2 ecosystem file +pm2 init +``` + +## Application Configuration + +Create `ecosystem.config.js`: + +```javascript +module.exports = { + apps: [ + { + name: 'dwroller-frontend', + cwd: './frontend', + script: 'npm', + args: 'start', + env: { + NODE_ENV: 'production', + PORT: 3000 + }, + env_development: { + NODE_ENV: 'development' + }, + instances: 1, + autorestart: true, + max_memory_restart: '500M' + }, + { + name: 'dwroller-backend', + cwd: './backend', + script: 'npm', + args: 'start', + env: { + NODE_ENV: 'production', + PORT: 5000 + }, + env_development: { + NODE_ENV: 'development' + }, + instances: 1, + autorestart: true, + max_memory_restart: '500M' + } + ] +}; +``` + +## Starting the Application + +```bash +# Start both apps +pm2 start ecosystem.config.js + +# Start only backend +pm2 start ecosystem.config.js --only backend + +# Start only frontend +pm2 start ecosystem.config.js --only frontend +``` + +## Managing Apps + +```bash +# View status +pm2 list + +# View logs +pm2 logs + +# Restart app +pm2 restart all + +# Stop app +pm2 stop all + +# Delete app +pm2 delete all +``` + +## Monitoring + +```bash +# Enable monitoring +pm2 monitortype --interval 10000 + +# View stats +pm2 stats +``` + +## Logging + +```bash +# Rotate logs +pm2 rotate logs + +# Save log +pm2 save + +# Load saved PM2 process list +pm2 startup +pm2 save +``` + +## NPM Scripts + +Update `package.json` with PM2 scripts: + +```json +{ + "scripts": { + "start": "npm run build && pm2 start ecosystem.config.js", + "pm2:start": "pm2 start ecosystem.config.js", + "pm2:stop": "pm2 stop all", + "pm2:restart": "pm2 restart all", + "pm2:logs": "pm2 logs", + "pm2:list": "pm2 list", + "pm2:save": "pm2 save", + "pm2:startup": "pm2 startup" + } +} +``` + +## Production Build + +```bash +# Build frontend +cd frontend +npm run build + +# Start with PM2 +cd ../.. +npm run pm2:start +``` + +## Environment Variables + +Store secrets in `.env` or use PM2 env: + +```bash +# Set environment variable +pm2 set ecosystem.config.js:* env:SESSION_SECRET="your-secret" + +# List all env variables +pm2 env ecosystem.config.js +``` + +## Backup Strategy + +```bash +# Create database backup +npm run backup + +# Schedule backup with cron +0 2 * * * /path/to/db/backup.sh +``` + +## Scaling + +For horizontal scaling, configure multiple instances: + +```javascript +{ + instances: 'max', + exec_mode: 'cluster', + watch: false +} +``` + +## Auto-restart on reboot + +```bash +pm2 startup +pm2 save +``` diff --git a/docs/quick-start.md b/docs/quick-start.md new file mode 100644 index 0000000..10d9ab6 --- /dev/null +++ b/docs/quick-start.md @@ -0,0 +1,127 @@ +# Quick Start Guide + +## Prerequisites + +Before you begin, ensure you have: + +- **Node.js** (v18+ recommended) - Check with `node --version` +- **npm** or **yarn** - Package manager +- **Git** - For version control + +## Installation + +### 1. Clone the Repository + +```bash +git clone https://github.com/alexpolo1/dwroller.git +cd dwroller +``` + +### 2. Install Dependencies + +```bash +npm install +``` + +This will install all required packages for both frontend and backend. + +### 3. Configure Environment + +Create a `.env` file in the root directory: + +```bash +cp .env.example .env +``` + +Edit `.env` with your configuration: + +```env +# Backend server port +PORT=5000 + +# Session secret (random string recommended) +SESSION_SECRET=your-random-secret-here + +# GM API secret for player management +X_GM_SECRET=your-gm-secret-key + +# Database path (optional - defaults to server location) +DATABASE_PATH=./database/data.db +``` + +### 4. Start the Application + +Run both servers: + +```bash +# Terminal 1 - Backend API +npm run server + +# Terminal 2 - Frontend +npm start +``` + +The application will be available at: +- **Frontend**: `http://localhost:3000` +- **API**: `http://localhost:5000` + +## First Steps + +1. Visit `http://localhost:3000` in your browser +2. Browse the shop or view the bestiary +3. If you're a GM, use the player management feature + +## Production Deployment + +For production builds: + +```bash +# Build frontend +npm run build + +# Start with PM2 +npm run pm2:start +``` + +See [PM2 Configuration](./pm2.md) for details. + +## Troubleshooting + +### Port already in use + +If port 3000 or 5000 is busy: + +```bash +# Find what's using the port +lsof -i :3000 +lsof -i :5000 + +# Kill the process or change the port in .env +``` + +### Database issues + +The application creates the database automatically on first run. If you see errors: + +```bash +# Check database exists +ls -la database/ + +# If database file is corrupted, remove it to recreate +rm database/data.db +``` + +### Clear cache + +If the frontend shows old content: + +```bash +rm -rf .next/ +npm start +``` + +## Next Steps + +- Read the [User Guide](./user-guide.md) to learn features +- Explore the [API Documentation](./api.md) +- See [Developer Guide](./developer-guide.md) for contribution guidelines diff --git a/docs/security.md b/docs/security.md new file mode 100644 index 0000000..81e5c4b --- /dev/null +++ b/docs/security.md @@ -0,0 +1,287 @@ +# Security Guide + +This document outlines the security measures and best practices for Deathwatch Roller. + +## Authentication + +### Session Management + +- Sessions use HTTP-only cookies +- Sessions expire after inactivity +- Passwords are hashed with bcrypt +- XSS protection headers enabled + +### Session Configuration + +```javascript +// Example session config +session: { + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, + secure: process.env.NODE_ENV === 'production', + maxAge: 24 * 60 * 60 * 1000 // 24 hours + } +} +``` + +## Database Security + +### Password Hashing + +```typescript +// Password hashing +import bcrypt from 'bcrypt'; + +const hashedPassword = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashedPassword); +``` + +### Prepared Statements + +All database queries use parameterized statements to prevent SQL injection: + +```typescript +// ✅ GOOD - Using parameterized query +const player = await Player.findOne({ + where: { email: email }, + raw: true +}); + +// ❌ BAD - String concatenation +const badQuery = `SELECT * FROM players WHERE email = '${email}'`; +``` + +## Input Validation + +### Request Validation + +All API requests are validated: + +```typescript +import { body, validationResult } from 'express-validator'; + +router.post('/players', [ + body('name').isLength({ min: 1, max: 50 }).trim(), + body('email').isEmail().normalizeEmail(), + body('xp').isInt({ min: 0 }) +], async (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + // Process request +}); +``` + +## CORS Configuration + +```typescript +// CORS setup +import cors from 'cors'; + +app.use(cors({ + origin: process.env.ALLOWED_ORIGINS?.split(','), + credentials: true, + methods: ['GET', 'POST', 'PUT', 'DELETE'], + allowedHeaders: ['Content-Type', 'Authorization'] +})); +``` + +## Rate Limiting + +```typescript +// Rate limiter +import rateLimit from 'express-rate-limit'; + +const limiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + max: 100, // limit each IP to 100 requests per windowMs + message: 'Too many requests from this IP, please try again later.' +}); + +app.use('/api/', limiter); +``` + +## Security Headers + +```typescript +import helmet from 'helmet'; + +app.use(helmet()); + +// Custom headers +app.use((req, res, next) => { + res.setHeader('X-Content-Type-Options', 'nosniff'); + res.setHeader('X-Frame-Options', 'DENY'); + res.setHeader('X-XSS-Protection', '1; mode=block'); + next(); +}); +``` + +## Environment Variables + +Store sensitive data in environment variables: + +```bash +# .env file +SESSION_SECRET=your-secure-random-string +X_GM_SECRET=your-gm-secret-key +DATABASE_PASSWORD=your-database-password +``` + +Never commit `.env` files: + +```bash +# .gitignore +.env +.env.* +!/.env.example +``` + +## API Security + +### GM Authentication + +GM endpoints require special authentication: + +```typescript +// GM secret header +app.use('/api/players/gm/*', (req, res, next) => { + const secret = req.headers['x-gm-secret']; + if (!secret || secret !== process.env.X_GM_SECRET) { + return res.status(403).json({ error: 'Forbidden' }); + } + next(); +}); +``` + +### API Rate Limits + +```typescript +const apiLimiter = rateLimit({ + windowMs: 60 * 1000, // 1 minute + max: 100, + keyGenerator: (req) => req.ip +}); + +app.use('/api/', apiLimiter); +``` + +## File Upload Security + +```typescript +import multer from 'multer'; + +const upload = multer({ + storage: multer.diskStorage({ + destination: (req, file, cb) => cb(null, 'uploads/'), + filename: (req, file, cb) => { + const uniqueName = `${Date.now()}-${Math.random()}-${file.originalname}`; + cb(null, uniqueName); + } + }), + fileFilter: (req, file, cb) => { + const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']; + if (allowedTypes.includes(file.mimetype)) { + cb(null, true); + } else { + cb(new Error('Invalid file type')); + } + }, + limits: { + fileSize: 10 * 1024 * 1024 // 10MB + } +}); +``` + +## Database Backups + +```bash +# Backup script +#!/bin/bash +mysqldump -u user -p database > backup_$(date +%Y%m%d_%H%M%S).sql +# Rotate old backups +find . -name "backup_*.sql" -mtime +30 -delete +``` + +## Monitoring + +Set up monitoring for security events: + +```typescript +// Audit logging +import auditlog from 'express-auditlog'; + +app.use(auditlog()); +``` + +## Security Checklist + +- [ ] Session cookies are HTTP-only +- [ ] Passwords are hashed with bcrypt +- [ ] SQL queries use parameterized statements +- [ ] CORS is properly configured +- [ ] Rate limiting is enabled +- [ ] Security headers are set +- [ ] Environment variables are not committed +- [ ] Input is validated on all endpoints +- [ ] File uploads are sanitized +- [ ] Dependencies are up to date + +## Common Vulnerabilities + +### SQL Injection Prevention + +```typescript +// ✅ SAFE +User.findOne({ where: { email: email } }); + +// ❌ UNSAFE +User.findAll({ where: `email = '${email}'` }); +``` + +### XSS Prevention + +```typescript +// ✅ SAFE - Sanitize user input +const displayName = sanitize(userInput); + +// ❌ UNSAFE - Direct output +res.send(userInput); +``` + +## Dependencies + +Keep dependencies updated: + +```bash +# Check for updates +npm outdated + +# Update all +npm update + +# Update specific package +npm update express +``` + +## Security Audits + +```bash +# Run security audit +npm audit + +# Fix vulnerabilities +npm audit fix +``` + +## Best Practices + +1. **Principle of Least Privilege**: Use minimal permissions +2. **Defense in Depth**: Multiple security layers +3. **Fail Securely**: Default to safe responses +4. **Log Security Events**: Monitor for suspicious activity +5. **Regular Audits**: Periodic security reviews diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..49f06a4 --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,336 @@ +# Troubleshooting Guide + +Common issues and their solutions for Deathwatch Roller. + +## Application Won't Start + +### Port Already in Use + +```bash +# Check what's using port 3000 or 5000 +lsof -i :3000 +lsof -i :5000 + +# Kill the process or change the port in .env +kill -9 +``` + +### Dependencies Not Installed + +```bash +# Reinstall dependencies +npm install + +# Or update existing +npm install --save +``` + +### Node Version Too Old + +```bash +# Check Node version +node --version + +# Requires Node.js 18+ (check package.json for version) + +# Upgrade Node +curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - +sudo apt-get install -y nodejs +``` + +## Database Errors + +### Database Not Found + +```bash +# Check if database directory exists +ls -la database/ + +# The database is created automatically on first run +# If missing, remove it to recreate +rm database/data.db +``` + +### Corrupted Database + +```bash +# Backup current database +cp database/data.db database/data.db.backup + +# Recreate database +rm database/data.db +# Application will recreate on restart +``` + +## Frontend Issues + +### Cache Not Updating + +```bash +# Clear build cache +rm -rf .next/ +rm -rf frontend/node_modules/.cache/ + +# Rebuild +npm run build +npm start +``` + +### Styles Not Loading + +Check that `vite.config.js` or webpack is configured correctly for asset handling. + +### Build Fails + +```bash +# Clean and rebuild +rm -rf node_modules +rm -rf frontend/node_modules +npm install +npm run build +``` + +## Backend Issues + +### Database Connection Failed + +```bash +# Check .env file +cat .env + +# Verify database path exists +ls -la $DATABASE_PATH +``` + +### Server Logs Show Errors + +```bash +# Check backend logs +tail -f backend.log + +# Clear logs +> backend.log +``` + +## Authentication Issues + +### Cannot Login + +- Verify `.env` has `SESSION_SECRET` set +- Check if password is correct +- Try password reset + +```bash +# Reset session secret +NODE_ENV=development npm run server +``` + +### Session Expires Too Soon + +```bash +# Check session config in server.js +# Increase maxAge in cookie config +``` + +## API Issues + +### CORS Errors + +```bash +# Check CORS configuration in server.js +# Ensure frontend origin is allowed +``` + +### API Endpoints Not Working + +```bash +# Test API directly +curl http://localhost:5000/api/players + +# Check backend logs +tail -f backend.log +``` + +## Deployment Issues + +### PM2 Not Starting + +```bash +# Check ecosystem.config.js exists +ls ecosystem.config.js + +# View PM2 logs +pm2 logs + +# Restart apps +pm2 restart all +``` + +### Build Fails in Production + +```bash +# Clean build +npm run clean +npm run build + +# Check for build errors +npm run build 2>&1 +``` + +## Performance Issues + +### Application is Slow + +```bash +# Check for memory leaks +pm2 monitortype --interval 10000 + +# Check database queries +# Add indexes to frequently queried fields + +# Enable compression +npm install compression +app.use(compression()); +``` + +### High CPU Usage + +```bash +# Identify the process +ps aux | grep node + +# Check for infinite loops in code +# Review recent deployments +``` + +## Browser Issues + +### Styles Not Applying + +- Clear browser cache (Ctrl+Shift+Delete) +- Try incognito mode +- Check browser console for errors + +### JavaScript Console Errors + +```bash +# Check frontend code for syntax errors +cd frontend +npm run lint + +# Check browser DevTools +# Network tab for failed requests +``` + +## Production Issues + +### Application Crashes on Restart + +```bash +# Check error logs +pm2 logs --err + +# Enable better error logging +NODE_ENV=production npm run start +``` + +### Memory Issues + +```bash +# Monitor memory usage +pm2 monitortype --interval 10000 + +# Increase max_memory_restart in ecosystem.config.js +max_memory_restart: '1G' +``` + +## Development Issues + +### TS Errors + +```bash +# Type check +cd backend +npx tsc --noEmit + +# Fix errors in .ts files +``` + +### E2E Tests Failing + +```bash +# Run tests in debug mode +npm run test:e2e -- --debug + +# Check test logs +npm run test:e2e +``` + +## Quick Fixes + +### Reset Everything + +```bash +# Stop all services +pm2 stop all + +# Clear caches +rm -rf .next/ +rm -rf frontend/node_modules/.cache/ + +# Recreate database +rm database/data.db + +# Reinstall +npm install + +# Restart +npm run pm2:start +``` + +### Debug Mode + +```bash +# Enable verbose logging +NODE_ENV=development npm run dev + +# Watch mode +npm run dev +``` + +## Getting Help + +1. Check the logs: `tail -f backend.log` +2. Review the [Developer Guide](./developer-guide.md) +3. Search for issues on GitHub +4. Create a new issue with: + - Steps to reproduce + - Expected vs actual behavior + - Logs and error messages + +## Common Error Messages + +### "Cannot find module" + +```bash +npm install +# or +npm install --save +``` + +### "EADDRINUSE" + +```bash +# Check what's using the port +lsof -i : +kill -9 +``` + +### "Database connection failed" + +```bash +# Check .env has correct database path +cat .env | grep DATABASE_PATH +# Or set it explicitly +DATABASE_PATH=./database/data.db +``` diff --git a/docs/user-guide.md b/docs/user-guide.md new file mode 100644 index 0000000..6300736 --- /dev/null +++ b/docs/user-guide.md @@ -0,0 +1,118 @@ +# User Guide + +## Introduction + +Deathwatch Roller helps you manage your tabletop RPG sessions, track player progress, and access game resources. + +## Main Features + +### Dashboard + +The main page provides quick access to all features: +- Shop for items +- Browse bestiary +- View rules database +- Access GM tools (if authorized) + +### Shop + +Browse and purchase equipment: + +1. Click **"Shop"** in the navigation +2. Filter by item type (weapons, armor, vehicles) +3. Check RP cost and stats +4. Click **"Purchase"** to buy items +5. Items are added to your requisition + +### Bestiary + +Look up monsters and enemies: + +1. Click **"Bestiary"** in navigation +2. Search by name or type +3. View monster stats and weaknesses +4. Use in combat preparation + +### Rules Database + +Access game rules: + +1. Click **"Rules"** in navigation +2. Search for specific rules +3. View quick reference cards +4. Print rulesheets for reference + +### Player Management (GM Only) + +Game Masters can manage players: + +1. Click **"Players"** in navigation (GM only) +2. Create new player accounts +3. Edit player stats and RP +4. Reset passwords +5. Bulk modify XP/RP + +### Session Tracking + +Track your game sessions: + +1. Click **"Sessions"** in navigation +2. Create a new session +3. Add player notes +4. Track accomplishments +5. Export session data + +## Tips and Tricks + +### Quick Reference + +Print quick reference cards for your next session: +- Click **"Print"** in navigation +- Download PDF reference sheets +- Keep handy for quick lookup + +### GM Kit + +Game Masters have access to special tools: +- Character generator +- Scenario templates +- Combat generator +- Utility scripts + +### Session Organization + +Organize your sessions: +- Add notes after each game +- Track player progression +- Maintain a campaign log +- Export data for backups + +## Keyboard Shortcuts + +| Shortcut | Action | +|----------|--------| +| `Ctrl+K` | Quick search | +| `Ctrl+S` | Save current view | +| `Ctrl+P` | Print current page | + +## Accessibility + +The application supports: +- Screen readers +- Keyboard navigation +- High contrast mode +- Adjustable text size + +## Privacy + +- Player data is stored locally +- No external data collection +- Session data is encrypted +- GM tools require secret key + +## Support + +For issues or questions: +- Check the [Developer Guide](./developer-guide.md) +- Review the [API documentation](./api.md) +- See open issues on GitHub