I Thought It Would Help
"Possunt, quia posse videntur." — Publius Vergilius Maro
"Possunt, quia posse videntur." — Publius Vergilius Maro
Windower 4 addons for Final Fantasy XI.
Unified DLL module — entity flags, memory read/write, bazaar detection, JA recast & engage lock patches, pattern scanning. Powers multiple addons.
Automatic Treasure Casket solver — hint processing, binary search guessing, auto-calibration.
Automatic bazaar scanner & buyer — wishlist matching, price ranges, stack buying, budget protection.
Model size scaling — resize yourself, your target, or all visible players via direct memory writes.
Client-side race swapping & model scaling — transform other players' races via packet rewriting with optional size overrides.
Circular minimap radar — real-time entity tracking with color-coded dots, range circles, target line, and draggable HUD.
Auto-fishing addon with standalone desktop GUI — TCP/JSON bridge, fish identification, fatigue tracking, F1-themed Rust + egui interface.
Automated Zaldon fish gutting — packet-injected trading with reward detection, watchlist, and chat suppression. ~20 fish/min.
Mog House appearance swapper — live-rewrite the zone model field to display any nation's Mog House geometry. 9 nations supported.
Screenshot organizer with GDI fallback capture — auto-sort into character/zone folders, customizable templates, DGVoodoo2 compatible.
Force any weather effect in any zone — packet injection with in-flight server override, Win+W cycle hotkey, all 20 weather types.
AF/Relic/Empyrean reforge progress tracker — inventory scanning, augment detection, HUD overlay, and interactive HTML dashboard with shopping list.
Automatically solves Treasure Casket combination locks in Final Fantasy XI. Intercepts game packets to read hints, eliminates impossible combinations through constraint logic, and submits guesses via binary search — all without manual input.
| Command | Description |
|---|---|
| //at solve | Scan for nearby locked caskets and begin solving automatically. |
| //at stop | Stop solver, release stuck menus, clear the queue. |
| //at verbose | Toggle detailed debug logging to chat. |
| //at stats | Show kill count, chest rates, and gold/blue breakdown. |
| //at resetstats | Reset statistics for the current zone. |
Draggable on-screen overlay showing remaining permutations, confidence %, session accuracy, current hint type, casket distance, and per-zone stats. Position persists between sessions.
| Packet | Purpose |
|---|---|
| 0x02A ← | NPC message — casket hints and results |
| 0x034 ← | NPC interaction — hint count and menu ID |
| 0x038 ← | Entity animation — casket despawn detection |
| 0x01A → | Target interaction — opens casket menu |
| 0x05B → | Menu selection — request hints or submit guesses |
| 0x052 ← | Menu release — force event skip |
Full rewrite. Streamlined to 5 commands. Fixed stats triple-counting, calibration edge cases, and opened-chest menu lockup.
Text-based chest tracking as source of truth. Stats structure simplified. Removed entity-scan stat paths.
HUD position persistence. Per-zone kill/chest statistics. Early casket detection via 0x02A. Zone stats in HUD.
Blue chest skip logic. Stale menu release. Unreachable chest handling. Dungeon zone +16 offset correction.
Unique-winner calibration. Contextual terminal validation. Bulk -2 zone correction across 40+ zones.
Binary search guessing. Auto-calibration. Non-disruptive recalibration. Complete architectural rewrite from OOP to flat state.
Original release by Uwu/Darkdoom. Manual targeting, hint processing, random guess selection, hardcoded zone bases.
Uwu/Darkdoom — Original addon
Eric & Claude — v2.0–3.0 rewrite
An automatic bazaar scanner and buyer for Final Fantasy XI. BazaarScout detects open bazaars via memory reading, checks their contents against your wishlist with configurable price ranges, and can auto-purchase matching items — all hands-free while you're AFK in town.
| Command | Description |
|---|---|
| //baz start | Start auto-scanning nearby bazaars. |
| //baz stop | Stop scanning. |
| //baz mode <m> | Set mode — auto (buy automatically) or log (notify only). |
| //baz budget <g> | Set gil budget cap. 0 = unlimited. |
| //baz rate <s> | Set seconds between bazaar checks. |
| //baz recheck <s> | Set seconds before rechecking a player's bazaar. |
| //baz autostop | Toggle auto-stop when wishlist is complete. |
| //baz wishlist | Display current wishlist in chat. |
| //baz list | List items found in checked bazaars. |
| //baz status | Show scanner status, mode, and budget. |
| //baz hud | Toggle the on-screen HUD. |
| //baz reset | Reset spent gil and checked player cache. |
| //baz reload | Reload wishlist.lua from disk. |
Two-column draggable HUD showing scanner state, current target, bazaars checked, items found, wishlist matches, gil spent vs budget, and transaction log. Position persists between sessions.
Windower 4 · FFXiTools.dll (included) · Lua libraries: packets, tables, strings, logger, texts, config, resources
Eric Strawser (Seicz@Bahamut) — BazaarScout, FFXiTools.dll
Claude — AI-assisted development
Scale the visual size of any entity in Final Fantasy XI. Make yourself towering, shrink your target, or resize every player on screen. Ported from JayTDawgzone's Ashita v4 addon to Windower 4 using FFXiTools.dll for direct entity memory writes.
| Command | Description |
|---|---|
| //bm | Toggle BigMode on/off. Turning off restores all entities. |
| //bm size <n> | Scale yourself. 0.5 = half, 2 = double, -1 = restore. |
| //bm target <n> | Scale your current target. |
| //bm all <n> | Scale all visible player characters. |
| //bm reset | Clear all overrides and restore defaults. |
| //bm status | Show active overrides with entity names and scale values. |
Entity struct offset 0x204 controls the visual render scale. The server default is -1.0 ("use race default"). Because the server overwrites this field via 0x0E entity update packets, BigMode re-applies overrides on every prerender frame. Entities that despawn are automatically cleaned from the override list.
Windower 4 · FFXiTools.dll v1.3.0+ (included — provides lib.mem read/write)
JayTDawgzone — Original Ashita v4 addon
Eric & Claude — Windower 4 port
Visually transforms other players' races and scales character models on your client. Combines client-side race swapping via 0x00D packet rewriting with direct memory model scaling via FFXiTools.dll. Your own character is never race-swapped by rule — only explicitly via //fan size.
| Command | Description |
|---|---|
| //fan <race> [scale] | All other PCs become <race>, optionally at [scale]. |
| //fan <from> <to> [scale] | Map one race to another, optionally scaled. |
| //fan size <scale> | Scale your own character. |
| //fan target <scale> | Scale your current target. |
| //fan scan | Force-apply all rules to every PC in zone. |
| //fan status | Show active rules and overrides. |
| //fan off | Disable race swaps and restore scales. |
| //fan clear | Clear all rules, scales, and overrides. |
| Offset | Field |
|---|---|
| 0x4A (pkt) | Race byte in 0x00D PC Update packets — rewritten for race swap. |
| 0x204 (mem) | Visual render scale. Default -1.0 = use race default. Positive values override. |
| 0x208 (mem) | Hitbox radius — what Windower's mob.model_size actually reads (not visual). |
Fixed number-vs-race parsing ambiguity. Second argument now always treated as scale when purely numeric.
Merged BigMode scaling into Fantasia. Added //fan size, //fan target, per-race scale rules, prerender scale maintenance. Full race + scale composability.
Initial race-swapping via 0x00D packet interception. Staggered sweep queue. Per-entity state cleared on zone change.
Eric Strawser (Seicz@Bahamut) — Fantasia, FFXiTools.dll
JayTDawgzone — BigMode (Ashita v4, original concept)
Claude — AI-assisted development
A circular minimap radar for Final Fantasy XI. Renders a real-time overhead view of nearby entities using Windower's primitive system — color-coded dots for PCs, NPCs, and mobs, a directional player marker, target line, custom range circles, and a draggable compass HUD. All settings persist across sessions.
| Command | Description |
|---|---|
| //ffxidb toggle | Toggle minimap visibility. |
| //ffxidb pos <x> <y> | Set minimap screen position. |
| //ffxidb scale <n> | Radar size factor. 1.0 = default, 0.5 = half, 2.0 = double. |
| //ffxidb zoom <0-1000> | Set zoom level (view range in yalms). |
| //ffxidb z+ / z- | Adjust zoom by 10. |
| //ffxidb opacity <0-100> | Set background opacity. |
| //ffxidb dotsize <n> | Entity dot pixel size. |
| //ffxidb targetsize <n> | Target dot pixel size. |
| //ffxidb pc / npc / mob | Toggle visibility per entity type. |
| //ffxidb range <r> [r g b] | Add a range circle at <r> yalms with optional color. |
| //ffxidb delete-range <r> | Remove a range circle. |
| //ffxidb target-line | Toggle target line visibility. |
| //ffxidb reload | Reload settings from file. |
Windower 4 · Lua libraries: config, resources, packets, bit
Eric
A complete rewrite of Seth VanHeulen's Fisher auto-fishing addon, paired with a standalone desktop GUI built in Rust + egui. The Lua addon handles all fishing mechanics inside Windower 4. The GUI connects over TCP/JSON and provides full interactive control — searchable fish/bait lists, live stats, fatigue tracking — without any interference with the game's input.
Windower's mouse event pipeline cannot reliably block clicks from reaching the FFXI client. Any in-game overlay that needs interactivity causes character movement when clicked — a fundamental limitation of the DirectX hook. An external application has its own OS window and input pipeline. Clicking the Fisher GUI has zero effect on the game.
| Command | Description |
|---|---|
| //fisher start [limit] | Start fishing with optional catch limit. |
| //fisher stop | Stop fishing (force-releases if hooked). |
| //fisher add <name> | Add fish, item, or bait by name. |
| //fisher add all | Add all fish, items, and bait. |
| //fisher remove <name> | Remove by name. |
| //fisher remove all | Remove everything. |
| //fisher list | Show current catch/bait selections. |
| //fisher fatigue | Show fatigue count and reset timer. |
| //fisher fatigue +5 | Adjust fatigue count. |
Newline-delimited JSON over TCP on localhost:19519. The GUI sends commands (start, stop, add, remove, set, get_state) and receives events (state snapshots, hooked fish, fishing actions, log messages, stop notifications). On connect, the addon immediately sends the full fish/bait/item lists followed by current state.
Fishing lifecycle tracking with session.hooked flag. Smart stop with packet injection and triple-Escape. Line break detection for both status 62 and direct 57→0 path.
Performance pass. Early-out on broadcasts with no clients. Cached list data. Single-pass JSON encoder with pre-built escape table. Empty table fix for GUI parsing.
Complete rewrite of Seth's v6.1.0. Added TCP/JSON server, state broadcasting, command handler. All original fishing logic preserved.
Initial Rust + egui release. Catch/Bait/Stats/Log tabs, fatigue bar, phase display, stats persistence, always-on-top, non-blocking reconnection, Mercedes F1 theme.
Seth VanHeulen (Acacia@Odin) — Original Fisher v6.1.0 (GPLv3)
Eric Strawser (Seicz@Bahamut) — v7.x rewrite + GUI
Claude — AI-assisted development
Emil Ernerfeldt — egui framework
Licensed under GPLv3.
Trades guttable fish to Zaldon in Selbina via packet injection with zero manual NPC interaction. Handles the entire "Inside the Belly" quest loop automatically — trade, menu navigation, event release, and repeat — at roughly 20 fish per minute. All 73 guttable fish supported with a full reward database.
| Command | Description |
|---|---|
| //gut start | Start automated gutting. Stand next to Zaldon in Selbina. |
| //gut stop | Stop gutting. |
| //gut status | Show state, stats, and trade rate. |
| //gut list | Show guttable fish in your inventory. |
| //gut watch <item> | Stop when this item is found. |
| //gut unwatch <item> | Remove from watchlist. |
| //gut watchlist | Show current watchlist. |
| //gut rewards <fish> | Show possible rewards for a fish. |
| //gut debug | Toggle packet debug logging. |
| Fish | Gil | Notable Rewards |
|---|---|---|
| Cave Cherax | 800 | Dwarf Pugil |
| Lik | 880 | Opal Silk |
| Gugrusaurus | 880 | Saber Shoot |
| Bhefhel Marlin | 150 | Pirate's Chart, Brigand's Chart |
| Gigant Squid | 300 | Flame Shield |
| Matsya | 12,592 | Shaper's Shawl |
| Grimmonite | 350 | Silver/Mythril/Gold/Platinum Ring |
Complete rewrite. Dual-release pattern (0x05B + 0x052) cuts trade time from ~8s to ~3s. Added reward detection, watchlist, reward database. 35% code reduction.
Initial release. Automated trading via 0x036 injection. State machine loop. 73 fish database. Chat suppression. Session stats.
Eric Strawser (Seicz@Bahamut) & Claude
Swaps the visual appearance of any 1st floor Mog House to the nation of your choice. Ever wanted a Bastokan Mog House while visiting San d'Oria? MHSwap intercepts the Zone Model field in the zone-in packet and replaces it on the fly — no DAT swapping, no file modifications, purely cosmetic and entirely in-memory. Foreign Mog Houses play the parent zone's music as an ambient cue.
| Command | Description |
|---|---|
| //mhswap | Show current status. |
| //mhswap <nation> | Set target nation. |
| //mhswap list | Show all available nations. |
| //mhswap on / off | Toggle swapping. |
| Nation | Model | Aliases |
|---|---|---|
| San d'Oria | 0x0101 | sandy, sando |
| Bastok | 0x0122 | bastok |
| Windurst | 0x0120 | windy |
| Jeuno | 0x0100 | jeuno |
| Aht Urhgan | 0x00D6 | whitegate |
| Adoulin | 0x0124 | adoulin |
| San d'Oria [S] | 0x02E9 | sandys |
| Bastok [S] | 0x00C7 | bastoks |
| Windurst [S] | 0x00DB | windys |
Streamlined from 285 to ~95 lines. Flattened data structures. Music injection moved to zone change event. Removed debug mode.
Full 9-nation support. Home nation detection. Foreign MH music override. 2F detection.
Proof of concept. Confirmed Zone Model field is independent of zone ID. Tested and reverted door menu override (server validates).
Eric Strawser (Seicz@Bahamut) & Claude
Replaces the SSOrganizer plugin. Monitors the screenshots folder for new images and organizes them into subfolders using a customizable path template. Includes automatic GDI fallback capture that works when Windower's screenshot function fails under DGVoodoo2 or other D3D8 proxy layers.
| Command | Description |
|---|---|
| //ssop status | Show settings, capture mode, and live path preview. |
| //ssop format <fmt> | Set output format: png, jpg, or bmp. |
| //ssop quality <1-100> | Set JPEG compression quality. |
| //ssop verbosity <0-2> | 0 = silent, 1 = normal, 2 = verbose. |
| //ssop interval <sec> | Directory scan interval (0.25–10s). |
| //ssop capture | Force a GDI screenshot immediately. |
| Variable | Example |
|---|---|
| {char} | Seicz |
| {zone} | Selbina |
| {date} | 2026.02.22 |
| {time} | 13.17.33 |
| {timestamp} | 2026.02.22_13.17.33 |
Replaced stb with GDI+ for image encoding. No external dependencies. Significantly reduced DLL size.
Customizable path templates with {char}/{zone}/{date}/{time}/{timestamp}. Configurable date/time formats and separators.
Automatic GDI fallback detection. PrintScreen keybind ownership. Frame-precise UI hiding. Multi-format scanner. Retry logic for locked files.
Initial release. Lua C module architecture. BMP→PNG/JPG conversion. Auto-organization. Multi-instance safety.
Eric Strawser (Seicz@Bahamut) · MIT License
Forces local weather effects by injecting incoming 0x057 (Weather Change) packets into the client. Any of the 20 weather types can be set in any zone. Server packets are intercepted in-flight and have their weather byte swapped before the client processes them — no visual flicker. Purely cosmetic and client-side only.
| Command | Description |
|---|---|
| //wm <weather> | Set weather by name, alias, or ID (0–19). |
| //wm reset | Remove override, return to server weather. |
| //wm status | Show current override and zone info. |
| //wm help | Show command help. |
| Win+W | Cycle through weather 0–19, wrapping back to Clear. |
| ID | Weather | Aliases |
|---|---|---|
| 0 | Clear | clear, none, off |
| 1–3 | Sunshine / Clouds / Fog | sunny, cloudy, foggy |
| 4–5 | Hot Spells / Heat Waves | fire, hot, fire2, heat |
| 6–7 | Rain / Squalls | water, rain, water2, squall |
| 8–9 | Dust Storms / Sand Storms | earth, dust, earth2, sand |
| 10–11 | Winds / Gales | wind, wind2, gale |
| 12–13 | Snow / Blizzards | ice, snow, ice2, blizzard |
| 14–15 | Thunder / Thunderstorms | lightning, thunder2 |
| 16–17 | Auroras / Stellar Glare | light, aurora, light2, stellar |
| 18–19 | Gloom / Darkness | dark, gloom, dark2 |
| Offset | Field |
|---|---|
| 0x00–0x03 | Header (ID 0x057, size 3, sequence) |
| 0x04–0x07 | Vanadiel Time (uint32 LE, minutes since epoch) |
| 0x08 | Weather ID (uint8, 0–19) |
| 0x09–0x0B | Padding |
Removed zone_weather.lua (community data too inconsistent). Removed //wm list. Lean single-file addon.
Removed whitelist enforcement — any weather in any zone. Added Win+W cycle hotkey. Clear now forces override instead of releasing control.
Initial release. Packet injection. In-flight override (eliminated sky flicker). Zone weather whitelist from BG-Wiki/FFXIclopedia/LandSandBoat data.
Eric Strawser (Seicz@Bahamut)
Tracks AF / Relic / Empyrean armor reforge progress across all 22 jobs. Scans your inventory, wardrobes, and storage slips to determine where each piece is, how far along each upgrade path sits, and what materials you still need. Surfaces results three ways: an in-game HUD overlay, a colored chat checklist, and a standalone HTML dashboard with shopping list and multi-character support.
| Command | Description |
|---|---|
| //rf scan | Full scan with colored checklist printed to chat. |
| //rf job <JOB> | Set tracked job (3-letter code, e.g., BLM). |
| //rf hud | Toggle the on-screen overlay. |
| //rf help | Command list. |
Data fixes (NIN/COR/SCH). Scanner tier name resolution bugfix. Complete HUD restyle to tape layout. Scan output multi-color formatting. Dashboard ready-to-upgrade glow and location tracking. Major performance pass.
Location tracking for gear pieces (bags, wardrobes, slips). Empyrean +2 augment suppression. Location formatting fixes.
Storage slip scanning. HTML base piece pips. Fractional progress for owned bases. Shopping list panel. AUG/TRIAL badges.
22-job coverage. Passive currency. GEO/RUN quest data. Per-character exports with manifest. Augment detection via extdata decode. Consonant-abbreviation matching.
Eric Strawser (Seicz@Bahamut) & Claude
Augment decode adapted from GearSwap (Byrth, Rubenator). Data cross-referenced against BG Wiki.
MIT License.
A unified C++ DLL for Windower 4 that consolidates entity manipulation, entity reading, memory patching, and generic memory access into a single library. Replaces three standalone DLLs with one, eliminates static Lua linking, and shares a common pattern scanner and entity system across all features. Powers AutoTorque, BazaarScout, BigMode, and Fantasia.
| Original DLL | FFXiTools Sub-table |
|---|---|
| EntityFlagChanger.dll | lib.flags |
| EntityFlagReader.dll | lib.reader |
| ja0wait.dll | lib.ja0wait |
| (new) | lib.mem |
| Function | Description |
|---|---|
| SetEntityTranslucent(i) | Semi-transparent (bit 2 at 0x132) |
| SetEntityOpaque(i) | Restore opacity |
| HideEntityName(i) | Hide overhead name (bit 7 at 0x130) |
| ShowEntityName(i) | Show overhead name |
| SetEntityInvisible(i) | Full invisible (bit 6 at 0x128) |
| RemoveEntityInvisible(i) | Remove invisible |
| GetInvisibleIndices() | Table of all invisible entity indices (C-side scan) |
| Function | Description |
|---|---|
| has_bazaar(i) | True if bazaar bit set in flags2 |
| get_bazaar_indices() | Table of all bazaar entity indices (C-side scan) |
| get_name(i) | Entity name string (up to 24 chars at 0x34) |
| get_flags2(i) | 32-bit flags at configurable offset |
| read_offset(i, off) | Read 32-bit value at any offset |
| entity_exists(i) | True if entity pointer is non-null |
| Function | Description |
|---|---|
| read_u8/u16/u32/float(i, off) | Read value at entity offset |
| write_u8/u16/u32/float(i, off, v) | Write value at entity offset. Returns 1/-1. |
| scan(pattern, mask) | Pattern scan in FFXiMain.dll. Returns address or nil. |
| read_addr(addr, [size]) | Read 1/2/4 bytes at absolute address. |
| write_addr(addr, val, [size]) | Write at absolute address with VirtualProtect. |
| Function | Description |
|---|---|
| apply() | Apply patches. Returns ok, bitmask (bit 0=JA, bit 1=engage). |
| remove() | Restore original bytes. |
| is_patched() | True if either patch active. |
| status() | Detailed status table with addresses and pre-patch detection. |
Resolves Lua function pointers at runtime from LuaCore.dll — no static linking. Entity access uses GetActorByIdx found via pattern scan. All memory operations are VirtualQuery + SEH protected. Builds as /MT (static CRT) with no external dependencies.
| File | Purpose |
|---|---|
| LuaRuntime.h/.cpp | Lua 5.1 type declarations, runtime function resolution |
| GameMemory.h/.cpp | Pattern scanning, entity access, JA/engage patches |
| FFXiTools.cpp | All Lua-facing functions, module entry points, DllMain |
Added lib.mem.scan (pattern scan), lib.mem.read_addr/write_addr (absolute memory access). Enables full Ashita-style memory patching from pure Lua.
Added lib.mem sub-module — generic entity memory read/write (u8/u16/u32/float by index + offset).
Initial unified release merging EntityFlagChanger, EntityFlagReader, and ja0wait into a single DLL with shared pattern scanner and entity system.
Eric Strawser (Seicz@Bahamut) — FFXiTools.dll
darkdescent — EntityFlagChanger (original)
zechs6437 — ja0wait (Ashita addon, MIT License, © 2017)
Claude — AI-assisted development