Skip to content

Conversation

@KevinEdry
Copy link
Contributor

@KevinEdry KevinEdry commented Dec 21, 2025

Update quest-voiceover plugin to version 1.4.0.

Release: https://github.com/KevinEdry/runelite-quest-voiceover/releases/tag/v1.4.0


Version 1.4.0

Features

  • Add X Marks the Spot quest transcript
  • Add info panel with plugin stats and quick links
  • Add database version and connection status methods
  • Respect config toggles for mute button and quest name display
  • Reorganize settings into Quest Dialog and Quest List sections
  • Log Levenshtein matches below threshold with best match
  • Include dialog text and matched text in voiceover logs
  • Change 'no voiceover found' log from debug to info
  • Generate version.properties from build.gradle version

Bug Fixes

  • Remove FTS query that caused incorrect matches: This also has the nice side effect of enabling me to remove the FTS4 features from the database which will reduce it's size by more than half.
  • Lower Levenshtein threshold from 85% to 70%

New Plugin Panel

CleanShot 2025-12-21 at 01 32 12@2x

Rearranged Plugin Settings

CleanShot 2025-12-21 at 01 32 26@2x

Version 1.3.0

Plugin Changes

  • feat: improve dialog text matching with widget text and Levenshtein fallback

This also fixes numerous edge-cases when playing the quest voiceover with failovers and should make the overall plugin less brittle and more reliable.

Commit Notes:

Add support for reading full dialog text from widgets instead of relying solely on truncated chat messages. This fixes voiceover matching for long dialog lines that get cut off in chat.

Changes:

  • Add widget text extraction to DialogManager for NPC and player dialogs
  • Implement retry logic when widget text isn't immediately available
  • Add LIKE prefix search fallback for FTS matching failures
  • Stop audio playback when dialog is closed
  • Track audio playing state in SoundEngine
  • Add 3-stage query pipeline: exact match, FTS/LIKE, then Levenshtein
  • Handles cases where wiki transcript differs from in-game text (e.g., "called" vs "named")
  • Extract LevenshteinUtility for reusable distance/similarity calculation
  • Register custom SQLite functions for similarity queries
  • Clean up verbose logging, standardize log levels
  • Update code style guidelines to avoid variable abbreviations

@runelite-github-app
Copy link

runelite-github-app bot commented Dec 21, 2025

@runelite-github-app
Copy link

runelite-github-app bot commented Dec 21, 2025

Feedback:

  • Use of javax.sound.sampled.AudioSystem.getLine is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.getControl is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.FloatControl.setValue is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.flush is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.close is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.open is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.getMicrosecondPosition is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.AudioFormat.<init> is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of java.lang.System.out is not allowed: system i/o, use a logger instead.
  • Use of javax.sound.sampled.SourceDataLine.start is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.stop is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.FloatControl$Type.MASTER_GAIN is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.SourceDataLine.write is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.BooleanControl$Type.MUTE is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.BooleanControl.setValue is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of javax.sound.sampled.DataLine$Info.<init> is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
  • Use of java.lang.System.err is not allowed: system i/o, use a logger instead.
  • Use of javax.sound.sampled.SourceDataLine.drain is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead

A new scan will be automatically performed on the next push to the PR branch.


Internal use only: Reviewer details Maintainer details

@KevinEdry KevinEdry changed the title quest-voiceover 1.3.0 quest-voiceover 1.4.0 Dec 21, 2025
@KevinEdry KevinEdry force-pushed the quest-voiceover-1.3.0 branch from 99fa400 to ba576df Compare December 21, 2025 09:31
@KevinEdry KevinEdry changed the title quest-voiceover 1.4.0 Update quest-voiceover to v1.4.0 Dec 23, 2025
@riktenx riktenx merged commit d68f818 into runelite:master Dec 24, 2025
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants