Major accessibility overhaul: redesigned menus, column painting, info cards, DLC support, and dozens of fixes#106
Draft
aaronr7734 wants to merge 135 commits intoAccessMods:masterfrom
Draft
Major accessibility overhaul: redesigned menus, column painting, info cards, DLC support, and dozens of fixes#106aaronr7734 wants to merge 135 commits intoAccessMods:masterfrom
aaronr7734 wants to merge 135 commits intoAccessMods:masterfrom
Conversation
- Change permadeath from toggle to two radio button options (Up/Down) - Add MenuHelper for navigation (respects WrapNavigation setting) - Add TypeaheadSearchHelper for storyteller and difficulty search - Add Home/End navigation for all three sections - Add position announcements (X of Y) - Auto-select first item on first visit to each section - Simplify mode announcements (removed verbose help text)
Add accessible custom difficulty settings navigation during character creation. When selecting "Custom..." difficulty, press Enter to open a 2-level menu for editing all difficulty settings. Features: - Navigate sections with Up/Down, Enter to drill into settings - Adjust sliders with Left/Right arrows - Toggle checkboxes with Enter/Space - Typeahead search in both sections and settings - Alt+R to jump directly to playstyle reset section - Escape to go back or exit to difficulty selection Refactored difficulty settings into shared DifficultySettingsHelper used by both character creation and in-game storyteller selection, removing ~550 lines of duplicate code.
- Add MapSize and StartingSeason to unified field menu with (Advanced) label - Sync slider values from game on init (fixes navigation starting from wrong position) - Use MenuHelper for navigation respecting user settings - Add TypeaheadSearchHelper for field search - Add Home/End navigation - Support all 7 slider values for Rainfall/Temperature/Population/LandmarkDensity - Add dev mode options: 5% coverage with (dev) marker, extra map sizes - Use game translation strings for all labels and warnings - Add warnings for 100% coverage, large maps, and winter start - Values clamp instead of wrap
When using PageUp/PageDown to cycle through pawns in the scanner, the announcement now includes the pawn's current activity (e.g., "cooking four lavish meals", "sleeping"). Respects the existing ShowPawnActivityOnMap setting.
- Add FactionsNavigationState for faction list and add menu navigation - Tab/Shift+Tab toggles between World Params and Factions sections - Up/Down/Home/End navigates faction list with typeahead search - Alt+A opens add faction menu, Delete removes selected faction - Faction announcements include full description with xenotype info - Block Enter/Escape appropriately to prevent unintended page navigation - Fix storyteller screen to show position on initial entry
When the cursor moves to a door or when cycling through doors in the scanner, the announcement now includes whether the door is open or closed (e.g., "wooden door (open)" or "autodoor (closed)").
- Add fish species and population to key 2 (terrain info) when Odyssey DLC is active, matching what sighted players see in the mouseover readout - Add colons after stat labels in terrain info (beauty:, cleanliness:, path cost:) - Update light info (key 4) to show percentage with translated label (e.g., "light: 50% (Lit)") matching sighted player display - Add temperature label to light info for consistency
- Create FishingZoneMenuState for keyboard navigation of fishing zone settings - Support repeat mode, target count, minimum population, and fish species list - Add tooltips from game UI for fish population and minimum population fields - Integrate with inspection system via TabRegistry and InspectionTreeBuilder - Register in KeyboardHelper to properly block conflicting keys - Add InfoCardState check to yield control when viewing fish info cards - Use rounded fish population values for consistency with game display
The game plays a sound when drafting and undrafting pawns via the UI. Now the mod's R key shortcut plays the same sound.
Previously, activating a Dialog_NodeTree option that navigates to a sub-dialog (like 'Request trade caravan' -> trader type selection) would immediately close the dialog instead of showing the sub-menu. Now correctly checks DiaOption's resolveTree, link, and linkLateBind fields to determine whether to close the dialog or refresh to show the new dialog node's options.
…controls Ability Targeting: - When targeting a psycast, announces ability name, range, AOE radius, psyfocus cost, and neural heat - Press R during targeting to check distance to cursor and line of sight status - Press T during targeting to hear which pawns are in the area of effect (AOE abilities only) - Clear error messages for out of range, no line of sight, psychic immunity, and missing targets - Support for two-phase abilities like Skip (target selection then destination selection) - World map targeting support for abilities like Farskip Neural Heat Gizmo: - Renamed "Psychic Entropy" to "Neural Heat" (the player-facing term) - Gizmo now shows limiter state: "Neural heat: 0/80, Psyfocus: 39%, Limiter: ON" - Press Enter on the gizmo to toggle the neural heat limiter on/off Ability Gizmo Improvements: - Psycast gizmos now announce their costs when browsing: "Vertigo pulse (M). Costs 2% psyfocus, requires 50%, Neural heat: 30" - Shows both the psyfocus cost (consumed when casting) and minimum required (band threshold) Bug Fixes: - Fixed rich text tags appearing in letter/message announcements (e.g., "(*Name)Mikaela(/Name)" now shows as "Mikaela") - Fixed targeting using mouse position instead of accessibility cursor position
…criptions Animal Attack Target (Odyssey DLC): - Announce range from master when entering targeting mode - Press R during targeting to check distance to cursor and range status - Pre-validate range before executing, with clear error on out-of-range - Keep targeting open on range failure so user can adjust cursor and retry - Detect attack commands by icon match against game's AttackTargetTexture - Use game's Pawn_TrainingTracker.AttackTargetRange const for range value Ability Gizmo Descriptions: - Psycast gizmos now include the spell description after name and cost - Pull description from ability.def.description instead of Command.Desc (which is only populated during mouse hover rendering) - Reorder announcement: name, hotkey, cost, then description Dialog Tree Navigation: - Fix dialog option close logic to not depend on resolveTree flag
…and destination phase tracking
- Detect all ability verbs via IAbilityVerb interface (not just Verb_CastAbility),
supporting Verb_AbilityShoot and modded ability verbs automatically
- Add self-cast feedback: abilities with targetRequired=false now announce
"Casting {name}" instead of producing no feedback
- Track destination phase for dual-target abilities (Skip): R key reports
distance from selected target using destination comp's range
- Handle touch/zero-range abilities: announce "Touch range" instead of
misleading range values, skip range pre-validation
- Add range and effect radius to ability gizmo descriptions (after cost,
before description), with world map and self-cast variants
- Add affected pawns announcement for world-targeting AOE abilities (Farskip)
- Fix location-targeting AOE abilities (Solar Pinhole) showing misleading
"No pawns in radius" on target confirmation
- Use verb.EffectiveRange for range calculations (respects equipment bonuses)
- Separate cost stats with periods for natural screen reader pauses
- Move hotkey to end of ability announcements
- Add animal attack range to gizmo description
- Clean up stale I key documentation from Abilities CLAUDE.md
Check if announcement already ends with a period before appending period-separated sections for attack range and ability info.
Toggle gizmos previously only announced label and ON/OFF state. Now includes the tooltip description that sighted players see on hover, giving screen reader users the same context (e.g., "Animals attack: OFF. While this is on, mastered animals are sent forth to attack distant targets. While it is off, they remain near and guard the master.").
- Add Predator column and sort predators to top (closes AccessMods#74) - Replace mod-added columns (Age, BodySize, Health, Pregnant) with vanilla columns (ManhunterOnDamage, ManhunterOnTameFail) - Add column tooltips announced only on left/right navigation, not up/down, for both wildlife and animals menus - Add jump-to-animal on Enter for wildlife Name column - Fix Hunt/Tame columns showing empty text by using Yes/No translations
… tree enrichments Add Alt+I keyboard shortcut across all major menus and states to open info cards for the currently selected item. This brings RimWorld's hyperlink-based info card system to screen reader users who previously had no way to access it. Info card access points (15 contexts): - Map cursor: opens info card for thing/terrain at cursor position, with float menu selection when multiple things occupy the same cell - Architect menu: opens info card for selected building designator - Plant selection menu: info card for selected plant def - Storage settings: info card for selected ThingDef filter item - Bills menu: info card for selected bill's product - Bill config: info card for the bill's produced item - Gizmo navigation: handles Command_Ability (ability def), Designator_Build (building def with stuff), and fallback to owner - Colony inventory: info card for selected inventory item - Research menu: info card for selected research project - Research detail: info card for project, unlocked items (things/recipes) - Colony animals menu: info card for selected animal - Wildlife menu: info card for selected wild animal - Float menus: extracts Def from shownItem/iconThing/revalidateClickTarget - Info card itself: nested info cards via vanilla's hyperlink system Nested info card navigation: - State stack (SavedCardState) preserves cursor position, expansion state, and visible items when drilling into a linked def - Escape pops back to the outer card; final Escape closes entirely - Multi-hyperlink stat entries present a float menu for selection - closingFromAccessibility flag prevents PostClose from interfering with stack-managed transitions - onlyOneOfTypeAllowed set to false to allow multiple Dialog_InfoCard instances on the WindowStack simultaneously Info card tree improvements: - Stat entry labels now include hyperlink def names inline (sighted users see clickable links; screen reader users now hear the names) - "Inspectable" hint appended to announcements for stat entries that have hyperlinks, guiding users to press Alt+I - Stat expandability checked upfront via GetExplanationText; stats with no explanation are marked non-expandable instead of showing "No items to show" on expand - Empty-children edge case now corrects IsExpandable dynamically Typeahead search fix (all menus): - Alt+key combos no longer accidentally trigger typeahead search input - Added !Event.current.alt guard to ~15 typeahead handlers across UnifiedKeyboardPatch, BuildingInspectPatch, StorageSettingsMenuPatch, PlantSelectionMenuState, WindowlessFloatMenuState, and others - Info card typeahead switched from ev.character to KeyCode-based input (matching all other menus), with progressive backspace deletion and Up/Down match navigation during active search Pawn data improvements: - Xenotype genes now carry GeneDef reference for future info card use - Melanin skin color genes get descriptive shade names (very light, light, fair, medium, tan, brown, dark brown) based on luminance calculation, replacing the generic "Skin color" label - Health capacity tooltips now use HealthCardUtility.GetPawnCapacityTip (showing impactors: hediffs, body parts, genes) instead of the always-empty capacityDef.description - Capacity tooltip text split into individual tree lines per impactor - Skill passion labels changed from * / ** to readable text: "(Minor passion)" / "(Major passion)" Permits system overhaul (Royalty DLC): - Shows ALL permits per faction matching vanilla's PermitsCardUtility layout, not just the pawn's granted permits - Status reflects actual state: Granted, Granted (on cooldown), Available (X points), Locked (requires prerequisite/title) - Adds current title, unused permit points, and royal favor per faction - Required title shown in permit detail expansion Bug fixes: - Zone rename category comparison uses literal "Rename" instead of translated string (fixes potential locale mismatch) - Removed duplicate MenuHelper.GetLevelSuffix call in research detail - Research detail announcements trim trailing punctuation before appending state/position info - BillsMenuState passes ProducedThingDef to FloatMenuOption for info card extraction - KeyboardHelper.IsBlockingPanelActive includes InfoCardState - StorageSettingsMenuPatch returns early when InfoCardState is active - ArchitectMenuPatch skips input when InfoCardState is active - InfoCardDataExtractor extracts worldObject, hediff, titleDef, faction, and stuff fields for comprehensive title generation - InfoCardTreeBuilder generates proper titles for WorldObject, Hediff, AbilityDef, RoyalTitleDef, Faction, and ThingDef+stuff combinations
Apply the same skin color descriptors (very light, light, fair, medium, tan, brown, dark brown) from InfoCardDataExtractor to the unborn baby gene tree. Skin colors now route through a dedicated DescribeSkinShade method using perceptual luminance (0.299r + 0.587g + 0.114b) instead of the generic brightness-based labels (medium-dark, etc.). Hair and other cosmetic colors retain their existing hue-based descriptions.
Sighted players see fertility in the mouse-over tooltip but it was missing from the key 2 terrain announcement. Now shows fertility right after the terrain name, e.g. "Rich soil (140% fertility)".
- Move pregnancy approach menu after Relationship line instead of end - Use game's i18n methods (GetLabel/GetDescription) for pregnancy approach - Add CanEverProduceChild check with translated reason - Consolidate duplicate certainty into single item with change rate - Use translated labels (IdeoRoles, NoRoleAssigned, Effects, Certainty) - Fix cursor jumping after role/pregnancy actions via parent walk-up - Allow ITab_Genes through Hidden tab filter for gene inspection - Add Alt+I to open info cards for gear, hediffs, and genes - Show "Inspectable." suffix on items with available info cards - Set LinkedDef on gene tree nodes for info card navigation
…tech DLC) Integrates the Biotech DLC's "Try Romance" feature into the accessible Social tab tree with keyboard navigation. Viable targets show success chance percentages, Enter initiates romance, and Alt+I opens a factor breakdown via StatBreakdownState. Gated behind Biotech DLC, pawn eligibility, and Full inspection mode. Includes duplicate job guard and Dialog_MessageBox passthrough for relationship warning dialogs.
Rearchitect starting site selection to share the same navigation experience as the in-game F8 world map. World gen now supports the scanner, Z search, number keys 1-5, 3D compass navigation, and biome descriptions announced on biome change. - Add WorldNavContext enum (InGame/WorldGen) to WorldNavigationState - Add BiomeDescriptionTracker for MUD-style biome descriptions - Add StartingSiteContext for world-gen-only features (I-menu, R random, Ctrl+arrows biome jump, faction warnings, tile validation) - Rewrite StartingSitePatch to route through shared WorldNavigationState - Add context guards to caravan/quest methods (InGame only) - Relax ProgramState.Playing checks for scanner search and tile info keys - Guard EARLY BLOCK and F8 handler with InGame context - Remove StartingSiteNavigationState (migrated to shared system) - Remove dead code: CycleToNext/PreviousSettlement, CheckOffRoadOrRiver, wasOnRoad/wasOnRiver fields, lastAnnouncedInfo field, BiomeDescriptionTracker.SetCurrentBiome, ValidateTileForSettlement
…ing filtering Replace static DefDatabase recipe query with vanilla's ingredient-aware filtering (PotentiallyMissingIngredients, Worker.AvailableReport, HasHediff) so the operations list dynamically shows/hides recipes based on available items on the map. Modernize HealthTabState with MenuHelper navigation (Home/End, wrapping), TypeaheadSearchHelper for recipe and body part lists, and streamlined announcements without redundant instructional text. Fix Enter key leak where ActivateAction continued running after OnActivate closed the inspection state, causing a spurious "No items to inspect" announcement.
…rgeting Items like sentience catalyst and mech serums use CompUsable/CompTargetable targeting which was silently ignored by the mod. Now announces targeting start using the game's own mouse-attached label text, provides error feedback on invalid targets, and handles multi-phase targeting (e.g., select colonist then select animal).
Fix Home/End keys jumping to wrong bulk group for mineables by checking HasTerrainRegions in addition to IsTerrain in JumpToCurrent() and ReadDistanceAndDirection(). Allow scanner keys during ViewingModeState and ShapePlacementState by adding them to inPlacementMode check.
WeatherDef.maxRangeCap defaults to -1 (no limit), but the range check unconditionally applied Mathf.Min(targetingRange, weatherCap), producing rangeClamped=-1. Guard on rangeClamped>0 instead of targetingRange>0 to match vanilla's validator pattern.
Use keyCode range checks instead of Event.current.character to detect typeahead input, matching the pattern in HandleBillsMenuInput. The old approach only caught the second IMGUI event (character='t'), letting the first event (keyCode=T) leak to UnifiedKeyboardPatch where it triggered game shortcuts like time announcements.
Add ExpandAllSiblings() method matching ThingFilterNavigationState's WCAG tree view pattern. Wire up * key (KeypadMultiply and Shift+8) in HandleThingFilterInput, and exclude Shift+number from typeahead to prevent Shift+8 from being consumed as digit input.
The keyCode==None guard at UnifiedKeyboardPatch line 108 killed character- only IMGUI events before they reached the policy editor handler, making the Event.current.character-based typeahead detection dead code. Switch to keyCode range checks to catch the first IMGUI event directly.
When a baby transitions to child at age 3, a ChoiceLetter_GrowthMoment is created with only work type info and no passion/trait choices. The auto-opened dialog was undismissable because GrowthMomentState consumed all input without providing a close path for the no-choices case.
…rash TransportersInGroup() returns a static shared list that RimWorld reuses across calls. Iterating it during gizmo announcement could crash when the game's rendering code called the same method mid-iteration.
Rewrite the character creation screen as an accessible treeview with pawns grouped under Selected/Left behind headers, expandable categories (Bio, Traits, Skills, Health, Possessions), and full keyboard navigation. Key features: Page Up/Down preserves tree position across pawns, Ctrl+Up/Down reorders, Alt+R randomizes, Alt+N renames with Title field, ] context menu with Biotech dev stage/xenotype submenus, typeahead search. Fixes treeview not rebuilding after rename (was checking WindowStack for intercepted dialog), improves start-game confirmation to list pawn names, adds xenotype gene drill-down in info cards, and applies localization to several hardcoded strings across world/site modules.
Add XenotypeEditorState and XenotypeEditorPatch to provide full keyboard accessibility for Dialog_CreateXenotype during character creation. Uses tabbed treeview architecture (Selected Genes, Gene Library, Controls) with the same navigation patterns as XenogermState. Key features: - Gene library organized by GeneCategoryDef categories - Individual gene toggle (add/remove from selected) - Controls: biostats, name, name lock, inheritable, ignore restrictions, load custom/premade, save and apply - Rename flow with TextInputHelper - Front-loaded gene info (biostats + description) in collapsed labels, shortened to gene name on expand, restored on collapse - Control tooltips announced during navigation - Entry from both xenotype editor button and pawn context menu - Right bracket key blocked to prevent input leak Also improves GeneTreeBuilder for all gene browsing contexts: - Rich collapsed labels with biostats and full description - includeCategory parameter for context-appropriate labels - Label restore on collapse in all gene inspection states
…ter creation Add a full pawn filter editor (Alt+F or context menu) that lets players set criteria for auto-rerolling pawns during character creation. Filters include per-skill level/passion requirements, total passion range, total skill points range, traits (required/excluded), age range, gender, health conditions, and work incapabilities. The filter uses a flat menu with section headers, typeahead search, Page Up/Down section jumping, and a working copy pattern (Alt+S to save, Escape to discard). When randomizing, pawns are rerolled in a loop until a match is found or the configurable limit is reached, with time-based progress announcements for long searches via screen reader. Trait descriptions use the game's GrammarResolver API for proper placeholder resolution with zero hardcoded strings.
Add all remaining RandomPlus features to the pawn filter: - Gene-affected hediff exemption in health filters - OnlyStartCondition health filter mode - Optional trait pool system with required-from-pool setting - Trait conflict prevention and roll chance display in picker - Skill counting options (highest attack only, passion skills only) - Save/load filter presets in RandomPlus-compatible format - Higher reroll limits (up to 50,000) - Fast reroll algorithm using reflection-based pawn generation - Descriptive tooltips for skill counting options Preset files use the exact same RandomPlus.xml format and location, enabling blind RimWorld Access users and sighted RandomPlus users to share presets seamlessly. Includes duplicate name detection on save and proper character input routing for typeahead and name fields.
Add full keyboard-navigable ideology tab (F12 > Ideology) with two-panel interface: ideology list + details tree view. Details tree includes all sections matching vanilla's UI: - Overview with leader title, worship room, adjective, member name - Style categories with buildable/styled item lists and override tracking - Memes as expandable nodes with all detail fields (unlocked roles, rituals, traits, research, conflicting precepts, etc.) - Precepts, roles, rituals, buildings, relics, weapons, animals, apparel - Role required apparel items with descriptions and Alt+I info cards - Deities with name, type, gender, related meme - Fluid ideology development points - Appearance section with browsable hair/beard/tattoo styles by category - Ritual ambience sound preview via Enter key with music silencing Precept tooltips are parsed and consolidated into navigable child nodes. Ability descriptions are enhanced inline. Style dominance/override info shown using vanilla's translation keys.
Add keyboard accessibility to the ideology selection screen (Page_ChooseIdeoPreset) during world generation. Two-tab interface: - Options tab: Navigate Classic, Custom Fluid/Fixed, Load options - Presets tab: TreeView organized by category (Mild/Strong/Intense) with expandable presets showing meme descriptions - Alt+S/Alt+Y: Structure and style selection via windowless menus - Full tree navigation, typeahead search on both tabs - Block starting site input while ideology page is active
Add full keyboard accessibility to Dialog_ChooseNewWanderers (the post-colony-death settler creation screen), reusing the existing chargen tree navigation and RandomPlus filter system. New wanderer dialog features: - Full tree navigation with all existing shortcuts - Alt+A to add pawns (up to 6), Delete to remove (min 1) - Enter to confirm with safety dialog, Escape to close - RandomPlus filter and reroll fully functional mid-game Reroll algorithm improvements: - Remove Normal mode, optimize Fast as the only algorithm - Skip RedressPawn during search (called once on match) - Conditionally skip health/work generation when not filtering - Fix gender bug: fast reroll now sets gender from filter - Fix mid-game crash: reuse age tracker to avoid LifeStageWorker null reference on unspawned pawns - Frame-split reroll with time-boxed batches for responsive UI - Escape cancels reroll, all other keys blocked during search - Block Page.DoBack during reroll to prevent accidental navigation Filter UI fixes: - Fix duplicate "None" labels: NoPain/AllowNone now distinct - Fix NoAddiction/NoDumbLabor using wrong translation keys - Remove algorithm choice from UI (no longer needed) - Add Shift+Home/End to jump sliders to min/max values
Same-TraitDef different-degree traits (e.g., Psychically hypersensitive and Psychically deaf) are now excluded from the Required/Optional trait picker when another degree of the same TraitDef is already required. This complements the existing ConflictsWith check which only handled cross-TraitDef conflicts and exclusion tags.
- Skip Page DoWindowContents when WindowlessFloatMenuState is active to prevent IMGUI context conflicts with Enter/Escape - Add meme descriptions to structure menu items - Remove redundant pre-announcements from structure/style menus - Add one-time hint about Alt+S/Alt+Y when first tabbing to presets
Expanded nodes now announce only the section name (e.g., "Memes") instead of the full aggregated content. Collapsed nodes still show the full summary. Matches the StartingPawnState tree pattern for consistent UX across the mod.
Expand/collapse actions now announce just the section name and state (e.g., "Memes, expanded, 3 items"). Navigating to a collapsed node still reads the full aggregated summary. Navigating to an expanded node reads just the section name since children are visible below.
Add comprehensive gravship accessibility including destination selection, landing placement with coordinate correction, layer cycling on world map, and disconnected substructure detection with scanner integration.
…ility Replace 70+ hard-coded English strings with RimWorld translation keys across the options menu, storyteller selection, scenario selection, and custom difficulty screens. Add tooltip announcements for 14 settings that have game-provided tooltips (volumes, compression, camera, etc.). Fix language selection menu opening an inaccessible vanilla FloatMenu by routing through WindowlessFloatMenuState instead. Fix the same bug for the soundtrack submenu. Add !WindowlessFloatMenuState.IsActive guard to the options menu input handler so float menus can receive keyboard input. Use FriendlyNameNative for language labels so users see native names. Localize On/Off checkbox values, day labels, permadeath mode labels, and option category names via OptionCategoryDefOf.
Fix broken FavoriteColorTooltip translation in StartingPawnHelper by providing required named arguments (PAWN, COLOR, PERCENTAGE, ORIDEO) matching the game's CharacterCardUtility resolution. Add favorite color to the info card Bio tab and the inspect treeview Character section so it appears in both views. Guarded by IdeologyActive and non-baby developmental stage checks. Note: not yet thoroughly tested in-game.
Verb_Jump (Jump Pack, Locust Armor) extends Verb directly, not Verb_CastAbility/IAbilityVerb, so it was undetected by the existing ability targeting system. Add JumpTargetingState to provide full accessibility during jump targeting: opening announcement with range and charges, per-tile validity prefixes on arrow navigation, R key for detailed range info, and specific error messages on Enter.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a big one. Four rounds of changes spanning most of the mod's feature surface — schedule and assign menus rebuilt from scratch, column painting generalized across all supported tables, universal Alt+I info cards, a full tile info overhaul, and a ton of DLC features (Biotech gene inspection, mechanitor control groups, growth moments, Royalty permits, Ideology roles, Odyssey fishing zones). There are also significant improvements to the game setup flow, bill configuration, policy editors, quest system, colonist bar navigation, and the scanner.
Bug fixes touch everything from soft-locks on Biotech dialogs to keyboard layout issues, Escape key isolation, slider direction consistency, and speech sanitization. A detailed changelog and updated documentation will be included before this PR leaves draft.