From df94e73e41bb9868b472085ac9ae0d22075653ba Mon Sep 17 00:00:00 2001 From: Anna Clemens Date: Sun, 6 Mar 2022 04:11:58 -0500 Subject: [PATCH] feat: add a whole lot --- Cargo.lock | 1931 +++++++++++++++++++- Cargo.toml | 18 +- img/dustia_mistake_map.png | Bin 0 -> 214060 bytes notes.yaml | 2711 ++++++++++++++++++++++++++++- src/app.rs | 309 ++++ src/game_state.rs | 84 +- src/main.rs | 21 +- src/notes.rs | 13 +- src/notes_state.rs | 78 +- src/util.rs | 9 +- src/util/markdown_renderer.rs | 327 ++++ src/widget/mod.rs | 3 + src/widget/notes_viewer.rs | 125 ++ src/widget/notes_viewer_scroll.rs | 67 + src/widget/rich_text_display.rs | 43 + 15 files changed, 5614 insertions(+), 125 deletions(-) create mode 100755 img/dustia_mistake_map.png create mode 100755 src/app.rs mode change 100644 => 100755 src/main.rs mode change 100644 => 100755 src/util.rs create mode 100755 src/util/markdown_renderer.rs create mode 100755 src/widget/mod.rs create mode 100755 src/widget/notes_viewer.rs create mode 100755 src/widget/notes_viewer_scroll.rs create mode 100755 src/widget/rich_text_display.rs diff --git a/Cargo.lock b/Cargo.lock index 447496e..0c003d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,10 +3,76 @@ version = 3 [[package]] -name = "anyhow" -version = "1.0.55" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "associative-cache" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46016233fc1bb55c23b856fe556b7db6ccd05119a0a392e04f0b3b7c79058f16" + +[[package]] +name = "atk" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba" +dependencies = [ + "atk-sys", + "bitflags", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] [[package]] name = "autocfg" @@ -14,24 +80,175 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "bit_field" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "bumpalo" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" + +[[package]] +name = "bytemuck" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e851ca7c24871e7336801608a4797d7376545b6928a10d32d75685687141ead" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cairo-rs" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b5725979db0c586d98abad2193cdb612dd40ef95cd26bd99851bf93b3cb482" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b448b876970834fda82ba3aeaccadbd760206b75388fc5c1b02f1e343b697570" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + [[package]] name = "cc" version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +[[package]] +name = "cfg-expr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clipboard" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7" +dependencies = [ + "clipboard-win", + "objc", + "objc-foundation", + "objc_id", + "x11-clipboard", +] + +[[package]] +name = "clipboard-win" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" +dependencies = [ + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.3" @@ -39,10 +256,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] -name = "crossbeam-channel" -version = "0.5.2" +name = "core-graphics" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation", + "foreign-types", + "libc", +] + +[[package]] +name = "core-text" +version = "19.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" +dependencies = [ + "core-foundation", + "core-graphics", + "foreign-types", + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdbfe11fe19ff083c48923cf179540e8cd0535903dc35e178a1fdeeb59aef51f" dependencies = [ "cfg-if", "crossbeam-utils", @@ -61,10 +324,11 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" dependencies = [ + "autocfg", "cfg-if", "crossbeam-utils", "lazy_static", @@ -74,41 +338,553 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if", "lazy_static", ] +[[package]] +name = "deflate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" +dependencies = [ + "adler32", +] + +[[package]] +name = "druid" +version = "0.7.0" +source = "git+https://github.com/linebender/druid.git?rev=fc05e965c85fced8720c655685e02478e0530e94#fc05e965c85fced8720c655685e02478e0530e94" +dependencies = [ + "console_error_panic_hook", + "druid-derive", + "druid-shell", + "fluent-bundle", + "fluent-langneg", + "fluent-syntax", + "fnv", + "im", + "instant", + "tracing", + "tracing-subscriber", + "tracing-wasm", + "unic-langid", + "unicode-segmentation", + "xi-unicode", +] + +[[package]] +name = "druid-derive" +version = "0.4.0" +source = "git+https://github.com/linebender/druid.git?rev=fc05e965c85fced8720c655685e02478e0530e94#fc05e965c85fced8720c655685e02478e0530e94" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "druid-shell" +version = "0.7.0" +source = "git+https://github.com/linebender/druid.git?rev=fc05e965c85fced8720c655685e02478e0530e94#fc05e965c85fced8720c655685e02478e0530e94" +dependencies = [ + "anyhow", + "bitflags", + "block", + "cairo-rs", + "cfg-if", + "cocoa", + "core-graphics", + "foreign-types", + "gdk-sys", + "glib-sys", + "gtk", + "gtk-sys", + "instant", + "js-sys", + "keyboard-types", + "kurbo", + "lazy_static", + "objc", + "piet-common", + "scopeguard", + "time", + "tracing", + "wasm-bindgen", + "web-sys", + "winapi", + "wio", +] + +[[package]] +name = "druid-widget-nursery" +version = "0.1.0" +source = "git+https://github.com/linebender/druid-widget-nursery#f6710e79f191acafb549bc2294eff2021f650f3d" +dependencies = [ + "druid", + "log", + "tracing", +] + +[[package]] +name = "dwrote" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" +dependencies = [ + "lazy_static", + "libc", + "winapi", + "wio", +] + [[package]] name = "either" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "exr" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4badb9489a465cb2c555af1f00f0bfd8cecd6fc12ac11da9d5b40c5dd5f0200" +dependencies = [ + "bit_field", + "deflate", + "flume", + "half", + "inflate", + "lebe", + "smallvec", + "threadpool", +] + [[package]] name = "ffxii-tza-auto-notes" version = "0.1.0" dependencies = [ "anyhow", + "clipboard", + "druid", + "druid-widget-nursery", + "image", "itertools", "lazy_static", "maplit", + "num-format", + "parking_lot", "process_list", + "pulldown-cmark", "serde", "serde_yaml", "sysinfo", "vmemory", ] +[[package]] +name = "field-offset" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +dependencies = [ + "cfg-if", + "crc32fast", + "libc", + "miniz_oxide 0.4.4", +] + +[[package]] +name = "fluent-bundle" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash", + "self_cell", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78" +dependencies = [ + "thiserror", +] + +[[package]] +name = "flume" +version = "0.10.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "futures-channel" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" + +[[package]] +name = "futures-executor" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" + +[[package]] +name = "futures-sink" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" + +[[package]] +name = "futures-task" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" + +[[package]] +name = "futures-util" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gdk" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d749dcfc00d8de0d7c3a289e04a04293eb5ba3d8a4e64d64911d481fa9933b" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "getrandom" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a7187e78088aead22ceedeee99779455b23fc231fe13ec443f99bb71694e5b" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gio" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711c3632b3ebd095578a9c091418d10fed492da9443f58ebc8f45efbeb215cb0" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c515f1e62bf151ef6635f528d05b02c11506de986e43b34a5c920ef0b3796a4" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", +] + +[[package]] +name = "glib-macros" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c" +dependencies = [ + "atk", + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "hashbrown" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -118,6 +894,41 @@ dependencies = [ "libc", ] +[[package]] +name = "im" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111c1983f3c5bb72732df25cddacee9b546d08325fb584b5ebd38148be7b0246" +dependencies = [ + "bitmaps", + "rand_core", + "rand_xoshiro", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "image" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db207d030ae38f1eb6f240d5a1c1c88ff422aa005d10f8c6c6fc5e75286ab30e" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder 0.2.2", + "num-iter", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", + "tiff", +] + [[package]] name = "indexmap" version = "1.8.0" @@ -128,6 +939,47 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inflate" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +dependencies = [ + "adler32", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "intl-memoizer" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b18f988384267d7066cc2be425e6faf352900652c046b6971d2e228d3b1c5ecf" +dependencies = [ + "tinystr", + "unic-langid", +] + [[package]] name = "itertools" version = "0.10.3" @@ -137,6 +989,55 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" + +[[package]] +name = "jpeg-decoder" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "105fb082d64e2100074587f59a74231f771750c664af903f1f9f76c9dedfc6f1" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keyboard-types" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" +dependencies = [ + "bitflags", +] + +[[package]] +name = "kurbo" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" +dependencies = [ + "arrayvec 0.7.2", + "serde", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -144,10 +1045,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "libc" -version = "0.2.119" +name = "lebe" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" +checksum = "7efd1d698db0759e6ef11a7cd44407407399a910c774dd804c64c032da7826ff" + +[[package]] +name = "libc" +version = "0.2.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad5c14e80759d0939d013e6ca49930e59fc53dd8e5009132f76240c179380c09" [[package]] name = "linked-hash-map" @@ -155,6 +1062,24 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "lock_api" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + [[package]] name = "mach" version = "0.3.2" @@ -164,12 +1089,33 @@ dependencies = [ "libc", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + [[package]] name = "memoffset" version = "0.6.5" @@ -179,6 +1125,34 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +dependencies = [ + "adler", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + [[package]] name = "nix" version = "0.23.1" @@ -192,6 +1166,12 @@ dependencies = [ "memoffset", ] +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "ntapi" version = "0.2.0" @@ -210,6 +1190,57 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-format" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bafe4179722c2894288ee77a9f044f02811c86af699344c498b0840c698a2465" +dependencies = [ + "arrayvec 0.4.12", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.1" @@ -220,12 +1251,305 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +dependencies = [ + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "once_cell" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +[[package]] +name = "pango" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "546fd59801e5ca735af82839007edd226fe7d3bb06433ec48072be4439c28581" +dependencies = [ + "bitflags", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "pangocairo" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03ac1e8d456f8f436168aeac41201f0bf49d1dc6c8d01bfb04de2cca25df631" +dependencies = [ + "bitflags", + "cairo-rs", + "glib", + "libc", + "pango", + "pangocairo-sys", +] + +[[package]] +name = "pangocairo-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b9b679ad5c8503e3e533ce06e1619d033274b246e977a6fa1655a6c6ef2b51" +dependencies = [ + "cairo-sys-rs", + "glib-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "piet" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c14a2944b6da638045428a9a7901b77bea62bf430d2b9d4d7146acce96e14a15" +dependencies = [ + "kurbo", + "unic-bidi", +] + +[[package]] +name = "piet-cairo" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecdd587016b022cbe2ee290d7641a362337b244adf1bfe156a35d85855a5221" +dependencies = [ + "cairo-rs", + "glib", + "pango", + "pango-sys", + "pangocairo", + "piet", + "unicode-segmentation", + "xi-unicode", +] + +[[package]] +name = "piet-common" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b2fc8550e18e3ea1dd552f48291acc31996712dccfeb15404977f6350abf63" +dependencies = [ + "cairo-rs", + "cairo-sys-rs", + "cfg-if", + "core-graphics", + "piet", + "piet-cairo", + "piet-coregraphics", + "piet-direct2d", + "piet-web", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "piet-coregraphics" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "803509526b882838db55ae8f6cae276a08aca6b64819c8f371fe9505d37e9d72" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "core-graphics", + "core-text", + "foreign-types", + "piet", +] + +[[package]] +name = "piet-direct2d" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46e2d4f9108976e6166d3de76afa238ab837ba5d5f52fd2a3f2e2c959be2b9a4" +dependencies = [ + "associative-cache", + "dwrote", + "piet", + "utf16_lit", + "winapi", + "wio", +] + +[[package]] +name = "piet-web" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bee71a4d0c2b00e51807d381a6ced49c792f0b0a2e42135f9f4547111bf2bb" +dependencies = [ + "js-sys", + "piet", + "unicode-segmentation", + "wasm-bindgen", + "web-sys", + "xi-unicode", +] + +[[package]] +name = "pin-project" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" + +[[package]] +name = "png" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.5.1", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro2" version = "1.0.36" @@ -244,6 +1568,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "pulldown-cmark" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34f197a544b0c9ab3ae46c359a7ec9cbbb5c7bf97054266fecb7ead794a181d6" +dependencies = [ + "bitflags", + "getopts", + "memchr", + "unicase", +] + [[package]] name = "quote" version = "1.0.15" @@ -253,6 +1589,21 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_xoshiro" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004" +dependencies = [ + "rand_core", +] + [[package]] name = "rayon" version = "1.5.1" @@ -278,18 +1629,72 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "redox_syscall" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] + [[package]] name = "ryu" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "self_cell" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.136" @@ -323,10 +1728,68 @@ dependencies = [ ] [[package]] -name = "syn" -version = "1.0.86" +name = "sharded-slab" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "slab" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" + +[[package]] +name = "smallvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" + +[[package]] +name = "spin" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +dependencies = [ + "lock_api", +] + +[[package]] +name = "strum" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" + +[[package]] +name = "strum_macros" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" dependencies = [ "proc-macro2", "quote", @@ -348,12 +1811,295 @@ dependencies = [ "winapi", ] +[[package]] +name = "system-deps" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6" +dependencies = [ + "anyhow", + "cfg-expr", + "heck", + "itertools", + "pkg-config", + "strum", + "strum_macros", + "thiserror", + "toml", + "version-compare", +] + +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tiff" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0247608e998cb6ce39dfc8f4a16c50361ce71e5b52e6d24ea1227ea8ea8ee0b2" +dependencies = [ + "flate2", + "jpeg-decoder 0.1.22", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "004cbc98f30fa233c61a38bc77e96a9106e65c88f2d3bef182ae952027e5753d" +dependencies = [ + "libc", + "num_threads", +] + +[[package]] +name = "tinystr" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1" + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" +dependencies = [ + "lazy_static", + "valuable", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e0ab7bdc962035a87fba73f3acca9b8a8d0034c2e6f60b84aeaaddddc155dce" +dependencies = [ + "ansi_term", + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "type-map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46" +dependencies = [ + "rustc-hash", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unic-bidi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1356b759fb6a82050666f11dce4b6fe3571781f1449f3ef78074e408d468ec09" +dependencies = [ + "matches", + "unic-ucd-bidi", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-langid" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73328fcd730a030bdb19ddf23e192187a6b01cd98be6d3140622a89129459ce5" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a4a8eeaf0494862c1404c95ec2f4c33a2acff5076f64314b465e3ddae1b934d" +dependencies = [ + "tinystr", +] + +[[package]] +name = "unic-ucd-bidi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1d568b51222484e1f8209ce48caa6b430bf352962b877d592c29ab31fb53d8c" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + [[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "utf16_lit" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14706d2a800ee8ff38c1d3edb873cd616971ea59eb7c0d046bb44ef59b06a1ae" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "vmemory" version = "0.1.8" @@ -366,6 +2112,82 @@ dependencies = [ "winapi", ] +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasm-bindgen" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" + +[[package]] +name = "web-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" + [[package]] name = "winapi" version = "0.3.9" @@ -388,6 +2210,83 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" + +[[package]] +name = "windows_i686_gnu" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" + +[[package]] +name = "windows_i686_msvc" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + +[[package]] +name = "x11-clipboard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea" +dependencies = [ + "xcb", +] + +[[package]] +name = "xcb" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de" +dependencies = [ + "libc", + "log", +] + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + [[package]] name = "yaml-rust" version = "0.4.5" diff --git a/Cargo.toml b/Cargo.toml index a0c0fe2..7d98b7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,11 +7,19 @@ edition = "2021" [dependencies] anyhow = "1" -vmemory = "0.1" -sysinfo = "0.23" -process_list = "0.2" +clipboard = "0.5" +druid = { git = "https://github.com/linebender/druid.git", rev = "fc05e965c85fced8720c655685e02478e0530e94", features = ["im", "serde"] } +druid-widget-nursery = { git = "https://github.com/linebender/druid-widget-nursery" } itertools = "0.10" +image = "0.24" +lazy_static = "1" +maplit = "1" +num-format = "0.4" +parking_lot = "0.12" +process_list = "0.2" +pulldown-cmark = "0.9" +#rfd = "0.6" serde = { version = "1", features = ["derive"] } serde_yaml = "0.8" -maplit = "1" -lazy_static = "1" +sysinfo = "0.23" +vmemory = "0.1" diff --git a/img/dustia_mistake_map.png b/img/dustia_mistake_map.png new file mode 100755 index 0000000000000000000000000000000000000000..f48854644ac5dafacef371d5c3a4dbe188cfb31f GIT binary patch literal 214060 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%0DBfj9WhNrt_FbhWfXur&dD2Q@yW1vJ`(YUH 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�*W%B-xqs#8RIxZiWmdtTAF0vtyn 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 literal 0 HcmV?d00001 diff --git a/notes.yaml b/notes.yaml index 8ae4466..4a0aaa2 100644 --- a/notes.yaml +++ b/notes.yaml @@ -21,9 +21,9 @@ steps: - area: 275 steps: |- - Menu - 1. Active - 2. Battle speed: fast - 3. Cursor position: last selection + - Active + - Battle speed: fast + - Cursor position: last selection - **Skip**: 1 - Kill Remora with Thunder spam - **Skip**: 1 @@ -111,7 +111,6 @@ steps: - **Skip**: 1 - Straight ahead to Rogue Tomato - Attack, follow, attack - - **Skip**: 1 # 78: killed rogue tomato - stage: 78 areas: @@ -119,6 +118,7 @@ steps: # 305: eastgate - area: 227 steps: |- + - **Skip**: 1 - Return to Rabanastre - area: 305 steps: |- @@ -196,11 +196,11 @@ steps: - stage: 140 areas: # 1155: stage 1 - # 1166: stage 2 + # 1156: stage 2 - area: 1155 steps: |- - Grab Diamond Armlet, kill rats - - area: 1166 + - area: 1156 steps: |- - Quit to title - stage: 0 @@ -225,6 +225,7 @@ steps: # 248: crystal glade (dry) # 247: starfall field (dry) # 249: gizas south bank (dry) + # 238: gizas north bank (dry) # 228: yardang labyrinth # 630: west barbican - area: 248 @@ -253,7 +254,7 @@ steps: steps: |- - Use sunstone - Exit North - - area: 0 + - area: 238 steps: |- - Use Northwest sunstone # 160: after getting sunstone @@ -265,6 +266,7 @@ steps: # 292: southern plaza # 307: westgate # 345: galtea downs + # 346: corridor of sand # 306: southgate # 702: south sprawl - area: 243 @@ -288,10 +290,30 @@ steps: steps: |- - **Skip**: 1 - Northeast, stop before zoning - - Get Vaan to critical HP - ![vaan dustia hp chart](./img/vaan_dustia_hp_chart.png) + - Get Vaan to critical HP + + | HP | Action + | -- | ------ + | 0-10 | Nothing + | 16-23 | Penelo punch armour + | 22-29 | Penelo punch no armour + | 30-35 | Vaan punch no armour + | 36-38 | PPA + VPA + | 39-42 | Penelo dagger armour + | 43-46 | Vaan dagger armour + | 47-51 | Penelo punch no armour + ? + | 52-56 | Penelo dagger no armour + | 57-60 | Vaan dagger no armour + | 61-72 | Vaan dagger armour + ? + | 73-83 | Vaan dagger no armor + ? + + ![mistake map](./img/dustia_mistake_map.png) + - The map above shows routes you can take if you despawn Dustia - Kill Penelo, set battle speed to slow - - Exit, spawn Dustia, use Phoenix Down to kill + - Exit + - area: 346 + steps: |- + - Spawn Dustia, use Phoenix Down to kill - Kill 12 times total, until level 13 Vaan - Return to Rabanastre - area: 307 @@ -391,13 +413,16 @@ steps: steps: |- - Use switch on back left wall - Open door - - **Skip**: 1 # 215: gone through hidden door # 220: you obtain the goddess's magicite - stage: 220 areas: + # 571: treasure room no. 8 # 572: the garden stairs - - area: 0 + - area: 571 + steps: |- + - **Skip**: 1 + - area: 572 steps: |- - **Skip**: 1 - Exit upstairs @@ -420,16 +445,24 @@ steps: # 319: east sluice control - area: 314 steps: |- - - Menu: - 1. Licence boards - - All: Red battlemage - 2. Licences - - All: Dark - 3. Gambits - - Vaan, Fran: turn on gambits, highest hp: Dark - - Balthier: HP < 50%: Potion, highest hp: Dark - 4. Config - - Battle speed: fast + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Vaan | RDM | Dark + | Balthier | RDM | Dark + | Fran | RDM | Dark + + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Vaan (on) | 1 | Foe: highest HP | Dark + | Fran | 1 | Foe: highest HP | Dark + | Balthier | 1 | Ally: HP < 50% | Potion + | Balthier | 2 | Foe: highest HP | Dark + + - **Battle speed**: fast - Exit ahead - area: 316 steps: |- @@ -836,6 +869,2638 @@ steps: - stage: 710 areas: # 806: lhusu square + # 805: miners' end + # 804: cloudborne row + # 820: the cloudborne + # 914: cutscene - area: 806 steps: |- - - bruh idk lmao + - Exit + - area: 805 + steps: |- + - Exit Northwest + - area: 804 + steps: |- + - West, North, shout to two people + - East to The Cloudborne + - area: 820 + steps: |- + - Shout at the corner of the overlapping rugs ahead + - **Skip**: 3 + - stage: 730 + areas: + # 820: the cloudborne + # 804: cloudborne row + # 803: travica way + - area: 820 + steps: |- + - Exit + - area: 804 + steps: |- + - Exit Northwest + - area: 803 + steps: |- + - North + - Talk to guards + - **Skip**: 4 + - stage: 920 + areas: + # 552: port launch + # 555: port section + - area: 552 + steps: |- + - Exit ahead + - area: 555 + steps: |- + - Go forward + - **Skip**: 1 + - stage: 930 + areas: + # 555: port section + # 556: large freight stores + # 561: airship berth access + # 564: central brig access + - area: 555 + steps: |- + - Switch to Vossler + - Go South and take the middle path + - Go East, then South to the square + - Go East, exit South + - area: 556 + steps: |- + - Follow the path South + - Downstairs, exit North + - area: 561 + steps: |- + - Follow the path East + - Exit South + - area: 564 + steps: |- + - **Skip**: 1 + - **Judges** + - Flee to the mid-East square + - Add Balthier and Fran to the party + - Change Balthier to use a Hi-Potion + - Have Vossler use Traveler + - stage: 966 + areas: + # 564: central brig access + # 876: brig no. 1 + - area: 564 + steps: |- + - Exit ahead + - area: 876 + steps: |- + - Open the back-right cell + - **Skip**: 1 + - stage: 970 + areas: + # 876: brig. no 1 + # 561: airship berth access + # 556: large freight stores + - area: 876 + steps: |- + - Exit + - area: 564 + steps: |- + - **Skip**: 1 + - stage: 990 + areas: + # 564: central brig access + # 561: airship berth access + # 555: port section + - area: 564 + steps: |- + - Switch to Vossler + - Exit ahead + - area: 561 + steps: |- + - Follow path East + - Exit South + - area: 556 + steps: |- + - Get the nearest left chest + - Go up the Southwest stairs + - Exit North + - area: 555 + steps: |- + - Go West + - **Skip**: 1 + - stage: 1000 + areas: + # 555: port section + # 552: port launch + - area: 555 + steps: |- + - Go all the way North + - Exit West + - area: 552 + steps: |- + - **Skip**: 1 + - **Ghis** + - Gambits to win + - **Skip**: 1 + - stage: 1090 + areas: + # 791: aerodrome (bhujerba) + - area: 791 + steps: |- + - **Skip**: 1 + - stage: 1100 + areas: + # 791: aerodrome (bhujerba) + # 803: travica way + - area: 791 + steps: |- + - Exit + - area: 803 + steps: |- + - Go East, then North + - Talk to guard + - **Skip**: 4 + - stage: 1240 + areas: + # 350: the western divide + # 379: platform 1 - east tanks + - area: 350 + steps: |- + - **Shop** + - **Buy** + - Cura + - Aero + - Raise + - Protect + - 5x Gold Needle + - 5x Echo Herbs + - Exit West + - area: 379 + steps: |- + - Go forward + - **Skip**: 1 + - stage: 1270 + areas: + # 379: platform 1 - east tanks + # 380: platform 1 - refinery + - area: 379 + steps: |- + - Go South up the ramp + - Go Southwest + - Exit West + - area: 380 + steps: |- + - **Skip**: 1 + - stage: 1330 + areas: + # 380: platform 1 - refinery + # 384: platform 1 - south tanks + # 387: south tank approach + # 386: yensa border tunnel + # 392: augur hill + - area: 380 + steps: |- + - Switch to Vossler + - Go down the West Ramp + - Take the North ramps all the way to a chest + - Go West + - Go Southwest + - Exit Southwest + - area: 384 + steps: |- + - Go West + - Exit Southwest + - area: 387 + steps: |- + - Go down the West ramp + - Exit West + - area: 386 + steps: |- + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Penelo | WHM | White Magick 2-4, Accessories 1-6 + | Ashe | BLM | Mystic Armor 1, Magick Lore x2, Gambit Slot, Mystic Armor 2, Staves 1, Mystic Armor 3-4, Black Magick 4 + + - **Equip** + - **Penelo** + - Unequip all + - Golden Amulet + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Balthier | 1 | Turn off | - + | Penelo | 1 | Ally: any | Raise + | Penelo | 2 | Ally: HP < 50% | Cura + + - Exit West + - area: 392 + steps: |- + - **Skip**: 1 + - stage: 1338 + areas: + # 392: augur hill + # 391: withering shores + # 398: demesne of the sandqueen + # 399: trail of fading warmth + - area: 392 + steps: |- + - Go West to the exit + - area: 391 + steps: |- + - Go West and up the the ramp + - Exit West + - area: 398 + steps: |- + - Go West down the ramp + - Use Traveler on first enemy, note current step count + - Go Southeast + - Exit West + - area: 399 + steps: |- + - Follow path West and North + - Exit Northwest + - stage: 1342 + areas: + # 403: valley of the dead + - area: 403 + steps: |- + - Don't save + - **Skip**: 1 + - stage: 1345 + areas: + # 403: valley of the dead + - area: 403 + steps: |- + - Walk forward + - stage: 1352 + areas: + # 403: valley of the dead + - area: 403 + steps: |- + - **Skip**: 1 + - **Garuda** + - Gambits + - **Skip**: 2 + - stage: 1360 + areas: + # 403: valley of the dead + - area: 403 + steps: |- + - Go upstairs + - Use the device + - **Skip**: 1 + - stage: 1364 + areas: + # 406: hall of the destroyer + # 407: hall of the sentinel + - area: 406 + steps: |- + - Go West + - **Skip**: 1 + - Flee West and exit + - area: 407 + steps: |- + - **Skip**: 1 + - Switch to Vossler + - **Party** + - **Remove** Balthier and Fran + - **Add** Basch and Penelo + - **Config** + - **Battle Mode**: Wait + - **Battle Speed**: Slow (if not already) + - **Demon Wall 2** + - Get steps within 10 of last use + - **Vossler**: Traveler + - **Skip**: 1 + - stage: 1372 + areas: + # 407: hall of the sentinel + - area: 407 + steps: |- + - Exit West + - stage: 1374 + areas: + # 410: royal passage + # 411: southfall passage + # 412: northfall passage + # 415: cloister of flame + - area: 410 + steps: |- + - **Skip**: 1 + - Switch to Vossler + - Go South + - Take the first stairs East + - Exit + - area: 411 + steps: |- + - Get chest to the West + - Hug wall to avoid trap + - Go all the way East, then South + - Use Traveler at the bottom of the stairs + - Go West to pedestal and use + - Use the teleporter + - area: 410 + steps: |- + - Go North, skipping stairs + - Get chest at the end of the path + - Exit + - area: 412 + steps: |- + - Follow path all the way East + - Go North, then West + - Use pedestal + - Take new path West to exit + - area: 415 + steps: |- + - **Skip**: 1 + - stage: 1376 + areas: + # 415: cloister of flame + - area: 415 + steps: |- + - **Battle Speed**: Fast + - Go west + - Take the first stairs + - **Skip**: 1 + - **Belias** + - Switch to Penelo + - Grab South chest + - Get to Traveler range, use at ~50% + - **Skip**: 2 + - stage: 1380 + areas: + # 415: cloister of flame + # 418: chamber of first light + - area: 415 + steps: |- + - Exit ahead + - area: 418 + steps: |- + - **Party**: Remove Penelo, add Ashe + - **Licences** + + | Character | Board | Licences | + | --------- | ----- | -------- | + | Basch | KNT | +230 HP, Second Board + | Basch | SHK | Swiftness, +70 HP, +150 HP + | Ashe | BLM | Second Board + | Ashe | BSH | Remedy Lore 1, Accessories 6 + + - **Equip** + - **Penelo**: Orrachea Armlet + - **Ashe**: Golden Amulet + - **Gambits** + + | Character | Slot | Target | Action | + | --------- | ---- | ------ | ------ | + | Vaan (off) | 1 | Ally: Vaan | Dark + | Balthier | 2 | Foe: highest HP | Steal + | Basch | 1 | Ally: HP < 70% | Hi-Potion + | Basch | 2 | Foe: Lowest HP | Attack + | Ashe (off) | 1 | Ally: Ashe | Aero + | Ashe | 2 | Foe: highest level | Aero + + - Go forward + - stage: 1390 + areas: + # 418: chamber of first light + # 406: hall of the destroyer + # 403: valley of the dead + - area: 418 + steps: |- + - **Skip**: 1 + - Go downstairs and use teleporter + - area: 406 + steps: |- + - Use teleporter + - area: 403 + steps: |- + - Go downstairs + - **Skip**: 3 + - stage: 1460 + areas: + # 872: battle launch + - area: 872 + steps: |- + - **Vossler** + - Use Reflectga Mote + - Use Aeroga Mote on all enemies + - Turn on gambits + - Use Basch to keep Vossler near group + - **Skip**: 6 + - stage: 1580 + areas: + # 290: muthru bazaar + # 253: throne road (rains) + # 254: warrior's wash + # 256: toam hills (rains) + # 264: starfall field (rains) + # 525: field of fallen wings + # 526: the switchback + # 527: haulo green + - area: 290 + steps: |- + - Go North + - Use Moogling to Southgate + - **Party**: Balthier, Fran, Ashe + - **Gambits**: Clear Ashe's first + - Get a chocobo + - area: 253 + steps: |- + - Exit Southwest + - area: 254 + steps: |- + - Go South + - Exit Southeast + - area: 256 + steps: |- + - Follow outside path to exit + - area: 264 + steps: |- + - Go West + - Go South across Bridge + - Take the East branch, then the West branch + - Exit South + - area: 525 + steps: |- + - **Skip**: 1 + - Exit South + - area: 526 + steps: |- + - Go Southeast to exit + - area: 527 + steps: |- + - Quit to title + - stage: 0 + areas: + # 12: main menu + - area: 12 + steps: |- + - Enter Trial Mode + - stage: 1580 + areas: + # 1155: stage 1 + # 1159: stage 5 + # 1163: stage 6 + - area: 1155 + steps: |- + - Get the Diamond Armlet + - area: 1159 + steps: |- + - Walk forward with Balthier + - Steal once, then walk back + - area: 1163 + steps: |- + - Quit to title + - stage: 0 + areas: + # 12: main menu + - area: 12 + steps: |- + - Load autosave + - stage: 1580 + areas: + # 527: haulo green + # 751: banks of the sogoht + - area: 527 + steps: |- + - Go South, then loop West + - Exit West, dismounting + - area: 751 + steps: |- + - **Skip**: 1 + - **Equip**: Remove all on all characters + - Talk to the guard ahead + - stage: 1626 + areas: + # 752: lull of the land + - area: 752 + steps: |- + - Go West and North to talk to the high chief + - stage: 1627 + areas: + # 752: lull of the land + - area: 752 + steps: |- + - Go West to the shop + - **Shop** (12,800 gil) + - **Sell**: all weapons, loot (not jaya stick), Diamond Armlet + - **Buy** + - Magoroku + - Flame Staff (if necessary) + - Feathered Cap + - Traveler's Vestment + - Fira + - Go North + - Talk to War Chief + - stage: 1628 + areas: + # 752: lull of the land + # 753: the elderknoll + - area: 752 + steps: |- + - Exit ahead + - area: 753 + steps: |- + - Go forward + - **Skip**: 3 + - stage: 1650 + areas: + # 751: banks of the sogoht + # 527: haulo green + - area: 751 + steps: |- + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Ashe | BSH | Mystic Armor 6 + | Ashe | BLM | Staves 3, Black Magick 5, Warmage, Magick Lore + | Ashe | BSH | Headsman + + - **Equip** + - **Ashe**: Optimise, Golden Amulet + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Ashe | 2 | Foe: highest level | Fira + | Larsa | 1 | Ally: HP < 70% | Cura + | Larsa | 2 | Ally: Ashe | Potion + | Larsa | 3 | Clear | - + | Larsa | 4 | Clear | - + | Larsa | 5 | Foe: any | Move to bottom + | Larsa | 6 | Ally: any | Phoenix Down + + - Touch Save Crystal + - Rent free Chocobo + - area: 527 + steps: |- + - Quit to title + - stage: 0 + areas: + # 12: main menu + - area: 12 + steps: |- + - Trial mode + - stage: 1650 + areas: + # 1155: stage 1 + # 1157: stage 3 + # 1159: stage 5 + # 1163: stage 6 + # 1164: stage 7 + # 1165: stage 8 + - area: 1155 + steps: |- + - Switch to Ashe, try to conserve mana + - Diamond Armlet + - area: 1157 + steps: |- + - Run behind rock for Flowering Cactoid + - area: 1159 + steps: |- + - One Fira only + - Get Bubble Mote from back left chest + - area: 1163 + steps: |- + - **Menu** + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Ashe | BSH | Magick Lore above Headsman x2, Serenity + - area: 1164 + steps: |- + - Use two Firas + - area: 1165 + steps: |- + - Return to title + - stage: 0 + areas: + # 12: main menu + - area: 12 + steps: |- + - Load autosave + - stage: 1650 + areas: + # 527: haulo green + # 536: the shred + # 531: field of light winds + - area: 527 + steps: |- + - Exit East to chocobo-only path + - area: 536 + steps: |- + - Exit North to chocobo-only path + - area: 531 + steps: |- + - Return to title + - stage: 0 + areas: + # 12: main menu + - area: 12 + steps: |- + - Trial mode + - stage: 1650 + areas: + # 1155: stage 1 + # 1157: stage 3 + # 1159: stage 5 + # 1164: stage 7 + # 1165: stage 8 + - area: 1155 + steps: |- + - Diamond Armlet + - area: 1157 + steps: |- + - Run behind rock for Flowering Cactoid + - area: 1159 + steps: |- + - One Fira only + - Get Bubble Mote from back left chest + - area: 1164 + steps: |- + - Use two Firas + - area: 1165 + steps: |- + - Return to title + - stage: 0 + areas: + # 12: main menu + - area: 12 + steps: |- + - Load autosave + - stage: 1650 + areas: + # 531: field of light winds + - area: 531 + steps: |- + - Exit East + - stage: 1658 + areas: + # 533: sunlit path + - area: 533 + steps: |- + - **Skip**: 2 + - stage: 1660 + areas: + # 533: sunlit path + # 447: paths of chained light + # 448: the needlebrake + - area: 533 + steps: |- + - Exit East + - area: 447 + steps: |- + - **Skip**: 1 + - Go all the way East + - Exit Southeast + - area: 448 + steps: |- + - **Repeat Trial Mode** + - Go East + - Dismount before barrier + - **Skip**: 1 + - Exit ahead + - stage: 1700 + areas: + # 768: road of verdant praise + - area: 768 + steps: |- + - **Skip**: 1 + - stage: 1740 + areas: + # 768: road of verdant praise + # 767: the spiritwood + # 766: fane of the path + - area: 768 + steps: |- + - Touch crystal + - Exit ahead + - area: 767 + steps: |- + - **Skip**: 1 + - Follow path North, then Southwest at circle to exit + - area: 766 + steps: |- + - **Repeat Trial Mode** + - Go East + - **Skip**: 1 + - stage: 1756 + areas: + # 766: fane of the path + # 767: the spiritwood + # 768: road of verdant praise + - area: 766 + steps: |- + - Exit Southwest + - area: 767 + steps: |- + - **Repeat Trial Mode** + - Go Northeast, then South at the circle + - Go Southwest, exit South + - area: 768 + steps: |- + - **Skip**: 1 + - stage: 1790 + areas: + # 768: road of verdant praise + - area: 768 + steps: |- + - **Shop** + + | Action | Items + | ------ | ----- + | Sell | Diamond Armlet x5 + | Buy | Mage's Hat, Mage's Habit, Shielded Armor, Demonsbane, Esuna, Nu Khai Sand x11 + + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Basch | SHK | Battle Lore x4, Swiftness, +270 HP + | Basch | KNT | Swords 5, Heavy Armor 4, Shield Block, Gambit Slot under armor 1 + | Basch | SHK | Focus, +190 HP, Spellbound, Adrenaline, Fulminating Darkness + | Basch | KNT | Accessories 6 + | Ashe | BSH | +310 HP, +230 HP, Magick Lore, +270 HP, Swiftness, Katana 2, +190 HP, Swiftness + | Ashe | BLM | Magick Lore above Headsman, Accessories 14, Spellbound, Accessories 13, Black Magick 9 + | Ashe | BSH | Mystic Armor 8, 7, 11 + | Penelo | WHM | Mystic Armor 5, Ether Lore 1, Second Board + | Penelo | BSH | +190 HP, Inquisitor, +230 HP, Magick Lore, +270 HP, Swiftness + | Penelo | WHM | Gambit Slot next to Attack, bottom left Gambit Slot + | Penelo | BSH | Gambit slot to far right (top) + | Penelo | WHM | Bottom right Spellbound, White Magick 5, 9, 7, Channeling, Magick Lore (left), Mystic Armor 10 + + - **Menu** + - **Party**: Basch, Ashe, Penelo + - **Equip** + - **Basch**, **Ashe**, **Penelo**: Optimise + - **Penelo**: Golden Amulet + - **Ashe**: Flame Staff, Bangle + - **Basch**: Remove weapon, Dawn Shard + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Basch | 1 | Ally: Any | Nu Khai Sand + | Basch | 2 | Turn off | Move to bottom + | Basch | 2 | Ally: Penelo | Phoenix Down + | Ashe | 1 | Foe: lowest HP | Attack (off) + | Penelo | 1 | Turn off | - + | Penelo | 3 | Ally: any | Esuna + | Penelo | 4 | Foe: highest level | Dispel + | Penelo | 5 | Ally: any | Protect + + - Teleport to Jahara + # 751: Banks of the Sogoht + - area: 751 + steps: |- + - Get chocobo + # 536: The Shred + - area: 536 + steps: |- + - Exit East chocobo-only + - Go East, dismount near Southeast exit + - Walk towards exit + - **Skip**: 1 + - stage: 1810 + areas: + # 536: The Shred + - area: 536 + steps: |- + - Exit ahead + # 712: North Entrance + - area: 712 + steps: |- + - **Skip**: 1 + - Switch to Basch + - Turn off fast-forward for next step + - **Ashe**: Kill Larsa with Fira + - Cancel cast after first hit + - Go South, use switchboard + - Exit South to opened door + # 713: Pithead Junction A + - area: 713 + steps: |- + - Exit West + # 714: Phase 1 Shaft + - area: 714 + steps: |- + - Follow path South + - Group and kill bats + - Exit West + # 715: Phase 1 Dig + - area: 715 + steps: |- + - Follow path + - South at intersection + - East at intersection + - Exit East + # 716: Crossover A + - area: 716 + steps: |- + - Follow path + - Left branch + - Exit East + # 719: Crossover B + - area: 719 + steps: |- + - Slight North, East as far as possible + - Exit South + # 717: Pithead Junction B + - area: 717 + steps: |- + - Use button + - Have Ashe kill everything + - Don't pick up drops + - Exit West + # 716: Crossover A + - area: 716 + steps: |- + - Go West + - North at branch + - Exit East + # 719: Crossover B + - area: 719 + steps: |- + - Exit way you just entered + # 716: Crossover A + - area: 716 + steps: |- + - Go South + - East branch to exit + # 717: Pithead Junction B + - area: 717 + steps: |- + - Use button + - Pick up gold loot + - Exit North + # 719: Crossover B + - area: 719 + steps: |- + - Go North, West to exit + # 716: Crossover A + - area: 716 + steps: |- + - Go back and return to jellies room + # 717: Pithead Junction B + - area: 717 + steps: |- + - Continue farming until ~75 chain + - Exit West and go to second screen + # 719: Crossover B + - area: 719 + steps: |- + - Exit North + # 718: Staging Shaft + - area: 718 + steps: |- + - **Skip**: 1 + - stage: 1820 + areas: + # 718: Staging Shaft + - area: 718 + steps: |- + - Touch crystal + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Penelo | WHM | Serenity, Gambit under Mystic Armor 1 + | Basch | SHK | Ninja Swords 1 above Quickening + + - **Menu** + - **Equip** + - **Basch**: Optimise + - **Ashe**: Optimise + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Basch | 1 | Ally: any | Echo Herbs + | Basch | 3 | Turn on | - + | Ashe | 1 | Turn on | - + | Penelo | 1 | Turn on | - + | Penelo | 6 | Ally: Penelo | Echo Herbs (move to top) + | Penelo | 3 | Ally: HP < 70% | Cura + + - Go North + - Bacchus Wine on Ashe before exit if possible + - Exit + # 722: Ore Separation + - area: 722 + steps: |- + - **Skip**: 1 + - **Tiamat** + - Control Penelo + - Stay spread out + - Gambit to win + - **Skip**: 3 + - stage: 1950 + areas: + # 768: Road of Verdant Praise + - area: 768 + steps: |- + - **Menu** + - **Battle Speed**: slow + - Exit ahead + # 448: The Needlebrake + - area: 448 + steps: |- + - Switch to Basch + - Go West past exit + - Go South at intersection + - Go through barrier + - Follow path East to exit + # 453: The Rustling Chapel + - area: 453 + steps: |- + - Take the Southernmost West path + - Go all the way South to exit + # 539: Walk of Flitting Rifts + - area: 539 + steps: |- + - **Skip**: 1 + - Go East to Exit + # 469: Icebound Flow + - area: 469 + steps: |- + - **Skip**: 1 + - Go North + - Go East to exit + # 468: Frozen Brook + - area: 468 + steps: |- + - Exit North + # 465: Freezing Gorge + - area: 465 + steps: |- + - **Skip**: 2 + - stage: 1976 + areas: + # 465: Freezing Gorge + - area: 465 + steps: |- + - Go all the way North to exit + # 742: Sand-strewn Pass + - area: 742 + steps: |- + - **Skip**: 1 + - stage: 1982 + areas: + # 742: Sand-strewn Pass + - area: 742 + steps: |- + - **Shop** + - **Sell**: All loot but Teleport Stones + - \> 50,000 gil = no Thief's Cuffs + - \> 52,000 gil = no Thief's Cuffs or Ruby Ring + - Touch crystal + - Exit North + - stage: 1984 + areas: + # 741: Temple Approach + - area: 741 + steps: |- + - Follow path to exit + # 738: Temple Grounds + - area: 738 + steps: |- + - **Skip**: 1 + - stage: 1986 + areas: + # 738: Temple Grounds + - area: 738 + steps: |- + - Follow path to temple + # 736: Hall of the Light + - area: 736 + steps: |- + - Go forward + - **Skip**: 3 + - stage: 2050 + areas: + # 736: Hall of the Light + - area: 736 + steps: |- + - Exit ahead + # 738: Temple Grounds + - area: 738 + steps: |- + - Retrace your steps + # 741: Temple Approach + - area: 741 + steps: |- + - Retrace your steps + # 742: Sand-strewn Pass + - area: 742 + steps: |- + - Rent chocobo + # 465: Freezing Gorge + - area: 465 + steps: |- + - Go all the way South to exit + # 468: Frozen Brook + - area: 468 + steps: |- + - Go all the way South to exit again + # 473: Path of the Firstfall + - area: 473 + steps: |- + - Follow path to exit + # 474: Spine of the Icewyrm + - area: 474 + steps: |- + - Go all the way South to exit + # 475: Silverflow's End + - area: 475 + steps: |- + - Go South-by-Southwest all the way to exit + # 593: Walk of Sky + - area: 593 + steps: |- + - Go forward to exit + # 594: Walk of Mind + - area: 594 + steps: |- + - Dismount in front of door + - Exit + # 597: Ward of Measure + - area: 597 + steps: |- + - **Skip**: 1 + - stage: 2057 + areas: + # 597: Ward of Measure + - area: 597 + steps: |- + - Go around to pedestal + - Touch pedestal + # 606: Ward of Velitation + - area: 606 + steps: |- + - Exit West + # 607: Walk of Torn Illusion + - area: 607 + steps: |- + - Go North and East to pedestal + - Touch pedestal + - Return where you entered + # 606: Ward of Velitation + - area: 606 + steps: |- + - Go South and East to exit + # 608: Walk of Revelation + - area: 608 + steps: |- + - Follow path around to middle exit + # 609: Ward of the Sword-King + - area: 609 + steps: |- + - Go West and South to touch the sword + - Go all the way North and touch device + # 597: Ward of Measure + - area: 597 + steps: |- + - Go West and North + - Exit West + # 598: Cold Distance + - area: 598 + steps: |- + - Exit West + # 599: Walk of Prescience + - area: 599 + steps: |- + - **Ruby Ring**: West to treasure chest, then back East + - Follow North path + - Turn statue to face left + - Exit ahead + # 600: Walk of Reason + - area: 600 + steps: |- + - Follow path to door + - Go through and to next door + - Follow path South to left-most chest with Ashura + - Go back and take stairs North + - Go East and up stairs South + - Continue South to statue + - Turn statue so facing left + - All the way North to exit + # 598: Cold Distance + - area: 598 + steps: |- + - **Menu** + - **Equip** + - **Basch**: Optimise, remove Headgear + - **Battle speed**: Fast + - Follow path + - Exit East + # 603: Ward of Steel + - area: 603 + steps: |- + - Follow path to open door + - **Skip**: 1 + - **Vinuskar** + - Switch to Penelo + - Gambits to win + - Southeast trap: Manafont + - Southwest trap: Rejuvenation + - **Skip**: 1 + - stage: 2100 + areas: + # 603: Ward of Steel + - area: 603 + steps: |- + - Open East door, grabbing chest + - Face statue towards you + - Exit West + # 598: Cold Distance + - area: 598 + steps: |- + - Exit North + # 597: Ward of Measure + - area: 597 + steps: |- + - Go upstairs + - All the way South to device + - Touch device + # 609: Ward of the Sword-King + - area: 609 + steps: |- + - Exit South + # 612: Hall of Worth + - area: 612 + steps: |- + - **Skip**: 1 + - **Mateus** + - Switch to Penelo + - Get West chest for Elixir + - Bubble Mote in East chest if needed + - South trap is mana + - **Skip**: 1 + - stage: 2150 + areas: + # 612: Hall of Worth + - area: 612 + steps: |- + - Switch to Basch + - Exit South + # 615: Vault of the Champion + - area: 615 + steps: |- + - Walk forward + - **Skip**: 1 + - stage: 2200 + areas: + # 615: Vault of the Champion + - area: 615 + steps: |- + - Exit ahead + # 612: Hall of Worth + - area: 612 + steps: |- + - Exit North + # 609: Ward of the Sword-King + - area: 609 + steps: |- + - All the way North + - Use device + # 597: Ward of Measure + - area: 597 + steps: |- + - Exit North + # 594: Walk of Mind + - area: 594 + steps: |- + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Basch | SHK | Accessories 18 + | Ashe | BLM | Top-left Quickening, +390 HP + | Ashe | BSH | Katana 4, Battle Lore next to Quickening + | Penelo | BSH | Mystic Armor 7, 8 + | Penelo | WHM | Accessories 12, 14 + + - **Menu** + - **Equip** + - **Penelo**: Orrachea Armlet + - **Ashe**: Sage's Ring, Flame Staff + - **Basch**: Golden Amulet + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Ashe | 1 | Turn off | - + | Penelo | 1 | Ally: Ashe | Cura (move to #4) + + - Walk forward + - **Skip**: 1 + - stage: 2250 + areas: + # 594: Walk of Mind + - area: 594 + steps: |- + - Teleport to Mt. Bur-Omisace + # 742: Sand-strewn Pass + - area: 742 + steps: |- + - Exit North + - stage: 2290 + areas: + # 741: Temple Approach + - area: 741 + steps: |- + - Follow path + # 738: Temple Grounds + - area: 738 + steps: |- + - Follow path to temple + # 737: Hall of the Light + - area: 737 + steps: |- + - **Skip**: 1 + - **Judge Bergan** + - Gambits to win + - **Skip**: 2 + - stage: 3050 + areas: + # 738: Temple Grounds + - area: 738 + steps: |- + - Exit West + # 741: Temple Approach + - area: 741 + steps: |- + - Exit South + # 742: Sand-strewn Pass + - area: 742 + steps: |- + - Teleport to Nalbina + # 630: West Barbican + - area: 630 + steps: |- + - Exit North + # 209: Southern Skirts + - area: 209 + steps: |- + - **Skip**: 1 + - All the way West to exit + # 210: Summit Path + - area: 210 + steps: |- + - Go West + - Exit South + # 133: Broken Sands + - area: 133 + steps: |- + - Go Southwest for Berserker Bracers + - Exit North + # 210: Summit Path + - area: 210 + steps: |- + - Exit Northwest + # 1151: Babbling Vale + - area: 1151 + steps: |- + - Go North-by-Northwest + - **Thief's Cuffs**: Grab chest next to exit + - Exit North + # 218: Trail of Sky-flung Stone + - area: 218 + steps: |- + - Take East branch + - Exit North + # 219: Northern Skirts + - area: 219 + steps: |- + - Go West, then North + - Exit Northwest + # 220: Halny Crossing + - area: 220 + steps: |- + - Exit Northwest + # 151: The Omen-Spur + - area: 151 + steps: |- + - **Skip**: 1 + - Follow path + - Exit Northeast + # 156: Path of Hours + - area: 156 + steps: |- + - Exit North + # 152: Trunkwall Road + - area: 152 + steps: |- + - Go all the way East + - Take every North and East + - Exit East + # 153: Diverging Way + - area: 153 + steps: |- + - Take Southernmost East path + - Exit East + # 908: Living Chasm + - area: 908 + steps: |- + - Talk to moogle + - Exit + # 153: Diverging Way + - area: 153 + steps: |- + - Exit Northwest + # 152: Trunkwall Road + - area: 152 + steps: |- + - North, South, West, South + - Talk to moogle in the nub + - South, then West to exit + # 156: Path of Hours + - area: 156 + steps: |- + - Talk to Eastern moogle + - Exit North + # 152: Trunkwall Road + - area: 152 + steps: |- + - Go North + - Exit West + # 154: Sun-dappled Path + - area: 154 + steps: |- + - Follow path South, then North + - Exit North + # 155: Garden of Decay + - area: 155 + steps: |- + - Go all the way North + - Talk to both moogles + - Go with them to the gate + - stage: 3070 + areas: + # 908: Living Chasm + - area: 908 + steps: |- + - Talk to the moogle boss + - Exit South + # 483: Kaukula Pass + - area: 483 + steps: |- + - **Skip**: 1 + - Exit South + # 478: The Reseta Strand + - area: 478 + steps: |- + - Exit Southeast + # 479: Pora-Pora Sands + - area: 479 + steps: |- + - Exit Southeast + # 481: Cape Uahuk + - area: 481 + steps: |- + - Exit East + # 488: Hunters' Camp + - area: 488 + steps: |- + - Go West + - **Skip**: 1 + - stage: 3100 + areas: + # 488: Hunters' Camp + - area: 488 + steps: |- + - **Shop** + + | Action | Items + | ------ | ----- + | Buy | Astrakhan Hat (Ashe), Carmagnole (Ashe), Firaga, Remedy x4, Bacchus's Wine (x11), Gold Needle x2, Echo Herbs x3 + + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Ashe | 2 | Foe: highest level | Firaga + + - Rent a chocobo (Tchita) + # 491: Caima Hills + - area: 491 + steps: |- + - Exit Northeast + # 493: Limatra Hills + - area: 493 + steps: |- + - Exit Northeast + # 494: Rava's Pass + - area: 494 + steps: |- + - Exit North + # 145: Realm of the Elder Dream + - area: 145 + steps: |- + - **Skip**: 1 + - Go Southeast + - Exit East + # 144: The Skytrail + - area: 144 + steps: |- + - Go East + - Take South-facing exit after bridge + # 142: The Chosen Path + - area: 142 + steps: |- + - Dismount + - Touch crystal + - Talk to child + - Switch to Ashe + - Exit East + # 139: The Highlands + - area: 139 + steps: |- + - Go East, killing snakes + - Exit North + # 140: Fields of Eternity + - area: 140 + steps: |- + - Exit North + - stage: 3120 + areas: + # 187: Doubt Abandoned + - area: 187 + steps: |- + - Don't save + - **Skip**: 1 + - stage: 3130 + areas: + # 187: Doubt Abandoned + - area: 187 + steps: |- + - Switch to Basch + - Take the East path North + - Take last West + - Go North to exit + # 200: Hall of Lambent Darkness + - area: 200 + steps: |- + - **Skip**: 1 + - **Mandragoras** + - Gambits to win + - Pilot Ashe to finish if necessary + - stage: 3150 + areas: + # 200: Hall of Lambent Darkness + - area: 200 + steps: |- + - **Skip**: 1 + - Exit East + # 186: The Acolyte's Burden + - area: 186 + steps: |- + - Get South chest + - Follow path North to dip + - Get chest + - Go North + - Exit East + # 185: Mirror of the Soul + - area: 185 + steps: |- + - Go East, then North + - Follow path all the way West + - Exit North + # 184: Falls of Time + - area: 184 + steps: |- + - Go Northeast + - Exit North + # 192: Destiny's March + - area: 192 + steps: |- + - Go Northeast to door + - Go North to door (x3) + - Exit North + # 198: Hall of Shadowlight + - area: 198 + steps: |- + - **Skip**: 1 + - **Ahriman** + - Switch to Penelo + - Get West chest + - Gambits to win + - **Skip**: 1 + - stage: 3200 + areas: + # 198: Hall of Shadowlight + - area: 198 + steps: |- + - Use Float Mote + - Exit East + # 193: Temptation Eluded + - area: 193 + steps: |- + - Follow path + - Exit North + # 194: Chamber of the Chosen + - area: 194 + steps: |- + - Go up the slope + - Use pedestal + - **Skip**: 1 + # 188: Skybent Chamber + - area: 188 + steps: |- + - Exit North + - **Skip**: 1 + - stage: 3210 + areas: + # 763: Alley of Low Whispers + - area: 763 + steps: |- + - Go Northwest + - Go West + - Follow path North to West exit + # 762: Alley of Muted Sighs + - area: 762 + steps: |- + - Talk to Lucky Man + - Go West, then South toward save crystal + - Touch crystal + - Talk to Imperial + - Go North and East to man in corner + - Talk, then go West + - Talk to Jules + - **Skip**: 1 + - stage: 3250 + areas: + # 641: Trant + - area: 641 + steps: |- + - Run forward + - Exit Northwest + - stage: 3253 + areas: + # 640: Molberry + - area: 640 + steps: |- + - Exit South + # 745: Nilbasse + - area: 745 + steps: |- + - East to Weapon Shop + # 747: Vint's Armaments + - area: 747 + steps: |- + - **Shops** + - **Armor** (31,800 gil) + + | Action | Items + | ------ | ----- + | Sell | Weapons except Flame Staff, Ashura, and Sword of Kings + | Buy | Gaia Hat, Maduin Gear, Platinum Helm, Platinum Armor + + - **Weapons** (9,300 gil, need 2,500 gil left over) + + | Action | Items + | ------ | ----- + | Buy | Yakei + + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Basch | SHK | Battle Lore (bottom) + | Basch | KNT | Heavy Armor 8, Greatswords 2 + | Ashe | BSH | Battle Lore (down) + | Penelo | BSH | +110 HP, Swiftness (up), Belias + + - **Equip** + - **Basch**, **Ashe**, **Penelo**: Optimise + - **Ashe**: Flame Staff + - Exit + # 745: Nilbasse + - area: 745 + steps: |- + - Ahead to cabbie + - stage: 3255 + areas: + # 745: Nilbasse + - area: 745 + steps: |- + - Woman in purple (Senior Researcher) + - East to man in purple (Researcher) + - Grey man with blonde hair (Archadian Gentry, Wages Halved) + - West to woman with green top (Archadian Gentry) + - Grey, blonde man in front of cab (Archadian Gentry, Working up a Sweat) + - Running man in shorts (Eager Crier) + - Back to cab guide + - stage: 3260 + areas: + # 756: Tsenoble + - area: 756 + steps: |- + - Go North + - **Skip**: 1 + - stage: 3300 + areas: + # 756: Tsenoble + - area: 756 + steps: |- + - Go South + - Talk to cabbie, option 2 + - **Skip**: 1 + - stage: 3350 + areas: + # 1008: 66th Floor + - area: 1008 + steps: |- + - Go West + - stage: 3355 + areas: + # 1008: 66th Floor + - area: 1008 + steps: |- + - Go all the way North to exit + - Go to Floor 67 + # 1019: 67th Floor + - area: 1019 + steps: |- + - Go East + - Exit North + - **Skip**: 1 + - stage: 3400 + areas: + # 1054: 67th Floor + - area: 1054 + steps: |- + - Enter second room to the right + # 1060: Rm 6703 East + - area: 1060 + steps: |- + - Use Bulkhead Controls + - Exit + # 1054: 67th Floor + - area: 1054 + steps: |- + - Go back to elevator + - Go to Floor 68 + # 1067: 68th Floor + - area: 1067 + steps: |- + - Go left, then left again + - Enter room + # 1079: Rm 6803 East + - area: 1079 + steps: |- + - Use Bulkhead Controls + - Exit + # 1067: 68th Floor + - area: 1067 + steps: |- + - Go left three times + - Enter room + # 1076: Rm 6804 West + - area: 1076 + steps: |- + - Use Bulkhead Controls + - Exit + # 1067: 68th Floor + - area: 1067 + steps: |- + - Left, right, right, left, left + - Enter room + # 1074: Rm 6811 West + - area: 1074 + steps: |- + - Use Bulkhead Controls + - Exit + # 1067: 68th Floor + - area: 1067 + steps: |- + - Left, left, right to elevator + - Go to Floor 70 + - **Skip**: 1 + - stage: 3440 + areas: + # 1047: 70th Floor + - area: 1047 + steps: |- + - Touch crystal + - Make sure party has Protect + - Exit upstairs + # 286: Energy Transitarium + - area: 286 + steps: |- + - **Skip**: 1 + - **Cid 1** + - Switch to Penelo + - Let Ashe Fira twice to kill bits + - **Equip**: + - **Ashe**: Yakei, Berserker Bracelets + - **Penelo**: Sage's Ring + - South chests for Holy Mote and Hastega Mote + - **Skip**: 5 + - stage: 4150 + areas: + # 826: Saccio Lane + - area: 826 + steps: |- + - Exit Northeast + # 825: Quayside Court + - area: 825 + steps: |- + - **Equip**: **Basch**: Sash + - Exit East + # 824: Gallerina Marketplace + - area: 824 + steps: |- + - Go North to Magic Shop + - **Shop** (7,700 gil) + + | Action | Items + | ------ | ----- + | Sell | Shielded Armor, Mage's Habit, Mage's Hat, Ruby Ring + | Buy | Curaja + + - Exit Northeast + # 823: Sea Breeze Lane + - area: 823 + steps: |- + - Get chest south of shop + - Teleport to Mt. Bur-Omisace + # 742: Sand-strewn Pass + - area: 742 + steps: |- + - Rent chocobo + # 465: Freezing Gorge + - area: 465 + steps: |- + - Exit South + # 468: Frozen Brook + - area: 468 + steps: |- + - Exit West + # 469: Icebound Flow + - area: 469 + steps: |- + - Exit Southwest + # 539: Walk of Flitting Rifts + - area: 539 + steps: |- + - Dismount before Southeast exit + - Exit Southeast + # 540: Walk of Stolen Truths + - area: 540 + steps: |- + - All the way South (stay Westish) to exit + # 542: Antiquity's End + - area: 542 + steps: |- + - Touch crystal + - Exit South + - **Skip**: 1 + - stage: 4160 + areas: + # 542: Antiquity's End + - area: 542 + steps: |- + - **Basch**: Bacchus's Wine + - **Penelo**: Hastega Mote + - Exit ahead + # 545: Redolent Glade + - area: 545 + steps: |- + - **Skip**: 1 + - **Rafflesia** + - Childish Gambito + - **Skip**: 1 + - stage: 4200 + areas: + # 545: Redolent Glade + - area: 545 + steps: |- + - Go North + - Get chest to the West before exit + # 542: Antiquity's End + - area: 542 + steps: |- + - Touch crystal + - Exit South + # 545: Redolent Glade + - area: 545 + steps: |- + - Switch to Basch + - **Equip** + - **Ashe**: Flame Staff, remove accessory + - Exit South + # 548: White Magick's Embrace + - area: 548 + steps: |- + - Go Southwest to exit + # 549: Ice Field of Clearsight + - area: 549 + steps: |- + - Go into Southwest shrine + - Kill mantis + - Open menu and find exit with greenery + - Divert West slightly for chest with Bubble Belt + - Go to next shrine + - Kill behemoths + - Exit Southwest + # 550: The Edge of Reason + - area: 550 + steps: |- + - Go Southwest to middle shrine + - Follow shrines, killing stuff + - At Southwest shrine, go East for Defender chest + - **Equip**: **Basch**: Optimise + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Penelo | 4 | Ally: HP < 50% | Curaja (move to #2) + + - Go back to Southwest shrine, go to West door + - Summon Belias + - Exit + - **Skip**: 2 + - stage: 4250 + areas: + # 686: Gate of Earth + - area: 686 + steps: |- + - Go forward + - Touch crystal + - Use device + - **Skip**: 1 + - stage: 4295 + areas: + # 687: Gate of Water + - area: 687 + steps: |- + - **Before gate** + - Switch to Penelo + - **Basch**: Bacchus's Wine + - **Ashe**: Domaine Calvados on Basch + - Go forward + - **Skip**: 1 + - **Daedalus** + - Nice gambits bro + - **Skip**: 1 + - stage: 4300 + areas: + # 687: Gate of Water + - area: 687 + steps: |- + - **Battle Speed**: slow + - Touch device + # 690: The Trimahla Water-Steps + - area: 690 + steps: |- + - Despawns? TODO + - Go South, use device + - Continue South, use device + - Go North, up one ramp and down one + - Then go South + - Follow path to exit + # 691: The Aadha Water-Steps + - area: 691 + steps: |- + - Despawn enemies + - Follow path, skipping devices + - At barrier, continue South and follow path + - Use device + - Return to Northwest-most exit + # 694: The Haalmikah Water-Steps + - area: 694 + steps: |- + - **Skip**: 1 + - stage: 4320 + areas: + # 694: The Haalmikah Water-Steps + - area: 694 + steps: |- + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Basch | SHK | Accessories 17 + + - **Equip** + - **Basch**: Bubble Belt + - **Ashe**: Berserker Bracers, Optimise + - **Battle Speed**: fast + - Switch to Basch + - Turn gambits back on + - Go forward + - Touch crystal + - Exit + # 695: Gate of Fire + - area: 695 + steps: |- + - Go Southwest, then Northwest + - Go Northeast for hidden path + - Before boss, have Penelo use Bubble Mote on Ashe + - **Skip**: 1 + - **Tyrant** + - Switch to Penelo + - Around 70% HP, use Bacchus's Wine on Basch + - **Skip**: 1 + - stage: 4350 + areas: + # 695: Gate of Fire + - area: 695 + steps: |- + - **Battle Speed**: slow + - **Equip**: **Ashe**: remove Berserker Bracers + - Switch to Ashe + - Use device + # 621: A Prama Vikaari + - area: 621 + steps: |- + - Exit to Ashe's right + # 622: Kabonii Jilaam Pratii'vaa + - area: 622 + steps: |- + - Go forward + - Exit left + # 623: Kabonii Jilaam Avaa + - area: 623 + steps: |- + - Go forward + - Exit right + # 624: Dha Vikaari Bhrum + - area: 624 + steps: |- + - Use device + # 926: A Vikaari Kabonii + - area: 926 + steps: |- + - Exit to Ashe's far left + # 927: Sthaana Cancer + - area: 927 + steps: |- + - Use device + - Return the way you came + # 926: A Vikaari Kabonii + - area: 926 + steps: |- + - Switch to Basch + - Exit far left + # 929: Bhrum Pis Pratii + - area: 929 + steps: |- + - Get chest + - Continue straight + # 930: Dha Vikaari Trahk + - area: 930 + steps: |- + - Use device + # 332: A Vikaari Bhrum + - area: 332 + steps: |- + - Exit to Basch's slight left + # 333: Trahk Pis Praa + - area: 333 + steps: |- + - Exit right + # 334: Sthaana Pisces + - area: 334 + steps: |- + - Use device + - Return the way you came + # 333: Trahk Pis Praa + - area: 333 + steps: |- + - Grab chest + - Exit left + # 332: A Vikaari Bhrum + - area: 332 + steps: |- + - Exit left + # 335: Dha Vikaari Jula + - area: 335 + steps: |- + - Use device + # 341: Crystal Core + - area: 341 + steps: |- + - **Skip**: 1 + - stage: 4370 + areas: + # 341: Crystal Core + - area: 341 + steps: |- + - Go forward + - Touch crystal + - Use device + # 698: Gate of Wind + - area: 698 + steps: |- + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Basch | 1 | Ally: Penelo | Echo Herbs + | Basch | 3 | Foe: highest level | Attack + + - **Equip** + - **Ashe**, **Penelo**: Optimise + - **Ashe**: Berserker Bracers + - **Battle Speed**: fast + - Use Bubble Mote on Ashe + - Use door + - **Skip**: 1 + - **Shemhazai** + - Switch to Penelo + - Run around arena with Penelo for MP + - Get West chest for Hastega Mote + - **Skip**: 1 + - stage: 4400 + areas: + # 698: Gate of Wind + - area: 698 + steps: |- + - Switch to Basch + - Exit ahead + - Use device downstairs + - **Skip**: 3 + - stage: 5100 + areas: + # 698: Gate of Wind + - area: 698 + steps: |- + - Use device + # 686: Gate of Earth + - area: 686 + steps: |- + - Go East + - Teleport to Balfonheim + # 823: Sea Breeze Lane + - area: 823 + steps: |- + - Exit South + # 824: Gallerina Marketplace + - area: 824 + steps: |- + - Exit West + # 825: Quayside Court + - area: 825 + steps: |- + - Go West to Weapon Shop + # 833: Beruny's Armaments + - area: 833 + steps: |- + - **Weapon Shop** (11,600 gil) + + | Action | Items + | ------ | ----- + | Sell | Ashura, Carmagnole + | Buy | Ame-no-Murakumo + # 825: Quayside Court + - area: 825 + steps: |- + - Exit West + # 826: Saccio Lane + - area: 826 + steps: |- + - Go South + - Talk to guard + - **Skip**: 1 + - stage: 5160 + areas: + # 826: Saccio Lane + - area: 826 + steps: |- + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Reddas | 1 | Off | - + | Reddas | 3 | Off | - + | Reddas | 4 | Off | - + | Reddas | 5 | Off | - + | Reddas | 2 | Foe: highest level | Move to #10 + | Reddas | 9 | Ally: any | Eye Drops + | Reddas | 8 | Ally: Penelo | Echo Herbs + + - Exit North + # 825: Quayside Court + - area: 825 + steps: |- + - Exit East + # 824: Gallerina Marketplace + - area: 824 + steps: |- + - Exit first South + # 827: Chivany Breakwater + - area: 827 + steps: |- + - Exit East + # 797: Aerodrome (Balfonheim Port) + - area: 797 + steps: |- + - Back left airship NPC + - Travel to The Ridorana Cataract + - **Skip**: 2 + - stage: 5200 + areas: + # 509: Footfalls of the Past + - area: 509 + steps: |- + - Exit East + # 511: Echoes from Time's Garden + - area: 511 + steps: |- + - Take middle North path to exit + # 517: City of Other Days + - area: 517 + steps: |- + - Follow main path East to exit + # 518: Path of Hidden Blessing + - area: 518 + steps: |- + - Follow path (hug right) + - Avoid Save Crystal traps + - Touch crystal + - Exit North + - **Skip**: 1 + # 522: They Who Thirst Not + - area: 522 + steps: |- + - **Basch**: Domaine Calvados + - **Reddas**: Domaine Calvados on Ashe + - **Basch**: Bacchus's Wine + - **Reddas**: Bubble Mote on Ashe + - Switch to Penelo + - Go East + - **Skip**: 1 + - **Hydro** + - Run circles for MP + - Use Elixir on Penelo if Fearga'd + - **Skip**: 1 + - stage: 5300 + areas: + # 522: They Who Thirst Not + - area: 522 + steps: |- + - Go East + - **Skip**: 2 + - stage: 5303 + areas: + # 1101: The Wellspring + - area: 1101 + steps: |- + - Switch to Basch + - Touch crystal Northwest + - Exit South + # 1111: Wellspring Labyrinth + - area: 1111 + steps: |- + - **Equip**: **Ashe**: Optimise + - Follow path all the way East to exit + - Kill stuff for Black Orbs on the way + - 2/3 orbs here, 0/1 on North side + # 1101: The Wellspring + - area: 1101 + steps: |- + - Follow path North to device and use + - Return the way you came + # 1111: Wellspring Labyrinth + - area: 1111 + steps: |- + - Follow path all the way West to exit + # 1101: The Wellspring + - area: 1101 + steps: |- + - Go Southeast + - Use device + - Exit North + # 1111: Wellspring Labyrinth + - area: 1111 + steps: |- + - Follow path all the way East to exit + # 1101: The Wellspring + - area: 1101 + steps: |- + - Follow path + - Use device + - Return the way you came + # 1111: Wellspring Labyrinth + - area: 1111 + steps: |- + - Go up the stairs + - Go North and take exits until there's an intersection + - Go East at intersection + - Follow path to door + - Use door + # 1113: Dunes of Profaning Wind + - area: 1113 + steps: |- + - Go ahead and right + - **Basch**: Domaine Calvados + - **Skip**: 1 + - **Pandaemonium** + - Switch to Penelo + - Run circles for MP + - Have Reddas use Arise on boss after Greater Barrier + - **Skip**: 1 + # 1114: Blackrock Vault + - area: 1114 + steps: |- + - Switch to Basch + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Basch | KNT | Greatswords 3, Heavy Armor 10 + | Ashe | BSH | Swiftness (down), +435 HP, Katana 5 + | Penelo | WHM | Rods 3, Channeling, Battle Lore (right), Channeling, Quickening (top mid) + + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Penelo | 2 | Turn off | - + | Penelo | 5 | Turn off | - + | Penelo | 6 | Ally: Penelo | Protect + + - Exit to dark door + # 1111: Wellspring Labyrinth + - area: 1111 + steps: |- + - Grab chest for Hermes Sandals + - Go all the way North + - Go all the way West + - Go South, down the stairs, and exit + # 1101: The Wellspring + - area: 1101 + steps: |- + - Touch crystal + - Use teleporter device + - stage: 5320 + areas: + # 1115: Wellspring Ravel - 1st Flight + - area: 1115 + steps: |- + - Use door ahead + - Go North, kill enemies + - Go up the stairs, kill Brainpans + - Follow new path, kill enemies, then Brainpan + - Follow path, kill enemies and Brainpan + - Continue up the stairs and around corner for another Brainpan + - Go through doorway and North, kill Brainpan + - Get chest for Dragon Helm + - Go back downstairs and East across new path + - Flee to exit + # 1116: Wellspring Ravel - 2nd Flight + - area: 1116 + steps: |- + - Follow path to Brainpan in corner + - Go in doorway and West to Brainpan + - Exit doorway and West to Brainpan + - Follow path West to Brainpan x3 + - Go across new path to exit + # 1118: Wellspring Ravel - 3rd Flight + - area: 1118 + steps: |- + - Follow path to Brainpan x2 + - Go up the stairs and kill enemies + - Use Southwest red door + - Ahead to Brainpan + - South to Brainpan + - Set up Penelo for despawns here + - Run to the corner in front of East stairs, despawn + - Go up the East stairs, bring Penelo + - Follow path to Brainpan x1 (if despawn worked) + - Follow new path, kill Brainpan (avoid spooky Brainpan) + - Follow path until intersection + - Kill Brainpan x9 by respawning in the loop + - Go across new path to exit + # 1119: Wellspring Ravel - 4th Flight + - area: 1119 + steps: |- + - Follow path to Brainpan x2 + - Continue following path + - Kill Brainpan on 42F + - Continue on the main path across green bridge + - Follow path to exit + # 1102: Horizon's Break + - area: 1102 + steps: |- + - Switch to Basch + - Touch crystal + - Go South + - **Equip**: **Ashe**: Flame Staff, remove Berserker Bracers + - Exit in the L-shaped corridor + # 1122: Horizon's Cusp + - area: 1122 + steps: |- + - Follow path + - Grab both chests before door + - Open door + # 1121: Marsh of Profaning Wind + - area: 1121 + steps: |- + - Go right + - **Skip**: 1 + - **Slyt** + - Switch to Penelo + - **Skip**: 1 + # 1122: Horizon's Cusp + - area: 1122 + steps: |- + - Open door ahead + - Follow path + - Use device + - **Skip**: 1 + # 1103: The Reach + - area: 1103 + steps: |- + - Go South + - Use device + - Turn off Basch's gambits + - Exit through purple door + - Go left + - Go upstairs to exit + # 1134: Station of Banishment + - area: 1134 + steps: |- + - Go left, right, right + - Go upstairs + # 1136: Station of Suffering + - area: 1136 + steps: |- + - Go left, ahead, right, left + - Follow path all the way back + - Go north upstairs to exit + # 1138: Station of Ascension + - area: 1138 + steps: |- + - **Battle speed**: slow + - Go ahead, right, ahead, right + - Go out to the circle + - Go West to the stairs + - Go West and South to chest with Dragon Mail + - Go back to circle + - Go North to stairs + - Use West illusory wall + - Exit upstairs + # 1104: Reach of the Damned + - area: 1104 + steps: |- + - Go to circle + - Touch crystal + - Go South + - Take the L-shaped corridor to exit + # 1133: The Bounds of Truth + - area: 1133 + steps: |- + - Follow path + - Grab both chests before door + - **Equip** + - **Penelo**, **Ashe**, **Basch**: optimise + - **Ashe**: Berserker Bracers + - **Gambits** + + | Character | Slot | Target | Action + | --------- | ---- | ------ | ------ + | Penelo | 2 | Ally: HP < 70% | Curaja (on) + | Penelo | 5 | Turn on | - + + - **Battle speed**: fast + - **Basch**: Domaine Calvados on Ashe + - **Penelo**: Bubble Mote on Ashe + - **Basch**: Turn on Gambits + - Switch to Reddas + - Exit + # 1132: Cleft of Profaning Wind + - area: 1132 + steps: |- + - **Skip**: 1 + - **Fenrir** + - Switch to Penelo + - Run in circles for MP + - **Skip**: 1 + # 1133: The Bounds of Truth + - area: 1133 + steps: |- + - Switch to Basch + - Exit ahead + - Follow path to exit + - Go South + - Use device + - **Skip**: 1 + - Go South to elevator + - Go to floor 67 + - **Skip**: 1 + # 1105: Reach of the Occult + - area: 1105 + steps: |- + - Go towards camera + - Use device + - **Skip**: 1 + # 1140: Spire Ravel - 1st Flight + - area: 1140 + steps: |- + - Go forward + - Go Northwest + - Touch Black Sigil + - Go forward + - Turn off Basch's gambits + - Go South to illusory wall + - Touch Green Sigil + # 1141: Spire Ravel - 2nd Flight + - area: 1141 + steps: |- + - Get chest ahead + - Take right path to illusory wall + - Go forward to illusory wall + - Go right + - Touch Red Sigil + - Go forward to Ultima Blade chest + - Touch Purple Sigil (Sigil of Sacrifice) + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Penelo | BSH | +350 HP (below Quickening, bot right) + + - **Equip** + - **Basch**, **Ashe**, **Penelo**: Optimise + - **Ashe**: Ame-no-Murakumo + - Use Float Mote if you have one, otherwise let Vaan eat the trap + - Go North, use illusory wall + - Use device + - Run up to elevator + - **Basch**: Domaine Calvados on Ashe + - **Reddas**: Bubble Mote on Ashe + - Go to floor 90 + # 670: Heaven's Challenge + - area: 670 + steps: |- + - **Skip**: 1 + - **Hashmal** + - Switch to Penelo + - Turn on Basch's gambits + - Run in circles for MP + - **Skip**: 1 + # 1143: Empyrean Ravel + - area: 1143 + steps: |- + - Follow path + - **Skip**: 1 + - stage: 5370 + areas: + # 1143: Empyrean Ravel + - area: 1143 + steps: |- + - Follow path + - Touch crystal + - **Equip**: **Ashe**: Optimise + - Follow path + - **Remove Basch** + - Use device + # 666: Womb of the Sun-cryst + - area: 666 + steps: |- + - **Skip**: 2 + - stage: 5470 + areas: + # 668: Womb of the Sun-cryst + - area: 668 + steps: |- + - **Judge Gabranth** + - Switch to Penelo + - **Add Basch** after cutscene + - **Reddas**: Hastega Mote after cutscene attack + - **Skip**: 1 + - stage: 5550 + areas: + # 668: Womb of the Sun-cryst + - area: 668 + steps: |- + - **Cid 2 (Famrit)** + - Move Penelo behind Cid + - **Skip**: 1 + - **After cutscene** + - **Equip**: **Ashe**: Flame Staff, remove Berserker Bracers + - **Reddas**: Dispel Mote Famfrit when buffed + - **Skip**: 1 + - **Cid 2** + - **Equip**: **Ashe**: Optimise, Berserker Bracers + - **Basch**: Bacchus's Wine + - **Skip**: 2 + - stage: 6000 + areas: + # 826: Saccio Lane + - area: 826 + steps: |- + - Don't save + - **Skip**: 1 + - stage: 6110 + areas: + # 826: Saccio Lane + - area: 826 + steps: |- + - Exit North + # 825: Quayside Court + - area: 825 + steps: |- + - Exit East + # 824: Gallerina Marketplace + - area: 824 + steps: |- + - Exit first South + # 827: Chivany Breakwater + - area: 827 + steps: |- + - Follow path to exit + # 797: Aerodrome (Balfonheim Port) + - area: 797 + steps: |- + - Back left airship NPC + - Go to Bahamut + - **Skip**: 4 + - stage: 6450 + areas: + # 777: Antechamber + - area: 777 + steps: |- + - Switch to Basch + - Exit North + # 774: Periphery + - area: 774 + steps: |- + - Follow path + - Exit Southwest + # 775: Catwalk + - area: 775 + steps: |- + - **Skip**: 1 + - stage: 6600 + areas: + # 775: Catwalk + - area: 775 + steps: |- + - Go forward + - Exit West + # 779: Central Lift + - area: 779 + steps: |- + - **Basch**: Domaine Calvados on self and Ashe + - **Penelo**: Bacchus's Wine on Basch + - Switch to Penelo + - Use console + - **Skip**: 1 + - **Judge Gabranth** + - **After cutscene**: Reflectga Mote on Gabranth + - **After special move**: Heal, then Reverse Mote on Penelo + - **Skip**: 1 + - stage: 6750 + areas: + # 779: Central Lift + - area: 779 + steps: |- + - Use lift controls ahead + - **Skip**: 1 + # 782: Central Shaft + - area: 782 + steps: |- + - **Vayne** + - Run in circles for MP + - **After cutscene and special move** + - **Basch**: Domaine Calvados + - **Penelo**: Domaine Calvados on Ashe + - **Basch**: Bubble Mote on Ashe + - **Penelo**: Bubble Mote + - **Basch**: Bacchus's Wine + - **Skip**: 1 + - stage: 6850 + areas: + # 782: Central Shaft + - area: 782 + steps: |- + - **Vayne Novus** + - If more than 1 Hastega Mote, use + - Use Elixir on Penelo for MP if necessary + - Use Holy Mote to skip Tree of Sephira after Inviolable Will + - **Skip**: 2 + - stage: 7100 + areas: + # 785: Cannon Superstructure + - area: 785 + steps: |- + - **Licences** + + | Character | Board | Licences + | --------- | ----- | -------- + | Ashe | BLM | Accessories 20 (bot right) + + - **The Undying** + - **Equip**: **Ashe**: Hermes Bracers + - **Basch**, **Ashe**: Domaine Calvados and Bacchus's Wine + - ATB cancel both + - **Penelo**: Hastega Mote after buffs + - ATB cancel diff --git a/src/app.rs b/src/app.rs new file mode 100755 index 0000000..2f9b329 --- /dev/null +++ b/src/app.rs @@ -0,0 +1,309 @@ +use std::fs::File; +use std::sync::Arc; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::thread::JoinHandle; + +use anyhow::{Context, Result}; +use clipboard::ClipboardProvider; +use druid::{AppDelegate, AppLauncher, Command, Data, DelegateCtx, Env, FileDialogOptions, FileSpec, Handled, Lens, Menu, MenuItem, RawMods, Selector, Target, Widget, WindowDesc, WindowId}; +use druid::widget::{Align, Padding}; +use num_format::Locale; + +use crate::{GameState, Notes, NotesState}; +use crate::widget::notes_viewer_scroll::NotesViewerScroll; + +#[derive(Clone, Data, Lens)] +pub struct App { + pub notes: Option<(Notes, String)>, + pub game_state: Option, + pub notes_state: Option, + #[data(same_fn = "PartialEq::eq")] + locale: Locale, + change_counter: u64, + update_thread: Option>>, + update_thread_continue: Arc, +} + +impl App { + fn changed(&mut self) { + self.change_counter = self.change_counter.wrapping_add(1); + } +} + +impl Default for App { + fn default() -> Self { + Self { + notes: None, + game_state: None, + notes_state: None, + locale: Locale::en_GB, + change_counter: 0, + update_thread: None, + update_thread_continue: Arc::new(AtomicBool::new(true)), + } + } +} + +impl App { + const CHANGED: Selector<()> = Selector::new("changed"); + const CONNECT: Selector<()> = Selector::new("connect"); + const DISCONNECT: Selector<()> = Selector::new("disconnect"); + const REFRESH: Selector<()> = Selector::new("refresh"); + + pub fn launch(mut self) -> Result<()> { + let main_window = App::build_window(); + let launcher = AppLauncher::with_window(main_window); + let event_sink = launcher.get_external_handle(); + + let should_continue = Arc::clone(&self.update_thread_continue); + self.update_thread = Some(Arc::new(std::thread::spawn(move || { + while should_continue.load(Ordering::SeqCst) { + event_sink.submit_command( + Self::REFRESH, + (), + Target::Auto, + ).ok(); + + std::thread::sleep(std::time::Duration::from_millis(16)); + } + }))); + + launcher + .delegate(Delegate) + .launch(self) + .context("could not launch app") + } + + fn build_window() -> WindowDesc { + WindowDesc::new(Self::build_root_widget()) + .title("FFXII: TZA Auto Notes") + .menu(Self::build_menu) + .window_size((400.0, 800.0)) + } + + fn build_root_widget() -> impl Widget { + // let location = Label::new(|data: &Option, _: &Env| { + // match &data { + // Some(game_state) => format!( + // "{} ({})", + // game_state.location_name(), + // game_state.location, + // ), + // None => "Not connected".into(), + // } + // }) + // .with_line_break_mode(LineBreaking::WordWrap) + // .lens(App::game_state); + // + // let stage = Label::new(|data: &Option, _: &Env| { + // match &data { + // Some(game_state) => game_state.stage.to_string(), + // None => "Not connected".into(), + // } + // }) + // .with_line_break_mode(LineBreaking::WordWrap) + // .lens(App::game_state); + // + // let notes_state = Label::new(|data: &Option, _: &Env| { + // match data { + // Some(notes_state) => format!("Step {:?}, area {}", notes_state.step_idx, notes_state.area_idx), + // None => "Not connected".into(), + // } + // }) + // .with_line_break_mode(LineBreaking::WordWrap) + // .lens(App::notes_state); + // + // let buttons = Flex::row() + // .with_flex_child( + // Button::new("Stage") + // .on_click(|ctx, data: &mut Option, env: &Env| { + // let game_state = match data { + // Some(game_state) => game_state.clone(), + // None => return, + // }; + // + // if let Ok(mut clipboard) = clipboard::ClipboardContext::new() { + // clipboard.set_contents(format!( + // " - stage: {stage} + // areas: + // # {area_id}: {area_name} + // - area: {area_id} + // steps: |- + // - ", + // stage = game_state.stage, + // area_id = game_state.location, + // area_name = game_state.location_name(), + // )).ok(); + // } + // }) + // .lens(App::game_state), + // 1.0, + // ) + // .with_flex_child( + // Button::new("Area") + // .on_click(|ctx, data: &mut Option, env: &Env| { + // let game_state = match data { + // Some(game_state) => game_state.clone(), + // None => return, + // }; + // + // if let Ok(mut clipboard) = clipboard::ClipboardContext::new() { + // clipboard.set_contents(format!( + // " # {area_id}: {area_name} + // - area: {area_id} + // steps: |- + // - ", + // area_id = game_state.location, + // area_name = game_state.location_name(), + // )).ok(); + // } + // }) + // .lens(App::game_state), + // 1.0, + // ); + + // let info = Flex::column() + // .with_child(location) + // .with_child(Separator::new().with_orientation(Orientation::Horizontal)) + // .with_child(stage) + // .with_child(Separator::new().with_orientation(Orientation::Horizontal)) + // .with_child(notes_state) + // .with_child(Separator::new().with_orientation(Orientation::Horizontal)) + // .with_child(buttons); + + // let layout = Split::columns(NotesViewerScroll::new(), info) + // .draggable(true) + // .split_point(0.75); + + Align::centered(Padding::new((8.0, 8.0, 8.0, 0.0), NotesViewerScroll::new())) + } + + fn build_menu(_: Option, _data: &App, _env: &Env) -> Menu { + Menu::empty() + .entry(Self::build_file_menu()) + } + + fn build_file_menu() -> Menu { + let connect: MenuItem = MenuItem::new("Connect") + .command(Command::new(Self::CONNECT, (), Target::Auto)) + .enabled_if(|data: &App, _: &Env| data.game_state.is_none()); + + let disconnect: MenuItem = MenuItem::new("Disconnect") + .command(Command::new(Self::DISCONNECT, (), Target::Auto)) + .enabled_if(|data: &App, _: &Env| data.game_state.is_some()); + + let yaml = FileSpec::new("Auto notes", &["yml", "yaml"]); + let open_options = FileDialogOptions::new() + .allowed_types(vec![yaml]) + .default_type(yaml) + .name_label("Notes") + .title("Open auto notes") + .button_text("Open"); + let open_notes: MenuItem = MenuItem::new("Open notes") + .command(Command::new( + druid::commands::SHOW_OPEN_PANEL, + open_options, + Target::Auto)) + .hotkey(RawMods::Ctrl, "o"); + + let exit: MenuItem = MenuItem::new("Exit") + .command(druid::commands::CLOSE_ALL_WINDOWS); + + Menu::new("File") + .entry(connect) + .entry(disconnect) + .separator() + .entry(open_notes) + .separator() + .entry(exit) + } + + fn set_up_notes_state(&mut self) { + let notes = match self.notes.clone() { + Some((notes, _)) => notes, + None => return, + }; + + if let Some(game_state) = &mut self.game_state { + match NotesState::new(notes, game_state) { + Ok(notes_state) => self.notes_state = Some(notes_state), + Err(e) => eprintln!("could not set up notes state: {:#?}", e), + } + } + } +} + +struct Delegate; + +impl AppDelegate for Delegate { + fn command(&mut self, _ctx: &mut DelegateCtx, _target: Target, cmd: &Command, data: &mut App, _env: &Env) -> Handled { + if let Some(()) = cmd.get(App::CHANGED) { + data.changed(); + } + + if let Some(()) = cmd.get(App::CONNECT) { + match GameState::new() { + Ok(game_state) => { + data.game_state = Some(game_state); + data.set_up_notes_state(); + data.changed(); + } + Err(e) => eprintln!("could not connect: {:#?}", e), + } + + return Handled::Yes; + } + + if let Some(()) = cmd.get(App::DISCONNECT) { + data.game_state = None; + data.notes_state = None; + } + + if let Some(()) = cmd.get(App::REFRESH) { + if let Some(game_state) = &mut data.game_state { + match &mut data.notes_state { + Some(notes_state) => { + // this will refresh gamestate + if let Err(e) = notes_state.tick(game_state) { + eprintln!("could not refresh notes: {:#?}", e); + } + } + None => if let Err(e) = game_state.refresh() { + eprintln!("could not refresh game state: {:#?}", e); + } + } + } + } + + if let Some(info) = cmd.get(druid::commands::OPEN_FILE) { + match File::open(info.path()) + .context("could not open notes file") + .and_then(|file| serde_yaml::from_reader::<_, Notes>(file).context("could not parse notes file")) + { + Ok(notes) => { + data.notes = Some((notes.clone(), info.path().to_string_lossy().to_string())); + data.set_up_notes_state(); + data.changed(); + } + Err(err) => { + eprintln!("{:#?}", err); + } + } + return Handled::Yes; + } + + Handled::No + } + + fn window_removed(&mut self, _id: WindowId, data: &mut App, _env: &Env, _ctx: &mut DelegateCtx) { + let thread = match data.update_thread.take() { + Some(thread) => thread, + None => return, + }; + + data.update_thread_continue.store(false, Ordering::SeqCst); + if let Ok(thread) = Arc::try_unwrap(thread) { + thread.join().ok(); + } + } +} diff --git a/src/game_state.rs b/src/game_state.rs index e83ac05..993b18a 100644 --- a/src/game_state.rs +++ b/src/game_state.rs @@ -1,21 +1,51 @@ +use std::sync::Arc; + use anyhow::{Context, Result}; +use druid::Data; use sysinfo::{PidExt, ProcessExt, ProcessRefreshKind, RefreshKind, System, SystemExt}; use vmemory::ProcessMemory; +#[derive(Clone, Data)] pub struct GameState { - pub location: u16, + pub location: u32, pub gil: u32, pub steps: u32, pub stage: u16, + pub traveler_steps: u16, + pub chain: u16, pid: u32, + #[data(ignore)] base: usize, + #[data(ignore)] base_size: usize, - mem: Vec, - proc_mem: ProcessMemory, + #[data(ignore)] + mem: Arc>, + #[data(ignore)] + proc_mem: Arc, + #[data(ignore)] data_pattern: Vec, + #[data(ignore)] data_addr: usize, + + #[data(ignore)] + traveler_pattern: Vec, + #[data(ignore)] + traveler_addr: usize, + + #[data(ignore)] + chain_pattern: Vec, + #[data(ignore)] + chain_addr: usize, +} + +macro_rules! replace { + ($binding: expr, $value: expr) => {{ + let same = *$binding == $value; + *$binding = $value; + same + }}; } impl GameState { @@ -23,6 +53,7 @@ impl GameState { const GIL_OFFSET: isize = 0x8; const STEPS_OFFSET: isize = 0xC; const STAGE_OFFSET: isize = 0x200; + const TRAVELER_OFFSET: isize = 0x5B00; pub fn new() -> Result { let sys = System::new_with_specifics(RefreshKind::new().with_processes(ProcessRefreshKind::new())); @@ -50,21 +81,31 @@ impl GameState { let tza_mem = mem.read_memory(base, base_size, false); let data_pattern = crate::util::parse_pattern("48 8D 0D ?? ?? ?? ?? 41 B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 33 C9 E8").unwrap(); + let traveler_pattern = crate::util::parse_pattern("48 8B 05 ?? ?? ?? ?? 48 85 C0 75 28 E8").unwrap(); + let chain_pattern = crate::util::parse_pattern("89 05 ?? ?? ?? ?? 89 1D ?? ?? ?? ?? 48 8B 87").unwrap(); let mut state = Self { location: 0, gil: 0, steps: 0, stage: 0, + traveler_steps: 0, + chain: 0, pid: pid.as_u32(), base, base_size, - mem: tza_mem, - proc_mem: mem, + mem: Arc::new(tza_mem), + proc_mem: Arc::new(mem), data_pattern, data_addr: 0, + + traveler_pattern, + traveler_addr: 0, + + chain_pattern, + chain_addr: 0, }; state.set_addresses()?; @@ -100,25 +141,36 @@ impl GameState { fn set_addresses(&mut self) -> Result<()> { self.data_addr = self.find_address(&self.data_pattern)?; + self.traveler_addr = self.find_address_indirect(&self.traveler_pattern)?; + self.chain_addr = self.find_address(&self.chain_pattern)?; Ok(()) } - fn read_data(&self, offset: isize) -> [u8; SIZE] { - let addr = self.data_addr as isize + offset; + fn read_data(&self, addr: usize, offset: isize) -> [u8; SIZE] { + let addr = addr as isize + offset; let vec = self.proc_mem.read_memory(addr as usize, SIZE, true); vec.try_into().unwrap() } - pub fn refresh(&mut self) -> Result<()> { - self.location = u16::from_le_bytes(self.read_data(Self::LOCATION_OFFSET)); - self.gil = u32::from_le_bytes(self.read_data(Self::GIL_OFFSET)); - self.steps = u32::from_le_bytes(self.read_data(Self::STEPS_OFFSET)); - self.stage = u16::from_le_bytes(self.read_data(Self::STAGE_OFFSET)); - - Ok(()) + fn replace(binding: &mut T, value: T) -> bool { + let same = *binding == value; + *binding = value; + same } - pub fn location_name(&self) -> Option<&'static str> { - crate::util::LOCATIONS.get(&self.location).map(std::ops::Deref::deref) + pub fn refresh(&mut self) -> Result { + // boolean or short-circuits + let any_changed = replace!(&mut self.location, u32::from_le_bytes(self.read_data(self.data_addr, Self::LOCATION_OFFSET))) + | replace!(&mut self.gil, u32::from_le_bytes(self.read_data(self.data_addr, Self::GIL_OFFSET))) + | replace!(&mut self.steps, u32::from_le_bytes(self.read_data(self.data_addr, Self::STEPS_OFFSET))) + | replace!(&mut self.stage, u16::from_le_bytes(self.read_data(self.data_addr, Self::STAGE_OFFSET))) + | replace!(&mut self.traveler_steps, u16::from_le_bytes(self.read_data(self.traveler_addr, Self::TRAVELER_OFFSET))) + | replace!(&mut self.chain, u16::from_le_bytes(self.read_data(self.chain_addr, 0))); + + Ok(any_changed) + } + + pub fn location_name(&self) -> &'static str { + crate::util::location_name(self.location) } } diff --git a/src/main.rs b/src/main.rs old mode 100644 new mode 100755 index 167ff88..a001a88 --- a/src/main.rs +++ b/src/main.rs @@ -1,24 +1,19 @@ +#![windows_subsystem = "windows"] + use anyhow::Result; -use std::fs::File; -use std::thread; -use crate::notes::Notes; + use crate::game_state::GameState; +use crate::notes::Notes; use crate::notes_state::NotesState; +mod app; mod notes; mod game_state; mod notes_state; mod util; +mod widget; fn main() -> Result<()> { - let notes: Notes = serde_yaml::from_reader(File::open("notes.yaml")?)?; - let mut game_state = GameState::new()?; - let mut notes_state = NotesState::new(¬es, &mut game_state)?; - - println!("Ready"); - - loop { - notes_state.tick(&mut game_state)?; - thread::sleep(std::time::Duration::from_millis(16)); - } + let app = crate::app::App::default(); + app.launch() } diff --git a/src/notes.rs b/src/notes.rs index 0d8b02e..2c31258 100644 --- a/src/notes.rs +++ b/src/notes.rs @@ -1,18 +1,19 @@ +use druid::{Data, im::Vector}; use serde::Deserialize; -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Clone, Data)] pub struct Notes { - pub steps: Vec, + pub steps: Vector, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Clone, Data)] pub struct Step { pub stage: u16, - pub areas: Vec, + pub areas: Vector, } -#[derive(Debug, Deserialize, Clone)] +#[derive(Debug, Deserialize, Clone, Data)] pub struct Area { - pub area: u16, + pub area: u32, pub steps: String, } diff --git a/src/notes_state.rs b/src/notes_state.rs index 92774c5..542c456 100644 --- a/src/notes_state.rs +++ b/src/notes_state.rs @@ -1,35 +1,37 @@ +use std::sync::Arc; + use anyhow::Result; +use druid::Data; + use crate::{GameState, Notes}; use crate::notes::{Area, Step}; -pub struct NotesState<'a> { - notes: &'a Notes, - last_printed_location: u16, +#[derive(Clone, Data)] +pub struct NotesState { + pub notes: Arc, last_stage: u16, - last_location: u16, + last_location: u32, - step_idx: usize, - area_idx: usize, + pub step_idx: Option, + pub area_idx: usize, - current_step: &'a Step, - first_step: bool, - force_print: bool, + current_step: Step, } -impl<'a> NotesState<'a> { - pub fn new(notes: &'a Notes, game: &mut GameState) -> Result { +impl NotesState { + pub fn new(notes: Notes, game: &mut GameState) -> Result { game.refresh()?; // find first step with a matching story stage let steps = notes.steps .iter() .take_while(|step| step.stage <= game.stage) .count(); - let (step, step_idx, force) = if steps <= 1 { - // nothing previous OR first step - (¬es.steps[0], 0, false) + let (step, step_idx) = if steps == 0 { + // nothing previous + (notes.steps[0].clone(), None) } else { // in progress - (¬es.steps[steps - 1], steps - 1, true) + (notes.steps[steps - 1].clone(), Some(steps - 1)) }; // find first area that matches let area_idx = step.areas @@ -38,19 +40,16 @@ impl<'a> NotesState<'a> { .unwrap_or(0); Ok(Self { - notes, - last_printed_location: 0, + notes: Arc::new(notes), last_stage: 0, last_location: 0, step_idx, area_idx, current_step: step, - first_step: true, - force_print: force, }) } - pub fn tick(&mut self, game: &mut GameState) -> Result<()> { + pub fn tick(&mut self, game: &mut GameState) -> Result { self.last_stage = game.stage; self.last_location = game.location; game.refresh()?; @@ -59,49 +58,38 @@ impl<'a> NotesState<'a> { let location_changed = self.last_location != game.location; let step_advanced = stage_changed && self.change_step(game); - let area = match self.area() { + let mut highlight_changed = step_advanced; + let area = match self.next_area() { Some(area) => area.clone(), - None => return Ok(()), + None => return Ok(highlight_changed), }; - if self.force_print || ((step_advanced || location_changed) && (game.location == area.area || area.area == 0)) { - if self.last_printed_location != game.location { - self.last_printed_location = game.location; - println!("{}", game.location_name().unwrap_or("Unknown Location")) - } - - println!("{}", area.steps); + if !step_advanced && location_changed && (game.location == area.area || area.area == 0) { self.area_idx += 1; - - if self.first_step { - self.first_step = false; - self.step_idx += 1; - if !self.force_print { - self.area_idx = 0; - } - } - - if self.force_print { - self.force_print = false; - } + highlight_changed = true; } - Ok(()) + Ok(highlight_changed) } fn area(&self) -> Option<&Area> { self.current_step.areas.get(self.area_idx) } + fn next_area(&self) -> Option<&Area> { + self.current_step.areas.get(self.area_idx + 1) + } + fn change_step(&mut self, game: &mut GameState) -> bool { - let next = match self.notes.steps.get(self.step_idx) { + let idx = self.step_idx.map(|x| x + 1).unwrap_or(0); + let next = match self.notes.steps.get(idx) { Some(step) => step, None => return false, }; if next.stage == game.stage { - self.current_step = next; - self.step_idx += 1; + self.current_step = next.clone(); + self.step_idx = Some(idx); self.area_idx = 0; return true; } diff --git a/src/util.rs b/src/util.rs old mode 100644 new mode 100755 index b58a655..98594c6 --- a/src/util.rs +++ b/src/util.rs @@ -1,6 +1,9 @@ use std::collections::HashMap; + use itertools::Itertools; +pub mod markdown_renderer; + pub fn parse_pattern(s: &str) -> Option> { let no_whitespace = s.replace(char::is_whitespace, ""); if no_whitespace.len() % 2 == 1 { @@ -65,8 +68,12 @@ pub fn get_static_address(mem: &[u8], mut addr: usize, base: usize) -> Option &'static str { + LOCATIONS.get(&id).map(std::ops::Deref::deref).unwrap_or("???") +} + lazy_static::lazy_static! { - pub static ref LOCATIONS: HashMap = maplit::hashmap! { + pub static ref LOCATIONS: HashMap = maplit::hashmap! { 12 => "Main Menu", 13 => "End Credits", 48 => "Stockade", diff --git a/src/util/markdown_renderer.rs b/src/util/markdown_renderer.rs new file mode 100755 index 0000000..72e055e --- /dev/null +++ b/src/util/markdown_renderer.rs @@ -0,0 +1,327 @@ +use std::ops::RangeBounds; +use std::path::Path; + +use druid::{Color, Env, FontFamily, FontStyle, FontWeight, ImageBuf, Widget, WidgetExt}; +use druid::piet::ImageFormat; +use druid::text::RichTextBuilder; +use druid::widget::{FillStrat, Flex}; +use druid_widget_nursery::table::{ComplexTableColumnWidth, FlexTable, TableCellVerticalAlignment, TableColumnWidth, TableRow}; +use image::GenericImageView; +use pulldown_cmark::{Event, HeadingLevel, Options, Parser, Tag}; + +use crate::app::App; +use crate::NotesState; +use crate::widget::rich_text_display::RichTextDisplay; + +pub struct MarkdownRenderer<'e, 'p> { + src: &'e str, + path: &'p str, + pos: (usize, usize), + add_newline: bool, + current_pos: usize, + builder: RichTextBuilder, + tag_stack: Vec<(usize, Tag<'e>)>, + list_depth: usize, + in_table: Option, + in_image: Option<(String, String)>, + rendered: Vec>>, +} + +impl<'e, 'p> MarkdownRenderer<'e, 'p> { + const BULLET: &'static str = "• "; + + pub fn new(src: &'e str, path: &'p str, pos: (usize, usize)) -> Self { + Self { + src, + path, + pos, + add_newline: false, + current_pos: 0, + builder: RichTextBuilder::new(), + tag_stack: Vec::new(), + list_depth: 0, + in_table: None, + in_image: None, + rendered: Vec::with_capacity(1), + } + } + + pub fn render(mut self) -> Vec>> { + let mut events = Parser::new_ext(self.src, Options::ENABLE_TABLES); + while let Some(event) = events.next() { + self.event(event); + self.image(&mut events); + self.table(&mut events); + } + + self.render_builder(); + self.rendered + } + + fn render_builder(&mut self) { + let pos = self.pos.clone(); + + let mut builder = RichTextBuilder::new(); + std::mem::swap(&mut builder, &mut self.builder); + self.current_pos = 0; + + let built = builder.build(); + if built.is_empty() { + return; + } + + self.rendered.push(RichTextDisplay::new(built) + .disabled_if(move |data: &Option, _env: &Env| { + let highlight_pos = data + .as_ref() + .and_then(|state| state.step_idx.map(|step_idx| (step_idx, state.area_idx))); + highlight_pos != Some(pos) + }) + .lens(App::notes_state) + .boxed()); + } + + fn builder_push(&mut self, s: &str) { + self.builder.push(s); + self.current_pos += s.len(); + } + + fn add_attribute_for_tag(&mut self, tag: &Tag, range: impl RangeBounds) { + let mut attrs = self.builder.add_attributes_for_range(range); + match tag { + Tag::Heading(lvl, _, _) => { + let font_size = match lvl { + HeadingLevel::H1 => 38.0, + HeadingLevel::H2 => 32.0, + HeadingLevel::H3 => 26.0, + HeadingLevel::H4 => 20.0, + HeadingLevel::H5 => 16.0, + HeadingLevel::H6 => 12.0, + _ => 12.0, + }; + attrs.size(font_size).weight(FontWeight::BOLD); + } + Tag::BlockQuote => { + attrs.style(FontStyle::Italic).text_color(Color::GRAY); + } + Tag::CodeBlock(_) => { + attrs.font_family(FontFamily::MONOSPACE); + } + Tag::Emphasis => { + attrs.style(FontStyle::Italic); + } + Tag::Strong => { + attrs.weight(FontWeight::BOLD); + } + Tag::Strikethrough => { + attrs.strikethrough(true); + } + Tag::Link(_link_ty, _target, _title) => { + attrs + .underline(true) + .text_color(Color::AQUA); + // .link(OPEN_LINK.with(target.to_string())); + } + // ignore other tags for now + _ => (), + } + } + + fn add_newline_after_tag(tag: &Tag) -> bool { + !matches!( + tag, + Tag::Emphasis | Tag::Strong | Tag::Strikethrough | Tag::Link(..), + ) + } + + fn event(&mut self, event: Event<'e>) { + match event { + Event::Start(tag) => { + if let Tag::Table(aligns) = &tag { + self.in_table = Some(aligns.len()); + self.add_newline = false; + } + + if let Tag::Image(_, url, title) = &tag { + self.in_image = Some((url.to_string(), title.to_string())); + } + + if matches!(&tag, Tag::List(..)) { + if self.list_depth > 0 { + self.add_newline = true; + } + + self.list_depth += 1; + } + + if self.add_newline { + self.builder_push("\n"); + self.add_newline = false; + } + + if matches!(&tag, Tag::Item) { + for _ in 0..self.list_depth { + self.builder_push(" "); + } + + self.builder_push(Self::BULLET); + } + + self.tag_stack.push((self.current_pos, tag)); + } + Event::Text(text) => { + self.builder_push(&text); + } + Event::End(end_tag) => { + if matches!(&end_tag, Tag::Table(..)) { + self.in_table = None; + } + + if matches!(&end_tag, Tag::Image(..)) { + self.in_image = None; + } + + let (start_off, tag) = self.tag_stack + .pop() + .expect("parser does not return unbalanced tags"); + assert_eq!(end_tag, tag, "mismatched tags"); + self.add_attribute_for_tag(&tag, start_off..self.current_pos); + if Self::add_newline_after_tag(&tag) { + self.add_newline = true; + } + if matches!(&tag, Tag::List(..)) { + self.list_depth -= 1; + } + } + Event::Code(text) => { + self.builder.push(&text).font_family(FontFamily::MONOSPACE); + self.current_pos += text.len(); + } + Event::Html(text) => { + self.builder + .push(&text) + .font_family(FontFamily::MONOSPACE) + .text_color(Color::RED); + self.current_pos += text.len(); + } + Event::HardBreak => { + self.add_newline = true; + } + _ => {} + } + } + + fn table(&mut self, mut events: impl Iterator>) { + let cols = match self.in_table { + Some(cols) => cols, + None => return, + }; + + // handle any text yet to render + self.render_builder(); + let mut start = self.rendered.len(); + let mut table = FlexTable::new() + .default_vertical_alignment(TableCellVerticalAlignment::Top); + let widths: Vec = (0..cols) + .map(|i| if i == cols - 1 { + TableColumnWidth::Flex(1.0).into() + } else { + TableColumnWidth::Intrinsic.into() + }) + .collect(); + table.set_column_widths(&widths); + let mut row = None; + + while self.in_table.is_some() { + if let Some(event) = events.next() { + match &event { + Event::Start(Tag::TableRow | Tag::TableHead) => { + row = Some(TableRow::new()); + } + Event::Start(Tag::TableCell) => { + start = self.rendered.len(); + } + Event::End(Tag::TableRow | Tag::TableHead) => { + if let Some(row) = row.take() { + table.add_row(row); + } + + row = None; + } + Event::End(Tag::TableCell) => { + self.render_builder(); + let mut widgets: Vec<_> = self.rendered.drain(start..).collect(); + if let Some(row) = &mut row { + if widgets.len() == 1 { + row.add_child(widgets.remove(0).padding(2.0)); + } else if widgets.len() > 1 { + let mut flex = Flex::column(); + for widget in widgets { + flex.add_child(widget.padding(2.0)); + } + + row.add_child(flex); + } + } + } + _ => {} + } + + self.event(event); + self.add_newline = false; // never add newlines in a table + } else { + break; + } + } + + self.rendered.push(table.boxed()); + } + + fn image(&mut self, mut events: impl Iterator>) { + let url = match &self.in_image { + Some((url, _)) => url.clone(), + None => return, + }; + + self.render_builder(); + let start = self.rendered.len(); + + while self.in_image.is_some() { + if let Some(event) = events.next() { + self.event(event); + self.add_newline = false; // never add newlines in an image + } else { + break; + } + } + + self.render_builder(); + let alt: Vec<_> = self.rendered.drain(start..).collect(); + + let image_path = Path::new(self.path) + .parent() + .map(|parent| parent.join(&url)) + .unwrap_or_else(|| Path::new(&url).to_owned()); + match image::open(image_path) { + Ok(image) => { + let image = image.into_rgba8(); + let width = image.width() as usize; + let height = image.height() as usize; + let image_buf = ImageBuf::from_raw( + image.into_flat_samples().samples, + ImageFormat::RgbaSeparate, + width, + height, + ); + let widget = druid::widget::Image::new(image_buf) + .fill_mode(FillStrat::ScaleDown) + .fix_width(width as f64); + self.rendered.push(widget.boxed()); + } + Err(err) => { + eprintln!("error loading image: {:?}", err); + self.rendered.extend(alt); + } + } + } +} diff --git a/src/widget/mod.rs b/src/widget/mod.rs new file mode 100755 index 0000000..77bf4fe --- /dev/null +++ b/src/widget/mod.rs @@ -0,0 +1,3 @@ +pub mod notes_viewer; +pub mod notes_viewer_scroll; +pub mod rich_text_display; diff --git a/src/widget/notes_viewer.rs b/src/widget/notes_viewer.rs new file mode 100755 index 0000000..15618f3 --- /dev/null +++ b/src/widget/notes_viewer.rs @@ -0,0 +1,125 @@ +use std::collections::HashMap; + +use druid::{BoxConstraints, Data, Env, Event, EventCtx, LayoutCtx, LensExt, LifeCycle, LifeCycleCtx, PaintCtx, Point, Rect, RenderContext, Size, UpdateCtx, Widget, WidgetExt, WidgetPod}; +use druid::widget::{CrossAxisAlignment, Flex, MainAxisAlignment}; + +use crate::app::App; +use crate::Notes; +use crate::util::markdown_renderer::MarkdownRenderer; + +#[derive(Default)] +pub struct NotesViewer { + children: Vec<((usize, usize), WidgetPod>>)>, + rects: HashMap<(usize, usize), Rect>, + highlighted: Option<(usize, usize)>, +} + +impl NotesViewer { + pub fn new() -> Self { + Self::default() + } + + pub fn rect_for_step(&self, step: usize, area: usize) -> Option { + self.rects.get(&(step, area)).cloned() + } + + fn rerender(&mut self, notes: &Option<(Notes, String)>) { + self.children.clear(); + + let (notes, path) = match notes { + Some(notes) => notes, + None => return, + }; + + for step_idx in 0..notes.steps.len() { + let step = ¬es.steps[step_idx]; + + for area_idx in 0..step.areas.len() { + let area = &step.areas[area_idx]; + + let mut flex: Flex = Flex::column() + .main_axis_alignment(MainAxisAlignment::Start) + .cross_axis_alignment(CrossAxisAlignment::Start); + let location_name = crate::util::location_name(area.area); + for child in Self::render_markdown(&format!("#### {}\n{}", location_name, area.steps), path, (step_idx, area_idx)) { + flex.add_child(child); + } + + self.children.push(( + (step_idx, area_idx), + WidgetPod::new(flex).boxed(), + )); + } + } + } + + fn render_markdown(src: &str, path: &str, pos: (usize, usize)) -> Vec>> { + MarkdownRenderer::new(src, path, pos).render() + } +} + +impl Widget for NotesViewer { + fn event(&mut self, ctx: &mut EventCtx, event: &Event, data: &mut App, env: &Env) { + for (_, child) in &mut self.children { + child.event(ctx, event, data, env); + } + } + + fn lifecycle(&mut self, ctx: &mut LifeCycleCtx, event: &LifeCycle, data: &App, env: &Env) { + for (_, child) in &mut self.children { + child.lifecycle(ctx, event, data, env); + } + + match event { + LifeCycle::WidgetAdded => { + self.rerender(&data.notes); + ctx.children_changed(); + } + _ => {} + } + } + + fn update(&mut self, ctx: &mut UpdateCtx, old_data: &App, data: &App, env: &Env) { + for (_, child) in &mut self.children { + child.update(ctx, data, env); + } + + // if the notes have changed, we need to rerender them + if !old_data.notes.same(&data.notes) { + self.rerender(&data.notes); + ctx.children_changed(); + } + + // if the note state has changed, a new section needs to be highlighted + if !old_data.notes_state.same(&data.notes_state) { + self.highlighted = data.notes_state + .as_ref() + .and_then(|state| state.step_idx.map(|step_idx| (step_idx, state.area_idx))); + ctx.request_paint(); + } + } + + fn layout(&mut self, ctx: &mut LayoutCtx, bc: &BoxConstraints, data: &App, env: &Env) -> Size { + self.rects.clear(); + + let mut pos = Point::ZERO; + let mut size = bc.min(); + + for ((step, area), child) in &mut self.children { + let child_size = child.layout(ctx, bc, data, env); + child.set_origin(ctx, data, env, pos); + self.rects.insert((*step, *area), Rect::from_origin_size(pos, child_size)); + pos.y += child_size.height; + size.height += child_size.height; + size.width = child_size.width.max(size.width); + } + + size + } + + fn paint(&mut self, ctx: &mut PaintCtx, data: &App, env: &Env) { + for (_, child) in &mut self.children { + child.paint(ctx, data, env); + } + } +} diff --git a/src/widget/notes_viewer_scroll.rs b/src/widget/notes_viewer_scroll.rs new file mode 100755 index 0000000..b9c547f --- /dev/null +++ b/src/widget/notes_viewer_scroll.rs @@ -0,0 +1,67 @@ +use druid::{BoxConstraints, Data, Env, Event, EventCtx, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, Rect, Size, UpdateCtx, Widget, WidgetPod}; +use druid::widget::Scroll; + +use crate::app::App; +use crate::widget::notes_viewer::NotesViewer; + +pub struct NotesViewerScroll { + scroll: WidgetPod>, +} + +impl NotesViewerScroll { + pub fn new() -> Self { + Self { + scroll: WidgetPod::new(Scroll::new(NotesViewer::new()).vertical()), + } + } +} + +impl Widget for NotesViewerScroll { + fn event(&mut self, ctx: &mut EventCtx, event: &Event, data: &mut App, env: &Env) { + self.scroll.event(ctx, event, data, env); + } + + fn lifecycle(&mut self, ctx: &mut LifeCycleCtx, event: &LifeCycle, data: &App, env: &Env) { + self.scroll.lifecycle(ctx, event, data, env); + } + + fn update(&mut self, ctx: &mut UpdateCtx, old_data: &App, data: &App, env: &Env) { + self.scroll.update(ctx, data, env); + + let mut should_scroll = !old_data.notes_state.same(&data.notes_state) + || (old_data.game_state.is_none() && data.game_state.is_some()); + + if let (Some(old), Some(new)) = (&old_data.notes_state, &data.notes_state) { + if should_scroll && old.step_idx == new.step_idx && old.area_idx == new.area_idx { + should_scroll = false; + } + } + + // scroll to new section + if should_scroll { + if let Some((step_idx, area_idx)) = data.notes_state + .as_ref() + .and_then(|state| state.step_idx.map(|step_idx| (step_idx, state.area_idx))) + { + let rect = self.scroll.widget().child().rect_for_step(step_idx, area_idx); + println!("scroll to step {} area {}: {:?}", step_idx, area_idx, rect); + if let Some(rect) = rect { + let step_height = rect.height(); + let scroll_size = self.scroll.layout_rect(); + let mid_scroll = scroll_size.height() / 2.0; + let mid_step = mid_scroll - (step_height / 2.0); + let scroll_to = Rect::new(rect.x0, rect.y0, rect.x1, rect.y1 + mid_step); + self.scroll.widget_mut().scroll_to(scroll_to); + } + } + } + } + + fn layout(&mut self, ctx: &mut LayoutCtx, bc: &BoxConstraints, data: &App, env: &Env) -> Size { + self.scroll.layout(ctx, bc, data, env) + } + + fn paint(&mut self, ctx: &mut PaintCtx, data: &App, env: &Env) { + self.scroll.paint(ctx, data, env); + } +} diff --git a/src/widget/rich_text_display.rs b/src/widget/rich_text_display.rs new file mode 100755 index 0000000..d91d9da --- /dev/null +++ b/src/widget/rich_text_display.rs @@ -0,0 +1,43 @@ +use std::marker::PhantomData; + +use druid::{BoxConstraints, Env, Event, EventCtx, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, Size, UpdateCtx, Widget, WidgetPod}; +use druid::text::RichText; +use druid::widget::{LineBreaking, RawLabel}; + +pub struct RichTextDisplay { + text: RichText, + label: WidgetPod>, + _phantom: PhantomData, +} + +impl RichTextDisplay { + pub fn new(text: RichText) -> Self { + Self { + text, + label: WidgetPod::new(RawLabel::new().with_line_break_mode(LineBreaking::WordWrap)), + _phantom: PhantomData, + } + } +} + +impl Widget for RichTextDisplay { + fn event(&mut self, ctx: &mut EventCtx, event: &Event, _data: &mut T, env: &Env) { + self.label.event(ctx, event, &mut self.text, env); + } + + fn lifecycle(&mut self, ctx: &mut LifeCycleCtx, event: &LifeCycle, _data: &T, env: &Env) { + self.label.lifecycle(ctx, event, &self.text, env); + } + + fn update(&mut self, ctx: &mut UpdateCtx, _old_data: &T, _data: &T, env: &Env) { + self.label.update(ctx, &self.text, env); + } + + fn layout(&mut self, ctx: &mut LayoutCtx, bc: &BoxConstraints, _data: &T, env: &Env) -> Size { + self.label.layout(ctx, bc, &self.text, env) + } + + fn paint(&mut self, ctx: &mut PaintCtx, _data: &T, env: &Env) { + self.label.paint(ctx, &self.text, env); + } +}