From e8b15872ee04b4185c16e4892221d3f5f977a78f Mon Sep 17 00:00:00 2001 From: Lucas Cimon <925560+Lucas-C@users.noreply.github.com> Date: Wed, 14 Aug 2024 00:38:32 +0200 Subject: [PATCH] BladesInTheDark - Interrogation.md (EN-US) --- .../continuous-integration-workflow.yml | 1 + BladesInTheDark/BitD-Interrogation.md | 490 ++++++++++++++++++ BladesInTheDark/BitD-Interrogatoires.md | 55 +- BladesInTheDark/README.md | 10 +- ...om-rawpixel-id-10781221-public-domain.svg} | 0 BladesInTheDark/md2pdf.py | 34 +- BladesInTheDark/style.css | 12 +- ParadisPerdu/ModulesDeSecours.md | 10 + ParadisPerdu/README.md | 2 + ParadisPerdu/scenario1.dot | 2 +- pdf_utils.py | 3 +- 11 files changed, 580 insertions(+), 39 deletions(-) create mode 100644 BladesInTheDark/BitD-Interrogation.md rename BladesInTheDark/img/{seringue-from-rawpixel-id-10781221-public-domaine.svg => syringe-from-rawpixel-id-10781221-public-domain.svg} (100%) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index ae404c7..f2b32ac 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -59,6 +59,7 @@ jobs: cd BladesInTheDark if [[ $GIT_TAG =~ ^BladesInTheDark-v ]]; then sed -i "s/Version: [0-9].[0-9]/Version: ${GIT_TAG/BladesInTheDark-v/}/" BitD-Interrogatoires.md + sed -i "s/Version: [0-9].[0-9]/Version: ${GIT_TAG/BladesInTheDark-v/}/" BitD-Interrogation.md fi ./md2pdf.py cd - diff --git a/BladesInTheDark/BitD-Interrogation.md b/BladesInTheDark/BitD-Interrogation.md new file mode 100644 index 0000000..55a5cad --- /dev/null +++ b/BladesInTheDark/BitD-Interrogation.md @@ -0,0 +1,490 @@ + + +Blades in the Dark + +

+ +# Interrogation + +

