/** * PHASE-2: Social Hearing Mechanics - Stealth vs Perception Opposed Rolls * * Implements D&D 5e-style opposed checks for eavesdropping detection: * - Speaker rolls Stealth (d20 + DEX modifier + stealthBonus) * - Listener rolls Perception (d20 + WIS modifier + perceptionBonus) * - If listener's total >= speaker's total, they hear the conversation */ import { Character, NPC } from '../../schema/character.js'; export interface OpposedRollResult { speakerRoll: number; speakerModifier: number; speakerTotal: number; listenerRoll: number; listenerModifier: number; listenerTotal: number; success: boolean; margin: number; } /** * Calculate ability modifier from ability score (D&D 5e formula) * * @param abilityScore - Ability score (1-30, typically 3-20) * @returns Modifier (-5 to +10 typically) */ export declare function getModifier(abilityScore: number): number; /** * Perform a Stealth vs Perception opposed roll * * Speaker tries to hide their conversation (Stealth check) * Listener tries to overhear (Perception check) * * @param speaker - Character attempting stealth * @param listener - Character attempting perception * @param environmentModifier - Optional modifier from environment (e.g., -5 for noisy tavern) * @returns Detailed result of the opposed roll */ export declare function rollStealthVsPerception(speaker: Character | NPC, listener: Character | NPC, environmentModifier?: number): OpposedRollResult; /** * Determine environment modifier based on atmospherics * * @param atmospherics - Room atmospheric effects * @returns Modifier to apply to Perception checks */ export declare function getEnvironmentModifier(atmospherics: string[]): number; /** * Check if character is deafened (cannot hear) * * @param character - Character to check * @returns true if character cannot hear */ export declare function isDeafened(character: Character | NPC): boolean; /** * Batch process opposed rolls for multiple listeners * * Optimized for scenarios where one speaker is heard by many listeners * * @param speaker - The character speaking * @param listeners - Array of characters trying to hear * @param environmentModifier - Modifier from environment * @returns Map of listenerId -> OpposedRollResult */ export declare function batchRollStealthVsPerception(speaker: Character | NPC, listeners: Array, environmentModifier?: number): Map; //# sourceMappingURL=stealth-perception.d.ts.map