+ +The game offers an **Entanglement** called _Interrogation_: + +> The Bluecoats round up one of the PCs to question them about the crew’s crimes. +> [...] You spend time in and out of jail, getting questioned and harassed by the law. +> It’s not the end of the world. +> But now that you’re here in the interrogation room, what kind of person are you? +> Do you talk? Do you stand up to them? Do you make a deal? + +This **game module** for [Blades in the Dark](https://bladesinthedark.com/) invites you to develop these interrogation scenes, to make them crucial moments, where the PCs are put under pressure by the _Inspectors_, where they have a lot to lose, and where the situation will be resolved by memorable _roleplay_ moments. + +_**Warning**_: the goal here is to place the players in conditions close to those of a real police interrogation, and to **stress** them out. Some players do not enjoy playing such scenes at all, so only use this game module after consulting them, and if this idea suits them. +Also ask them, in advance, how comfortable they are with their alter-egos experiencing police violence. + +
+ +## Interpellation +An interrogation scene can make a great **opening sequence** for a gaming session. +As a GM, knowing **which PC will be interrogated** is very handy, +and will allow you to prepare this special scene in advance. +It is also possible to improvise such a sequence while playing, +if the opportunity arises and you feel able to make it up as you go along. + +Ideally, a PC would have been **arrested by the Bluecoats** at the end of the previous session. +If this situation does not happen spontaneously, here are some ways to introduce the interrogation: +* in a situation where the Bluecoats are not aware of the PCs' illicit activities, it may seem more prudent for the crew to keep a “low profile”, cooperate and follow them to the station for a “routine interview”, rather than to trigger a confrontation in a situation to their disadvantage, risking for example to reveal their lair, or to betray the secret identity of one of them. +* an interrogation can be a **bad consequence** of a PC **overindulging** and who provokes a fight or “talks too much” while an informant is present... +* during a chase with the Bluecoats, capture can be a possible **consequence** of a failed escape, which a PC cannot **resist** due to lack of stress points. +* you can propose the interrogation as a variation of the **entanglement** _Arrest_, or an alternative to the time-out activity **reduce ~~heat~~**: the police have suspicions about a PC, but if they agree to be questioned at the station, the crew will lose a ~~wanted level~~. +* a crew contact among the Bluecoats can offer them **a deal**: deliver them valuable information or an object from the seal room, if they agree in exchange for a PC to “get captured” through this corrupt contact, which will earn them a bonus, or even a promotion. + + + +## Preparations +In order to create dramatic tension around the table, it is better to prepare for the interrogation, +in order to destabilize the players, and give rise to beautiful moments of improvisation. + +

+ +### The stakes +A number of negative consequences can arise from this interrogation: +* the PC can consume their last point of **stress** and obtain a new ~~trauma~~. +* the crew can see its level of ~~heat~~ increase, or even gain a ~~wanted level~~. +* the PC can be **incarcerated** in prison, if the interrogation confirms the suspicions weighing on them. + +But above all, by cooking the PC, the Bluecoats could obtain valuable **information** from them. + +List on a sheet of paper, before the interrogation, what law enforcement might discover +based on previous events in your current campaign: +* location of the crew's lair, and their **stash**. +* **allied NPCs**: whether these contacts are accomplices or not, they can then also be questioned... +* **illegal activities** committed by the crew, or other gangs: scores, murders, bribes, trafficking... +* **links** between different people or ongoing investigations, still unknown to the Bluecoats. +* **evidence** of crimes committed, via recorded testimonies or incriminating objects. + +This list will serve as a handy reference to guide the interrogation, +try to obtain information from the PC being questioned, +and perhaps even push them to betray themself or their accomplices. + +


+ +### The Inspectors +Inspector Portrait + +The Inspectors are much more dangerous than simple Bluecoats. +They often come from the families of Akorosi ambassadors abroad, +and are trained into the imperial army. +They are both formidable fighters and peerless bloodhounds. +They are trained to **detect lies**, and you can use this special ability +to justify an Inspector guessing when a PC is disguising the truth. + +The Inspectors will adopt different masks to make the suspects talk: +sometimes appearing good-natured and friendly, +they can quickly become inquisitive, inflexible, threatening. + +During the interrogation, the GM plays the referring Inspector, in charge of leading the investigation involving the PCs. +He already has a very complete file on one or more PJs, +including their known activities, their criminal history, and some psychological profile elements. + +This is optional, but we recommend that you **involve another player** in the interrogation, +by temporarily giving them **the role of a second Inspector**, a partner of the referring Inspector. +Their role is described in detail in the appendix, on a sheet to be given to the player as an interpretation guide. +In short, according to a “good cop, bad cop” strategy, their role will be to be **the bad cop**. + +

+ +
+ +:::insert float-right +### Examples of violations +From the Doskvol penal code: +* criminal association +* conspiracy or insurrection against the Immortal Emperor +* kidnapping or sequestration +* extortion of goods or information +* delivery of confidential information to a foreign power +* murder, with or without premeditation +* insult to an agent of institutions, the church or the nobility +* opening or altering the lightning barriers protecting the city +* promotion of a prohibited cult +* concealment +* refusal to comply with an order from the Bluecoats +* trafficking of illegal goods +* home invasion +* robbery +::: + +### Their tools +In order to obtain the information they are looking for, +in addition to the buildings and Bluecoats at their disposal, +Inspectors have traditional legal tools at their disposal: +* law enforcement's **network of informants** provides them with extensive knowledge of criminal activities. +* the threat of severe **sanctions** provided for by Doskvol's penal code, including incarceration in a penitentiary, forced labor for life, or even the scaffold. +* their role as prosecutor allows them to keep suspects in **detention** for as long as they wish. +* Inspectors will not hesitate to use **violence**, verbal and physical, to intimidate suspects. +* in the interrogation room, a **recording gramophone** allows them to record everything that is said. + +Gramophone +






+ +


+ +In Doskvol, Inspectors also have more **esoteric** tools: +* an array of **alchemical** potions and drugs, including _Spark_, _Quicksilver_ and _Sight_, +but also the _Serum of Truthfulness_ (IV/1, rare) capable of forcing a character to **answer without lying** to 6 questions, +minus the highest die of a **Resistance roll** (Determination). +* they can use a **Ghost** to **possess a suspect**, and thus search their memory, +forcing them to **answer without lying** to 6 questions, +minus the highest die of a **resistance roll** (Determination) to fight against the grip of the specter. +
+Inspectors generally only use this latter technique as a last resort, +because it can happen that the possession goes wrong, giving the suspect supernatural abilities... +* Inspectors can sometimes **bring a victim back from the dead**, temporarily attaching their spirit to a **Hull** +for them to testify, and thus confront a suspect with the testimony of a dead man. +They always use the same envelope, the bust of an automaton placed on the table, +with an expressionless face that contrasts with the lamentations of the imprisoned spirit. + +
+Hull + +

+ +

What they already know

+ +Indic + +The suspect PC is linked to one or more crimes, and has been mentioned by witnesses or victims. + +List on a sheet of paper what the Inspectors already know or suspect about the PC being questioned: +* vices of the PC and possibly associated past excesses while overindulging +* crimes for which the PC is suspected +* other illegal activities with which the PC or the crew may have been associated +* **traces** which were left by the PC during these misdeeds: + + objects left on the premises + + use of weapons that the PC continues to use + + testimonies of witnesses and victims + +::: info fingerprint +This last list of **traces**, in particular, will constitute the main material for the Inspectors to try to trap the suspect PC, and extort information by confronting them with these contradictions. +::: + +

+ +## The place +When the targeted PC is arrested for questioning, they will be taken to a nearby **City Watch post**. + +This is an opportunity to provide your players with a description of the location that reflects the **sense of oppression** it exudes. +You can read the text below, or take inspiration from it to design your own decor. + +> The Bluecoats lead you through the city to a nearby barracks. +> In front of you stands a large stone building. +> The place was once a river customs post, and spans three arches of a partly collapsed bridge, +> that is still used by the City Watch to moor several boats. + +> Several guards patrol the curtain walls of the barracks, rifles in hand. +> All the windows have steel bars, and a portcullis is raised at your entrance into the interior courtyard. +> Inside the barracks, the Bluecoats stare at you with a stern look. +> Once the portcullis comes down behind you, they search you and place all your possessions in a large burlap bag. + +> You are then led through a maze of small corridors to a cell, +> where you are asked to wait before the interrogation, without telling you how long. +> The place is cramped, stinks of piss, and you can see bloodstains on the thick sandstone wall. +> In a nearby cell, a man lies prostrate in a corner, sobbing and mumbling incomprehensible things. +> He seems to have regressed to the behavior of a harassed animal, and growls when you meet his gaze. + +

+ +## Grilled +Here we go! +Tell the players that you are going to play a sequence of pure _roleplay_, +in **real time** without interruption or asides, +and that to create an immersive atmosphere, off-side comments should be avoided until the end of the scene. + +The interrogation begins when Bluecoats come to take the PC from their cell +to bring them to **the interrogation room**. +The guards are vigilant, and armed with **electroplasmic stun batons**. +The interrogation room is austere, with only a table and two chairs. + +::: info handcuffed +If the PC came to the station against their will, for example because they were _caught_, they are restrained by **handcuffs** behind their back. +Once seated in the interrogation room, these restraints are attached to a metal chain firmly attached to the floor. +::: + +For more immersion, it may be interesting to reproduce the same situation at the gaming table: +* questioned PC player sitting on a chair, hands behind their back, possibly tied loosely with a string so that they do not forget that they are restrained. A lamp on the table can be shined on them. +* GM playing the referring Inspector sitting across the table. +* other players slightly behind the table, in observation. +* player embodying the second Inspector who remains standing, towering over the seated player, and constantly circling around them while addressing them. + +You can even make the suspect wait in a separate room, while you briefly explain +to the other players how the scene will unfold, then ask one of them to play as a Bluecoat, +bring the accused in, and then put the string around their wrists. + +The following sections detail the different tactics successively employed by the Inspectors +to extract information from the PC. + +
+ +### Tactic 1. Appear harmless and friendly +During this first phase, the referring Inspector is alone. +Their objective will be to appear **friendly and almost incompetent** to the suspect, +by putting them at ease, so that they “lower their guard”. + +Here are some ways to proceed during this introduction: +* offer **to drink** and **to eat**. +* **flatter** the suspect: “well done, you have heart”, “very clever”, “oh, bold”, etc. +* highlight **common points** between the Inspector and the suspect: values, principles, appetite for the same vices, political opinions, NPCs who are common acquaintances, etc. +* demonstrate familiarity and **connivance**: “ah ah, very funny, I like you”, “well, that doesn’t come out of here, but I definitely agree with you”, “they only got what they deserved,” etc. +* treat the situation as **anecdotal** and express a desire to “resolve this quickly”. +* start with questions to which the suspect will answer “yes”, to provoke an **unconscious acceptance mechanism**, a common _marketing_ technique. “Is your name _< PC name >_?” “You declared that you exercise the profession of _<...>_, is that correct?” “Looking at your file, I see that you come from _< PC heritage >_ and have a background in _< PC background >_, is that correct?” +* appear **hesitant** about the exact procedure to follow, ask irrelevant questions, about **details** of the PC's activities, hoping to provoke **lies** from them, which will then be used to to confuse. + +
+ +Book + +During this first sequence, take notes as if you were writing a report. + +The objective is to try to push the suspect into **complicit confession**, +to loosen their tongue so that they provides information that they believe is not very incriminating, +see that they engage in lies on matters where they do not wish to tell the truth. + +

+ +### Tactic 2. Good cop, bad cop +At a sign from the GM, the player who plays the second Inspector enters the scene. +The referring Inspector introduces their colleague in a few words, appearing to disapprove of their “lack of manners”. + +During this sequence, the objective is to appear as the **lifeline** to the suspect, +by being reassuring, calm, almost benevolent. +It's a kind of ping-pong: when the “bad cop” has sufficiently destabilized the PC being questioned, +the referring Inspector takes control, tempering: “Let’s calm down, let’s calm down. Come on sir, help me see things clearly and you will soon be released.” + +While continuing to play the “good cop”, it’s time to direct the interrogation to the heart of the matter +and, little by little, **question the PC about their involvement** in the various cases in which they are suspected. + +
+ +:::insert float-left +### Inspectors lie +As in “real life”, Doskvol Inspectors are absolutely **not** required to tell the truth during interrogation, although this is a common belief, as they represent the order and authority. + +Here are all their **false promises**: +* items confiscated from you will not be inspected and will be returned to you. +* the judge will be lenient, the Inspectors will plead in your favor. +* the sentence will be heavy (“bad cop”) or it will be light (“good cop”). +* they already know the whole thing, they just need you for details. +* if you cooperate, leak information or admit to certain acts, they will not go any further. +* the information you give them will not be communicated to anyone. +::: + +### Tactic 3. False bargaining +While their sidekick continues their role as “bad cop”, the referring Inspector adopts a new strategy: +**minimize the seriousness of the facts**, in comparison with other crimes, other gangs, +in order to alleviate the PC's fears that the punishment would be too harsh. +If the suspect “falls to the bait” and appears to be receptive, they gradually offer +to **recognize certain charges** that weigh against them, to satisfy their hierarchy and end this interview: +a part of complicity perhaps, a small secondary role in certain criminal activities. + +> “Come on, we both know that you're not as white as snow. Grant me a misdemeanor and I'll end this.” + +The referring Inspector also agrees with the suspect and their crew, +by expressing that **they understand** them completely, that they have sympathy for their ethics, their principles, +that ultimately in this matter **the person responsible is someone else**: +either, depending on the case, corrupt institutions, the stupidity of the people, the greed and unreliability of other gangs, or even incompetent Bluecoat colleagues. + +
+ +### Tactic 4. Quicksand +::: info magnifying-glass +This is the time to confront the suspect with the most damning **evidence** gathered by the Inspectors: present them with all the **traces** that you have listed in preparation, and ask them to provide a coherent explanation. +::: + +It's time to come back to **all the lies of the PC**, which they have stated since the beginning of the interrogation, +and to confront them with their inconsistencies, their contradictions. +The suspect is likely to sink, drowning in their lies, while the Inspectors constantly ask them more questions. +The notes you took from the beginning will be very valuable to you here. + +The more dissonance there is in the PC's words, the more the Inspectors will evoke the seriousness of the charges against them. +It's time for the referring Inspector to play the **lifeline** card: +they ask their colleague to load them two drinks, approach the accused, +and offer them **one last deal**, to choose from depending on the circumstances: +* the suspect **throws out their comrades**, all the big fish in the gang, and they can leave Doskvol free. +* the suspect **dives alone**, they assume all the charges, and their comrades will not be worried. +* the suspect acknowledges the facts, and signs their testimony, but the Inspector keeps it “confidential”, and the PC becomes an **informant** for them. + +

Tactic 5. The hard way

+ +At this stage of the interrogation, the Inspectors believe that they will not get nothing more out of the suspect through trickery and discussion. +They therefore decide to use the **esoteric tools** detailed in a previous section: +alchemy, possession by a Ghost or confrontation with the spirit of a victim in a Hull. +Two of these approaches are resolved with a resistance roll, the third gives you the opportunity to continue the _roleplay_: +chose what is most relevant to the scene at this point. + +From experience, the confrontation with the specter of a victim of the PC is really fun to play. +I recommend that you **entrust another player to play this ghost** for the duration of the scene, +by warning them before the interrogation so that they have time to prepare. + +You can also consider having the Inspectors physically **torture** the interrogated PC. +They will use _Potions of Vitality_ and _Vital Essence_ to treat the suspect and prolong the abuse, +see _Drowning Powder_. +However, [torture does not work (link)](https://www.amnesty.org/en/what-we-do/torture/). +Inspectors will therefore not obtain any useful information by this method. + +
+Syringe +
+ +### Interludes +From the moment the second Inspector come into play, +it may be interesting to take breaks between the different sequences and associated tactics, +according to what you consider to be the most appropriate to give rhythm to the interrogation. + +These interludes are an opportunity to return the suspicious PC **to their cell**. +It is also an opportunity to reduce tension around the table, +to escape from the dramatized immersion of the interrogation, +and debrief a little if necessary with all the players around the table. + +Finally, these moments in the cell are an opportunity for the PC to try to escape, +or to contact their associates outside. +However, their conditions of detention are deliberately unsuitable for rest, +and they will therefore not be able to rest and recover their **stress** points. + +If you wish, the continuation of the interrogation can then be done with **another Secondary Inspector**, +played by another player. + +

+ +## Outcome +The interrogation can be concluded in several ways. + +1. the PC can be **released**: either they have managed to bluff the Bluecoats, or they simply prefer to let them go so that they do not suspect anything, and prepare a more ambitious raid later. + +2. the PC can be **indicted**, and placed in detention until their trial, if sufficient incriminating elements are established by the police. A **score** will be necessary to make them escape out of the post or Ironhook. + +3. the PC can decide to try to **escape**: then make an **Action roll**. +Depending on how they go about it and the result of the roll, the PC may then find themself in a chase through the Bluecoats lookout post. Conversely, **complications** may arise, such as their arrest for _assault against a peace officer_. The interrogation can then continue in a more vigorous manner, or the PC can be directly **incarcerated**. + +4. the PC can try to **buy time**, and **alert** the rest of the crew so that they can make them escape, by force or by trickery. Again, all of this can be resolved by **Action rolls**. + +Players may want to set sail from the beginning of the questioning, +which could ruin your intention to stage an interrogation... +This is another good reason to lay your cards on the table with the players beforehand, +by explicitly stating your intention to play this kind of scene. +Then, if they consider escaping, simply suggest that they wait until after the first interview with the Inspectors. + +::: info despair +Be very vigilant about the well-being of the player playing the questioned PC: +the objective is to establish a situation conducive to _roleplay_, with a bit of dramatic stakes, +but above all **not** to make players uncomfortable. +Cut the scene short if the tension becomes too unpleasant for some of you. +::: + +The end of the scene can also be a good time to debrief with the players: +talk about what they liked more or less, +and discuss a little about real interrogations and police violence... + +### Consequences +However this scene ends, players may feel like the case is closed, +and even if the interrogation was intense, that its repercussions are minimal... + +But for the GM, the information collected by the Bluecoats constitutes fertile ground for **future threats**. +Write down what law enforcement has learned, and determine how they will use it, by setting new **progress counters** for upcoming events: +* **police intimidation**: The Bluecoats go around all of the crew's allies, shaking them down to extort more information. Who will crack? And what are they likely to reveal? +* **raid**: heavily armed, the police attack one of the PCs' lairs. +* **red-handed**: the Bluecoats prepare a trap for the crew, to catch them in the act of criminal activity. +* **arrest**: the police decide to arrest and charge another PC, following the information provided by the one questioned. Nothing like it to sow doubt and discord in the crew! + +Depending on your play style, you can keep these counters hidden, or make them public, without revealing all details... ◔ ◑ ◕ ● + +Confrontation between armed men + +

+ +:::: insert large +## Second Inspector Sheet +During this scene, your name is _____________. +You are a young Inspector, that recently completed training. +You are fierce, and want to prove yourself, even if it means being zealous. + +Your role will be to help the referring Inspector obtain information from the suspect being questioned. +He will lead the interrogation. +According to a “good cop, bad cop” strategy, your role will be to be **the bad cop**, +and **put pressure** on the suspect. + +Here are some tactics to achieve this: +* question the suspect about **unpleasant and uncomfortable topics**. +* **occupy the physical and sound space**: gesticulate, raise your voice, question the seated suspect whom you tower over from above and glare at them, constantly pace the room around them... +* **slam your fist** on the table, shines the lamp on the player being questioned. +* formulate **threats**: physical violence, repercussions on their loved ones, on the duration of their detention, on the sanctions they risk (incarceration in Ironhook, forced labor for life, scaffold...), etc. . +* **make fun** of the suspect, insult them: “you fungal residue”, “soulless butcher”, “crow of misfortune”, “you stink of rotten crap”, “crook”, “you don't have no morals, I have no respect for people like you”, “gillyfoot turd”, etc. +* **note the contradictions** in the player's words, to then accuse them of lying, that their lies betray their guilt, that this was recorded and that it will be used against them before the judges. + +::: info hound +In reality, your character is neither **impulsive**, nor **angry**, nor **contemptuous**. +It's a tactic you knowingly use to allow your partner, +the referring Inspector, to obtain confessions from the suspect. +It may be useful to slip away at the right time, to make room for confessions... +::: +:::: + +
+ +Cover of the book Small manual of self-defense in interrogation + + +## Acknowledgments +Many thanks to the authors of [Small manual of self-defense in interrogation](https://www.editionsducommun.org/products/petit-manuel-dautodefense-en-interrogatoire), which served as inspiration for me for this game module. + +Thanks to [Elliot Jolivet aka Tensei](https://www.artstation.com/ej_tensei) for the illustrations used in this game module, which he created especially for _Blades in the Dark_. You can find some other illustrations he created on the [Reddit thread r/bladesinthedark](https://www.reddit.com/r/bladesinthedark/comments/16quv7u/comment/k1z9cz6/). + +The illustration of the automaton comes from the collection [108 Terrible Character Portraits](https://www.drivethrurpg.com/product/91360/108-Terrible-Character-Portraits) by [Jeff Preston](http://team-preston.com) ([CC BY 3.0](https://creativecommons.org/licenses/by/3.0/)), +the icons from [game-icons.net](https://game-icons.net), +and the city illustrations of paintings from the [_History of Angers_ trail of its Museum of Fine Arts](https://musees.angers.fr/lieux/musee-des-beaux-arts/). + +Thanks to the reviewers & testers of this game module: Aurélien, Elliot, Matthieu, Thomas. + +Finally, many thanks to the developers of the [free software](https://fr.wikipedia.org/wiki/Free/Libre_Open_Source_Software) used to create this document: [the Firefox browser](https://www.mozilla.org/firefox/), [Gimp drawing software](https://www.gimp.org/), [Notepad++ text editor](https://notepad-plus-plus.org/), [the Sumatra PDF reader](https://www.sumatrapdfreader.org), [the Python language](https://www.python.org/), [translate-shell](https://github.com/soimort/translate-shell) and the code libraries [mistletoe](https://pypi.org/project/mistletoe/) (Markdown → HTML) & [weasyprint](https://weasyprint.org/) (HTML → PDF). + +
+ +## License & feedback + +Creative Commons License Attribution-NonCommercial-ShareAlike 4.0 Unported + + +This game module was created by Lucas Cimon and is licensed under the Creative Commons Attribution-NonCommercial 4.0 International license. + +The source files used to generate this PDF are available [on GitHub](https://github.com/Lucas-C/jdr/tree/master/BladesInTheDark). Version: 1.0 + +This game module is distributed at a free price. +If you want to support my projects, you can donate at [lucas-c.itch.io](https://lucas-c.itch.io). +I would also be delighted to have your feedback if you use it: +tell me how your game went via a comment on [lucas-c.itch.io](https://lucas-c.itch.io) or on [my blog](https://chezsoi.org/lucas/blog/pages/jeux-de-role.html). + + + + diff --git a/BladesInTheDark/BitD-Interrogatoires.md b/BladesInTheDark/BitD-Interrogatoires.md index f6054be..b50cd3e 100644 --- a/BladesInTheDark/BitD-Interrogatoires.md +++ b/BladesInTheDark/BitD-Interrogatoires.md @@ -15,7 +15,7 @@ Le manuel du jeu propose un **imbroglio** nommé _Interrogatoire_ : > Ce n'est pas la fin du monde. Mais maintenant que vous êtes ici dans la salle d'interrogatoire, > quel genre de personne êtes-vous ? Est-ce que vous parlez ? Leur tenez-vous tête ? Est-ce que vous passez un marché ? -Cette **aide de jeu** vous propose de développer ces scènes d'interrogatoire, pour en faire des moments cruciaux, où les PJs sont mis sous pression par les _Inspecteurs_, où ils ont beaucoup à perdre, et où la situation se résoudra par des moments de _roleplay_ mémorables. +Cette **aide de jeu** pour [Blades in the Dark](https://www.500nuancesdegeek.fr/boutique/accueil/137-blades-in-the-dark-seconde-edition-revisee-9791090692619.html) vous propose de développer ces scènes d'interrogatoire, pour en faire des moments cruciaux, où les PJs sont mis sous pression par les _Inspecteurs_, où ils ont beaucoup à perdre, et où la situation se résoudra par des moments de _roleplay_ mémorables. _**Avertissement**_ : le parti-pris ici est de placer les joueurs dans des conditions proches de celles d'un véritable interrogatoire de police, et de générer un véritable **stress** chez eux. Certains joueurs n'apprécient pas du tout de jouer de telles scènes, n'employez donc cette aide de jeu qu'après les avoir consultés, et si cette proposition ludique leur convient. Demandez-leur également, en amont, à quel point ils sont à l'aise pour que leurs alter-egos subissent des violences policières. @@ -33,8 +33,8 @@ Idéalement, un PJ peut avoir été **arrêté par les Manteaux Bleus** au terme Si cette situation ne se présente pas spontanément, voici quelques manières d'amener l'interrogatoire d'un PJ : * dans une situation où les Manteaux Bleus ne paraissent pas au courant des activités illicites des PJs, il peut sembler à ces derniers plus prudent de faire « profil bas », coopérer et les suivre au poste pour une « entrevue de routine », plutôt que de déclencher un affrontement dans une situation à leur désavantage, risquant par exemple de révéler leur planque ou de trahir l'identité de l'un d'eux. * un interrogatoire peut être une **conséquence** d'un PJ qui **sombre dans l'excès** après s'être adonné à son Vice, et qui provoque une rixe ou qui « parle trop » alors qu'un indic est présent... -* lors d'une course-poursuite avec les Manteaux Bleus, la capture peut être une **conséquence** possible d'une fuite ratée, à laquelle un PJ ne peut **Résister** par manque de points de stress. -* vous pouvez proposer l'interrogatoire comme une variation de l'**imbroglio** _Arrestation_, ou une alternative à l'activité de temps mort _Réduire le raffut_ : les forces de l'ordre ont des soupçons sur un PJ, si celui-ci accepte de venir au poste pour être interrogé, le Raffut de la bande sera **réduit de moitié**. +* lors d'une course-poursuite avec les Manteaux Bleus, la capture peut être une **conséquence** possible d'une fuite ratée, à laquelle un PJ ne peut **résister** par manque de points de stress. +* vous pouvez proposer l'interrogatoire comme une variation de l'**imbroglio** _Arrestation_, ou une alternative à l'activité de temps mort **réduire le ~~raffut~~** : les forces soupçonnent un PJ, mais si celui-ci accepte d'être interrogé au poste, le ~~niveau d'avis de recherche~~ de la bande diminue d'un point. * un contact de la bande chez les Manteau Bleus peut leur proposer **un marché** : leur livrer une information précieuse ou un objet issu de la salle des scellés, s'ils acceptent en échange qu'un PJ « se fasse capturer » par ce contact ripou, ce qui lui vaudra une prime, voir une promotion. @@ -46,13 +46,13 @@ Afin de créer de la tension dramatique autour de la table, mieux vaut préparer ### Les enjeux Un certain nombre de conséquences négatives peuvent découler de cet interrogatoire : -* le PJ peut consommer son dernier point de **Stress** et obtenir un nouveau **Trauma**. -* la bande peut voir son niveau de **Raffut** augmenter, voir gagner un niveau d'**Avis de recherche**. +* le PJ peut consommer son dernier point de **stress** et obtenir un nouveau ~~trauma~~. +* la bande peut voir son niveau de ~~raffut~~ augmenter, voir gagner un ~~niveau d'avis de recherche~~. * le PJ peut être **incarcéré** en prison, si l'interrogatoire confirme les soupçons pesant sur lui. Mais surtout, en cuisinant le PJ, les Manteaux Bleus pourraient obtenir de lui de précieuses **informations**. Listez sur une feuille de papier, avant l'interrogatoire, ce que les forces de l'ordre pourraient découvrir selon les événements précédents de votre campagne en cours : -* emplacement de la planque de la bande, et de leur **Magot**. +* emplacement de la planque de la bande, et de leur **magot**. * des **PNJs alliés** : que ces contacts soient complices ou non, ils pourront ensuite être aussi interrogés... * des **activités illégales** commises par la bande, ou d'autres gangs : _Coups_, meurtres, pots de vins, trafics... * des **liens** entre différentes personnes ou enquêtes en cours, inconnus des Manteaux Bleus. @@ -66,12 +66,12 @@ voir de le pousser à se trahir ou à trahir ses complices. ### Les Inspecteurs Portrait d'Inspecteur -Les Inspecteurs sont des gendarmes d'élite. +Les Inspecteurs sont bien plus redoutables que les Manteaux Bleus. Ils sont souvent issus des familles d'ambassadeurs Akorosi à l'étranger, et ont été entraînés dans l'armée impériale. Ce sont à la fois de redoutables combattants, et des limiers hors pair. -Ils sont entraînés à **détecter les mensonges** et, sans en abuser, vous pouvez employer cette capacité spéciale -pour parfois justifier qu'un Inspecteur devine lorsqu'un PJ déguise la vérité. +Ils sont entraînés à **détecter les mensonges**, et vous pouvez employer cette capacité spéciale +pour justifier qu'un Inspecteur devine lorsqu'un PJ déguise la vérité. Les Inspecteurs adopteront différents masques pour faire parler les suspects : apparaissant tantôt débonnaires et sympathiques, @@ -145,7 +145,8 @@ les Inspecteurs disposent des outils judiciaires traditionnels :

-### Ce qu'ils savent déjà +

Ce qu'ils savent déjà

+ Indic Le PJ suspect est en lien avec un ou plusieurs crimes, et il a été mentionné par des témoins ou des victimes. @@ -174,7 +175,7 @@ Vous pouvez lire celle proposée ci-dessous, ou vous en inspirer pour concevoir > Le lieu semble être un ancien poste de douane fluvial, et se prolonge avec trois arches d'un pont en partie effondré, > mais toujours employé par le Guet pour amarrer plusieurs embarcations. -> Plusieurs gardes patrouillent sur les courtines de la caserne, arbalète à la main. +> Plusieurs gardes patrouillent sur les courtines de la caserne, fusil à la main. > Toutes les fenêtres comportent des barreaux d'acier, et une herse est relevée à ton entrée dans la cour intérieure. > Dans l'enceinte de la caserne, les Manteaux Bleus te dévisagent d'un air sévère. > Une fois la herse redescendue derrière toi, ils te fouillent et déposent toutes tes possessions dans un grand sac en toile de jute. @@ -185,7 +186,7 @@ Vous pouvez lire celle proposée ci-dessous, ou vous en inspirer pour concevoir > Dans une cellule proche, un homme est prostré dans un coin, et sanglote en marmonnant de manière incompréhensible. > Il semble avoir régressé au comportement d'un animal harassé, et gronde lorsque tu croises son regard. -










+

## Sur le gril C'est parti ! @@ -229,7 +230,7 @@ Voici quelques pistes pour procéder durant cette introduction : * mettre en évidence des **points communs** entre l'Inspecteur et le suspect : valeurs, principes, appétence pour les même vices, opinions politiques, PNJs qui sont des connaissances en commun, etc. * faire preuve de familiarité et de **connivance** : « ah ah, très drôle, tu me plais toi », « bon, ça ne sort pas d'ici, mais je suis bien d'accord avec toi », « ils n'ont eu que ce qu'ils méritaient », etc. * traiter la situation comme **anecdotique** et exprimer avoir envie de « régler ça rapidement ». -* débuter par des questions auxquelles le suspect répondra « oui », pour provoquer un mécanisme d'**acceptation inconscient**, une technique courante de _marketing_. « Vous vous appelez < nom du PJ > ? » « Vous avez déclaré exercer la profession de < ... >, c'est bien ça ? » « En consultant votre dossier, je vois que vous venez de < héritage du PJ > et que avez un passé dans < antécédents du PJ >, c'est correct ? » +* débuter par des questions auxquelles le suspect répondra « oui », pour provoquer un mécanisme d'**acceptation inconscient**, une technique courante de _marketing_. « Vous vous appelez _< nom du PJ >_ ? » « Vous avez déclaré exercer la profession de _< ... >_, c'est bien ça ? » « En consultant votre dossier, je vois que vous venez de _< héritage du PJ >_ et que avez un passé dans _< antécédents du PJ >_, c'est correct ? » * paraître **hésitant** sur la procédure exacte à suivre, poser des questions peu pertinentes, sur des **détails** des activités du PJ, en espérant provoquer des **mensonges** de sa part, qui serviront ensuite à le confondre.
@@ -300,14 +301,15 @@ Les notes que vous avez pris depuis le début vous seront ici très précieuses. Plus il y a de dissonances dans les propos du PJ, plus les Inspecteurs évoqueront la gravité des charges qui pèsent sur lui. C'est le moment pour l'Inspecteur principal de jouer la carte de la **bouée de sauvetage** : -il demande à son comparse d'aller leur charger à boire, se rapproche du prévenu, +il demande à son comparse d'aller leur servir deux verres, se rapproche du prévenu, et lui propose **un dernier marché**, au choix selon les circonstances : * le suspect **balance ses camarades**, tous les gros poissons de la bande, et il pourra quitter Doskvol libre. * le suspect **plonge seul**, il assume toutes les charges, et ses camarades ne seront pas inquiétés. * le suspect reconnaît les faits, et signe son témoignage, mais l'Inspecteur conserve ça « au chaud », et le PJ devient un **indic** pour lui. -### Tactique 5. La manière forte -À ce stade de l’interrogatoire, les Inspecteurs estiment qu'ils ne tireront rien du suspect par la ruse et la discussion. +

Tactique 5. La manière forte

+ +À ce stade de l’interrogatoire, les Inspecteurs estiment qu'ils ne tireront plus rien du suspect par la ruse et la discussion. Ils décident donc d'employer les **outils ésotériques** détaillés dans une section précédente : alchimie, possession par un Fantôme ou confrontation avec l'esprit d'une victime dans une Coquille. Deux de ces approches se résolvent avec un jet de résistance, la troisième vous laisse l'occasion de poursuivre le _roleplay_ : @@ -324,7 +326,7 @@ Néanmoins, [la torture ne fonctionne pas (lien)](https://www.amnesty.org/fr/wha Les Inspecteurs n'obtiendront donc aucune information utile de cette manière.
-Seringue +Seringue
### Intermèdes @@ -340,7 +342,7 @@ et de débriefer un peu si besoin avec tous les joueurs autour de la table. Enfin, ces instants dans la cellule sont l'occasion pour le PJ de tenter de s'évader, ou de contacter ses comparses à l'extérieur. Néanmoins, ses conditions de détention sont volontairement impropices au repos, -et il ne pourra donc pas se reposer et récupérer leurs points de **Stress**. +et il ne pourra donc pas se reposer et récupérer leurs points de **stress**. Si vous le souhaitez, la poursuite de l'interrogatoire peut ensuite se faire avec **un autre Inspecteur secondaire**, incarné par un autre joueur. @@ -436,7 +438,7 @@ et les illustrations de ville de tableaux du [parcours _Histoire d'Angers_ de so Merci aux relecteurs & testeurs de cette aide de jeu : Aurélien, Elliot, Matthieu, Thomas. -Merci enfin aux développeurs des [logiciels libres](https://fr.wikipedia.org/wiki/Free/Libre_Open_Source_Software) employés pour réaliser cette aide de jeu : [le navigateur Firefox](https://www.mozilla.org/fr/firefox/), [le logiciel de dessin Gimp](https://www.gimp.org/), [l'éditeur de texte Notepad++](https://notepad-plus-plus.org/), [le lecteur Sumatra PDF](https://www.sumatrapdfreader.org), [le language Python](https://www.python.org/) et les bibliothèques de code [mistletoe](https://pypi.org/project/mistletoe/) (Markdown → HTML) & [weasyprint](https://weasyprint.org/) (HTML → PDF). +Merci enfin aux développeurs des [logiciels libres](https://fr.wikipedia.org/wiki/Free/Libre_Open_Source_Software) employés pour réaliser cette aide de jeu : [le navigateur Firefox](https://www.mozilla.org/firefox/), [le logiciel de dessin Gimp](https://www.gimp.org/), [l'éditeur de texte Notepad++](https://notepad-plus-plus.org/), [le lecteur Sumatra PDF](https://www.sumatrapdfreader.org), [le language Python](https://www.python.org/) et les bibliothèques de code [mistletoe](https://pypi.org/project/mistletoe/) (Markdown → HTML) & [weasyprint](https://weasyprint.org/) (HTML → PDF).
@@ -473,7 +475,20 @@ racontez-moi comment s'est passée votre partie via un commentaire [lucas-c.itch Com' -* [ ] https://forum.500nuancesdegeek.fr/viewtopic.php?f=52&t=2067&p=36797#p36797 +* [ ] https://lucas-c.itch.io/ +* [ ] https://chezsoi.org/lucas/blog/ + Développer origine de cette AdJ (le livre) + mentionner qu'elle peut s'employer dans d'autres jeux * [ ] email @ auteurs du livre +* [ ] https://www.scenariotheque.org +* [ ] https://forum.500nuancesdegeek.fr/viewtopic.php?f=52&t=2067&p=36797#p36797 +* [ ] https://www.casusno.fr +* [ ] https://lefix.di6dent.fr/archives/category/lundi-gratuit +* [ ] https://opale-roliste.com/forum/ressources/vos-creations/ +* [ ] post sur le fil Ludochaordic du Discord CestPadDuJdr +* [ ] https://www.reddit.com/r/jdr +* [ ] https://black-book-editions.fr/forums.php?board_id=241 +* [ ] https://forums.ffjdr.org +* [ ] Links in https://github.com/Lucas-C/jdr README.md & index.md +* [ ] Discord PTGPTB ? --> diff --git a/BladesInTheDark/README.md b/BladesInTheDark/README.md index e78f703..dec5644 100644 --- a/BladesInTheDark/README.md +++ b/BladesInTheDark/README.md @@ -1,8 +1,16 @@ -# Génération des PDFs +# How to build PDFs + pip install -r ../requirements.txt ./md2pdf.py + +And to build a `BitD-DemonSheet-2pages.pdf` file with 2 `BitD-DemonSheet.pdf` side-by-side: + pdfly cat BitD-DemonSheet.pdf BitD-DemonSheet.pdf -o BitD-DemonSheet-2pages.pdf $opt/pdfrw/examples/subset_booklets.py BitD-DemonSheet-2pages.pdf mv booklet.BitD-DemonSheet-2pages.pdf BitD-DemonSheet-2pages.pdf + +Originally translated from French to English using [translate-shell](https://github.com/soimort/translate-shell): + + trans -s français -to english file://BitD-Interrogatoires.md >BitD-Questioning.md diff --git a/BladesInTheDark/img/seringue-from-rawpixel-id-10781221-public-domaine.svg b/BladesInTheDark/img/syringe-from-rawpixel-id-10781221-public-domain.svg similarity index 100% rename from BladesInTheDark/img/seringue-from-rawpixel-id-10781221-public-domaine.svg rename to BladesInTheDark/img/syringe-from-rawpixel-id-10781221-public-domain.svg diff --git a/BladesInTheDark/md2pdf.py b/BladesInTheDark/md2pdf.py index 3d79d52..778fec0 100755 --- a/BladesInTheDark/md2pdf.py +++ b/BladesInTheDark/md2pdf.py @@ -13,27 +13,35 @@ CSS_FILEPATH = DIR / "style.css" DEMON_MD_FILEPATH = DIR / "BitD-DemonSheet.md" -DEMON_OUT_FILEPATH = DIR / "BitD-DemonSheet.pdf" -INTERRO_MD_FILEPATH = DIR / "BitD-Interrogatoires.md" -INTERRO_OUT_FILEPATH = DIR / "BitD-Interrogatoires.pdf" - +INT_EN_MD_FILEPATH = DIR / "BitD-Interrogation.md" +INT_FR_MD_FILEPATH = DIR / "BitD-Interrogatoires.md" + +DEMON_METADATA = {} # TODO before publishing +INT_FR_METADATA = { + "title": "Blades in the Dark - Interrogatoires", + "keywords": ("jdr", "ttrpg", "blades in the dark", "roleplay", "aide de jeu", "interrogatoire"), + "description": "Cette aide de jeu propose de développer les scènes d'interrogatoire du jeu de rôle Blades in the Dark, pour en faire des moments cruciaux, où les PJs sont mis sous pression par les Inspecteurs, où ils ont beaucoup à perdre, et où la situation se résoudra par des moments de roleplay mémorables.", +} +INT_EN_METADATA = { + "title": "Blades in the Dark - Interrogation", + "keywords": ("ttrpg", "blades in the dark", "roleplay", "module", "interrogation"), + "description": "This game module develops the interrogation scenes of the tabletop roleplaying game Blades in the Dark, to make them crucial moments, where the PCs are put under pressure by the Inspectors, where they have a lot to lose, and where the situation will be resolved by memorable roleplay moments.", +} def build_pdf(): md_filepaths = () # Uncomment one of those lines if you only want to --watch/re-build a single PDF - build_single_pdf(DEMON_MD_FILEPATH, DEMON_OUT_FILEPATH); md_filepaths += DEMON_MD_FILEPATH, - build_single_pdf(INTERRO_MD_FILEPATH, INTERRO_OUT_FILEPATH); md_filepaths += INTERRO_MD_FILEPATH, + build_single_pdf(DEMON_MD_FILEPATH, DEMON_METADATA, lang="fr"); md_filepaths += DEMON_MD_FILEPATH, + build_single_pdf(INT_FR_MD_FILEPATH, INT_FR_METADATA, lang="fr"); md_filepaths += INT_FR_MD_FILEPATH, + build_single_pdf(INT_EN_MD_FILEPATH, INT_EN_METADATA, lang="en"); md_filepaths += INT_EN_MD_FILEPATH, return md_filepaths -def build_single_pdf(md_filepath, out_filepath): +def build_single_pdf(md_filepath, metadata, lang): start = perf_counter() + out_filepath = md_filepath.with_suffix(".pdf") with out_filepath.open("wb") as out_pdf_file: - out_pdf_file.write(markdown2pdf(DIR, md_filepath, CSS_FILEPATH, lang="fr").getbuffer()) - set_metadata(out_filepath, - title="Blades in the Dark - Interrogatoires", - keywords=("jdr", "ttrpg", "blades in the dark", "roleplay", "aide de jeu"), - description="Cette aide de jeu propose de développer les scènes d'interrogatoire du jeu de rôle Blades in the Dark, pour en faire des moments cruciaux, où les PJs sont mis sous pression par les Inspecteurs, où ils ont beaucoup à perdre, et où la situation se résoudra par des moments de roleplay mémorables.", - ) + out_pdf_file.write(markdown2pdf(DIR, md_filepath, CSS_FILEPATH, lang=lang).getbuffer()) + set_metadata(out_filepath, **metadata) print(f"{out_filepath} has been rebuilt in {perf_counter() - start:.1f}s") diff --git a/BladesInTheDark/style.css b/BladesInTheDark/style.css index 2db9487..588cfc5 100644 --- a/BladesInTheDark/style.css +++ b/BladesInTheDark/style.css @@ -16,7 +16,7 @@ padding: 2rem 0; /* Sets vertical space after a page break, before starting page content */ } -#ce-qu-ils-savent-d-j- { page: p4; } +#page-4 { page: p4; } @page p4 { background-image: url(img/angers-ma-03.jpg); background-repeat: no-repeat; @@ -24,7 +24,7 @@ background-size: contain; } -#tactique-5-la-mani-re-forte { page: p7; } +#page-7 { page: p7; } @page p7 { background-image: url(img/angers-ma-02.jpg); background-repeat: no-repeat; @@ -138,9 +138,9 @@ img.bg { background-color: #08090a; color: white; font-family: "Kirsty"; + text-transform: uppercase; height: 2rem; line-height: 2rem; - text-transform: uppercase; margin-top: 0; margin-bottom: .5rem; position: relative; @@ -192,6 +192,12 @@ img.bg { .page-break { page-break-after: always; } .big { font-size: 1.2rem; } +del { /* for ~~terms~~ like CRITICAL, COIN, HEAT, TRAUMA, REP, WANTED LEVEL... */ + text-decoration: none; + font-family: "LinuxLibertineCapitals"; + font-weight: bold; + font-variant-ligatures: none; /* avoids ligature of FF double letters (in "raffut") */ +} @media screen { body { margin-top: 3rem; } diff --git a/ParadisPerdu/ModulesDeSecours.md b/ParadisPerdu/ModulesDeSecours.md index 51a99e0..eb2cc81 100644 --- a/ParadisPerdu/ModulesDeSecours.md +++ b/ParadisPerdu/ModulesDeSecours.md @@ -695,6 +695,16 @@ Séquence alternative : 1. Convert to greyscale 2. Convert to indexed palette with 3/4 colors +Avis post-partie avec 5j : +* super top dans l'ensemble ! +* inclure Cory 3 comme PNJ & détailler sa personnalité +* Léo·Léa & Harp Waschenski sous-exploités +* fin de partie moins "maîtrisée" et au rythme plus lent : + notamment, délicat de gérer le cumul d'ennemis (Cory 3 / cultistes possédés par larves / "La Sécurité") + et de proposer une conclusion de partie "au niveau" des enjeux narratifs + -> trop d'ennemis apparaissent "soudainement", sans être suffisement "incarnés", par ex. "La Sécurité" + -> les "options de sortie" pour les PJs sont trop peu claires + Com' * article blog : mentionner scénario Silent Hil qui m'avait marqué + adj Scavengers précédente + modifier le lien vers le blog ci-dessus une fois publié diff --git a/ParadisPerdu/README.md b/ParadisPerdu/README.md index 30c9fd1..4235fe8 100644 --- a/ParadisPerdu/README.md +++ b/ParadisPerdu/README.md @@ -1,3 +1,5 @@ +Dernière version du PDF: [ParadisPerdu-ModulesDeSecours.pdf](https://lucas-c.github.io/jdr/ParadisPerdu/ParadisPerdu-ModulesDeSecours.pdf) + Présentation officielle du jeu : [Paradis Perdu @ misterfrankenstein.com](https://www.misterfrankenstein.com/wordpress/?p=5388) Les aides de jeux officielles sont téléchargeables sur cette page : diff --git a/ParadisPerdu/scenario1.dot b/ParadisPerdu/scenario1.dot index 7f8667a..8a6ae75 100644 --- a/ParadisPerdu/scenario1.dot +++ b/ParadisPerdu/scenario1.dot @@ -31,7 +31,7 @@ digraph G { subgraph cluster_partie_1 { peripheries = 0; # => no border "L'œil pour le détail\n★" -> "Message CommLink\ncaché de Daryl\n★" [style=invis]; - "« Le Marchand » déambule\ndans les niveaux 8 & 9" -> "Transaction\nde la malette"; + "« Le Marchand » déambule\ndans les niveaux 8 & 9" -> "Transaction\nde la mallette"; node [color=5]; # Sullivan "Recherches\navec Daryl\nau labo Revolve" -> "Cory 3 manque\nde précision" [style=invis, rank=same]; diff --git a/pdf_utils.py b/pdf_utils.py index ab87cc1..1d67741 100644 --- a/pdf_utils.py +++ b/pdf_utils.py @@ -66,7 +66,8 @@ def add_id_attrs_on_headings(html): soup = BeautifulSoup(html, builder=MyTreeBuilder, features="html.parser") for tag_name in ("h1", "h2", "h3", "h4"): for heading in soup.find_all(tag_name): - heading["id"] = slugify(heading.string) + if not heading.get("id"): + heading["id"] = slugify(heading.string) return soup.prettify(formatter="html5")